Как читать последовательный код (manchester/hamming/reed-solomon/uart и т п)? процедурно
- Войдите на сайт для отправки комментариев
Втр, 15/06/2021 - 11:50
заглушка here (да детка, меня не устраивает функционал форума, WYSIWYG тупа ОТКЛЮЧЕН, ватафак блеять? вот поэтому и код втыкают неправильно)
Делаю USCI (командный интерфейс) для ПК, короче нечто что будет передавать короткие команды, типа как кнопки пульта. Величины полезной нагрузки в 2-3 байта достаточно. Транспортный уровень OSI - ультразвук.
Объясняю как это работает:
1. Берём спектровизуализатор с матрицей 8х32 на БПФ, делаем. Выбрасываем из проекта матрицу.
2. Он 64-образцовый (это ширина окна БПФ если кто непонел) 32-полосный, и авторы заявляют что видит вплоть до 18.6 кГц.
3. Берём последнюю полосу, математику над остальными максимально выкидываем чтобы делать оцифровку быстро насколько возможно.
4. Берём редактор, жмём там Generate-Tone, пишем частоту которую не слышно на слух, которая легко пролезет через аудиокарты любых компов от 1998 г. в., которая надёжно определяется этим анализатором. 18500 Гц подошло. 19000 тоже нормально но наверное такие частоты уже будет тяжко звуковухам говнянного качества.
5. Уря, у нас есть приблуда на одной микросхеме, программа с математикой FFT занимает один таймер и 5 килобайт, дополнительных деталей в смесителе - стабилитрон, 6 резисторов и 2 конденсатора. Никаких тебе дефицитных компараторов, труднорассчитываемых фильтров и прочего аналогового сношательства мозга и необходимости в убер гига измерительных приборах, просто смеситель, как любит Гайвер - навесным монтажом или на макетной плате, плюс БПФ. И если позвучать в винампе каким-то ультразвуком, оно выдаёт на выходе чёткую единицу.
Теперь я копипащу другую библиотеку, для софтварного декода манчестера, и сталкиваюсь с неприятной преградой, что эта срань не пашет, а хорошо бы эту проблемку как-нибудь решить. Что мы имеем?
- "однопроводную" линию связи, то есть
- отсутствие синхронизации
- допустим хифилитики слушают только через бескислородную медь, но у меня допустим на диске качественные файлы (flac/w64) лежат нечасто (жалко места), в основном же это записи на уровне чуть лучше китайских аудиокассет, упакованные lame/mp3/frauhofer iis/m4a кодеками, то есть кодеками которые верхние частоты безбожно жмут (или вообще внагляк выкидывают polyphase lowpass фильтром). То есть сигналы на ультразвуковых частотах с аудиокарт ПуКа крайне редки, то есть - почти полное отсутствие помех.
С кодом авторства ув. victornpb мне удалось добиться распознавания преамбулы и правильного режима работы алгоритма, но его по-прежнему колбасит и полностью распознанную без ошибок посылку я так и не получил. Кроме того, цифры на индикаторе режима (preamble/synced и т д) стали правильными только на пачках 150 мс за полбита, то есть скорость связи - 3.333 bps (три с третью бита в секунду Карл). Должен быть способ проще и эффективнее.
Я думаю, что можно по этому принципу использовать начало преамбулы как захват несущей (как в RFId метках), а потом начать запись в массив, используя для дискретизации период, который был в преамбуле. Если синхронизация собъётся - похер, всё равно длина посылки небольшая, плюс посылки записаны заранее и там то уж все тайминги соблюдены идеально. Надо только подумоть, как бы мне родить алгоритм который сможет выдать в массив нужный бит руководствуясь правилом "большая часть конкретно вот этого кадра дискретизации - конкретно вот такой уровень на линии". Накидайте идей в общем. И мне непонятно, почему так рвёт крышу вышеупомянотому парсеру. Он полностью абстрактный и работает на конечных автоматах, там тупо нечему наткнуться в bottleneck по таймерам/прерываниям. Или ищщщщщщщщо снизить скорость?
На глаз по светодиоду, уверенно распознаются пачки вплоть до 30 мс/полубит, то есть я могу повысить скорость в 5 раз. Ну норм, меня устроит. Но щас-то оно даже на 3 bps не работает? А потом мб в обход loop() и реще получится.
В строках 002 и 003 яшнадеюсь ясно что чтобы получить адрес репы надо дописать ввв.гитхуб.ком
алсо там и схемы по ссылкам. как у меня подключен экран написано в 018 (clk=7,dio=6)
Q: эмм,
на██я, э,с какой цельюзачем оно надо?A: USB HID наоборот. Бездрайверный вывод. Тупа челик воткнул в HDA/AC97 разъём (десятипиновый такой, на маме) и у него всё работает. И не надо ставить ch341 говна и прочий ftdi.
Q: мамкин изобретатель лисапеда, возьми eth, не?
A: не ну так то даааа. А так то неееет...
Upd: мне не впадлу взять вторую атмегу и кинуть ей на Rx провод с D13 первой. Но хотелось бы на одной, тем более места во флеше ещё куча.
Зафрапсил небольшое хоумвидео чтоб доктору было понятно, на что жалуемся: https://youtu.be/O1LuhpLxdSw
Короче выбросил буфер, просто в очереди опрашиваю, работает. Докучи можно контрольных сумм повычислять но оно и так недурно. Но скорость хромает, и это не ардуина не успевает, это переходные процессы в звуковой. Так что реще 3 bps не получится. Максимум вдвое повысить, и то с ухищрениями. Тему думаю логично в проекты переместить. Оформлю в кучу нормально и выложу.
Но скорость хромает, и это не ардуина не успевает, это переходные процессы в звуковой. Так что реще 3 bps не получится.
А ничего, что аналоговые модемы по 56к/с передавали? При полосе пропускания телефонной линии 3.1 кГц.
Боже, что она несет? А можно просто ТЗ в смысле что вы хотите от него ожидать?
Плюс хоумвидео совершенно не то....
- Если ты знаешь что-то такое чего не знаю я, иди сюда и сядь на моё место.
(из диалога Фрай с Оуэнсом, Pitch black, реж. David Twohy, 2004 г.)
FoxJone боже тут ни при чём.
Ну если коротко - все плохо. Пищим - не пищим заменить на двухтоновое. Манчестер требователен к стабильности фазы, джитер его погубил. Заменяй на протокол с разной длительностью 0 и 1. Не, ну понизить скорость - как бы тоже выход ;) БПФ, штука хорошая, но не надо ее совать туда, куда не лезет. Просто БПФ знают некоторые, избранные, чем сильно гордятся и дальше не учатся. Цифровой фильтр КИХ или ДПФ в данном случае намного лучше. Почитай про алгоритм Герцеля, на ДТМФ он делает обычный БПФ (Герцель - он тоже фурье, но не на равномерных частотных интервалах) как бык овцу. Я пробовал был из интереса сравнить.
А чем те радиоканал на 1527 не канал? Нафига тот УЗ?
Logik, мне нужно чтобы оно работало на ПК, без драйверов. Например в виде хтмл страницы с вшитыми quoted-printable mp3 файлами. Ультразвук - очевидный канал, не светодиодом же на CD-ROM мигать?
FFT юзаю т. к. не могу найти/не могу заставить работать схемы эквалайзеров/фильтров и не располагаю приборами (у меня даже частотомера нет, лол) - это очевидный способ как вытащить нужные частоты из звука с минимумом деталей (всё равно ардуине эта задача по зубам, плюс сверхточность не нужна).
Так повесь Нану на юсб, и юзай из броузера https://developer.mozilla.org/en-US/docs/Web/API/SerialPort Я еще не пробовал, правда, но скоро попробую. А к нане уже - все что хош.
Приборы и схемы тебе не нужны. Тебе нужна хорошая математика. Вон те пример КИХ. http://digitrode.ru/computing-devices/mcu_cpu/988-detektor-urovnya-zvuka-na-arduino-svoimi-rukami.html Если б автор еще от плавающей запятой ушел - я бы сказал шо так и надо делать.
вытащить нужные частоты из звука с минимумом деталей (всё равно ардуине эта задача по зубам, плюс сверхточность не нужна).
Эта задача как правило не по зубам авторам кода. А проц может очень многое. Я когда игрался с тем Герцелем видео снимал https://www.youtube.com/watch?v=i6ZzAEG1vaE там и БПФ на всю память, и генерация ДТМФ и уже не помню шо там еще было...
Какой ширины канал то нужен ? БПФ зачем если нужна одна частота ? Во времена 8ми битных МК такое детектили чуть ли не XORом, насколько я помню. В те же времена считывание/запись на магнитофон делались довольно простыми алгоритмами до скоростей ~4800, правда там контроль был вида считалось/не считалось вся запись целиком (такое сам делал), но имея такой рабочий код прикрутить туда избыточность и контроль/исправление ошибок несложно (хотя вот такое сам не делал).
Проц действительно многое может даже в плане звука, вон радиостанцию целую упихали однополосную с DSP обработкой - https://www.youtube.com/watch?v=9DjDdcnP0GE, но там в коде такое, что ну его нафиг :)
Не уверен, что кодер mp3 оставит в покое УЗ, он же выкидывает из сигнала все "лишнее" неслышимое по его мнению. Задача не особо понятна, imho 50/50, что в целом она решается более традиционными способами. Без дров же ничего не работает - если есть дрова для звуковухи почему нет дров под ардуину (можно взять не на китайском usb чипе) ? нипанятна...
Все просто. Вуду распродаст миллиарды девайсов, которые будут ждать свистка. И в час Хэ со странички в даркнете браузер выдаст ультразвуком кодовое слово "Дортмунд"...
sadman41, совершенно верно :)
Morroc если остались примеры (про xor и т п) то с удовольствием почитаю, может научусь чему-нибудь.
но там в коде такое, что ну его нафиг :)
Когда паталогическая тупость становится нормой, тогда код спеца становится "ну его нафиг". Такова рожа современного ИТ. А по существу работы кода замечания есть? Отступы кривые? Переменные не так названы? Или любому дибилу не понятно, значить код сложен в поддержке дибилами? Или проц выбран неверно, надо ж мощней было...
По существу работы, конечно, нет, чувствуется, что выжато все что можно, к сожалению местами этого недостаточно, но многие довольны. Такое ощущение, что автору по приколу было не проект сделать, а именно упихать его в мегу, он же недавний совсем, выбор платформ уже был неплохой.
Не, оно все на магнитофонных кассетах еще было, выкинуто давно, когда носители посовременней пошли той темой не интересовался уже. Вроде там ничего хитрого, будет пару часов свободных - попробую сочинить что нибудь под дуину.
релиз https://github.com/arleenlasleur/usci
Посмотрите исходники АОНов, там решалась задача селекции 6 заданных частот при помощи 1 битного (после компаратора) АЦП.
И вполне себе удачно решалась на длительных интервалах.