Я почти завершил проект декодера DCF77 с открытым исходным кодом. Все началось, когда я заметил, что стандартные (Arduino) библиотеки DCF77 работают очень плохо на шумных сигналах. Особенно я никогда не мог получить время из декодеров, когда антенна была близка к компьютеру или когда моя стиральная машина работала.
Мой первый подход состоял в том, чтобы добавить (цифровой) экспоненциальный фильтр + триггер к входящему сигналу.
Хотя это значительно улучшило ситуацию, все равно это было не очень хорошо. Затем я начал читать некоторые стандартные книги по цифровой обработке сигналов и особенно оригинальные работы Клода Элвуда Шеннона. Мой вывод заключался в том, что правильным подходом было бы не "декодировать" сигнал вообще, потому что он (за исключением секунд прыжка) полностью известен априори. Вместо этого было бы более подходящим сопоставить полученные данные с локально синтезированным сигналом и просто определить правильную фазу. Это, в свою очередь, уменьшит эффективную пропускную способность на несколько порядков и, следовательно, значительно снизит шум.
Определение фазы подразумевает необходимость быстрой свертки. Стандартным подходом для эффективной свертки является, конечно, быстрое преобразование Фурье. Однако я реализую для Arduino/Atmega 328. Таким образом, у меня есть только 2k RAM. Поэтому вместо простого подхода с FFT я начал складывать согласованные фильтры с фазовой автоподстройкой. Я зарегистрировал различные этапы проекта здесь:
- Первая попытка: экспоненциальный фильтр
- Начало лучшей оценки: фазовая блокировка по сигналу/секундам тикает
- Блокировка фазы в минутах
- Декодирование минутных и часовых данных
- Декодирование всего сигнала
- Добавление локальных часов для устранения потери сигнала
- Использование локального синтезированного сигнала для более быстрого блокирования повторного захвата после потери сигнала
Я довольно широко искал интернет и не нашел подобного подхода. Тем не менее мне интересно, есть ли аналогичные (и, возможно, лучшие) реализации. Или, если существуют исследования по реконструкции такого рода сигналов.
Я не ищу: проектирование оптимизированных кодов для приближения к пределу Шеннона. Я также не ищу информацию о наложенном PRNG-коде DCF77. Мне также не нужны намеки на "сопоставленные фильтры", так как моя текущая реализация является приближением согласованного фильтра. Конкретные намеки на подходы Viterbi Decoders или Trellis - это не то, что я ищу, - если они не затронут проблему жестких ограничений ЦП и ОЗУ.
Что я ищу: есть ли какие-либо описания/реализации других нетривиальных алгоритмов для декодирования сигналов типа DCF77 с ограниченным ЦП и ОЗУ при наличии значительного шума? Может быть, в некоторых книгах или в газетах из эпохи интернета?