Добрый день. Пытаюсь реализовать модулятор MSK(минимальная частотная манипуляция или частотная манипуляция с минимальным сдвигом без разрыва фазы) и корреляционный когерентный демодулятор согласно А.В. Сергеенко "ЦОС", стр.465 Скорость 1200бод, дискретизация 24кГц, 10бит.Реализация - ARM7 1- 1800 Герц 0- 1200Герц 20 отсчетов на символ
С модулятором все понятно: в памяти хранятся два вектора signed по 20 точек для "1" и "0". Исходя из фазы придыдущего символа "инвертируеться" следущий вектор для реализации безразрывности фазы.
И с демодулятором в принципи тоже все понятно: теже 2 опорных вектора, два коррелятора, где отклик больше такой и символ. Ну и конечно учитывать что сигналы могут быть инвертированные для реализации безразрывности фазы.Один большой вопрос: когда запускать корреляторы??
Как я хочу делать: для синхронизации использовать код баркера 1110010 промодулированного MSK - 140 точек. В идиале как все должно работать: ЦАП по таймеру закидывает значение в буфер длинной 140 отсчетов, далее корреляция буфера и эталона кода 1110010MSK, если отклик выше парога значит синхронизация есть и следующий раз запускать корреляторы демодулятора требуеться через 1/1200. Проблема в выборе парога! На порог очень сильно влияет амплитуда сигнала на входе АЦП, шумы влияют в гораздо меньшей степени.
Предпологаемое решение проблемы - адаптивный порог: после записи очередной выборки в буфер, перед коррелятором, вычисляеться какой-нибудь параметр (типа мощности или амплитуды) по всему буферу и исходя из него расчитываеться порог.
Главный вопрос - алгоритм расчета порога для выбора момента синхронизации!
Смущает так же, что автокорреляционная фукция баркера, модулированного MSK, имеет высокие боковые лепестки (половина от главного), в данном случае на +-15 отсчетов от главного.
Рисунки бы приложил, но почему то не прикрепляються!
|