Демодуляция FSK, восстановление синхронизации по времени

10

В настоящее время я использую акустическую модуляцию и демодуляцию FSK. Я не парень по обработке сигналов, поэтому любая помощь по восстановлению синхронизации битов будет очень признательна. В настоящее время я реализовал демодулятор, используя два согласованных фильтра для каждого тона (с разностью фаз для некогерентного обнаружения). В основном на выходе каждого фильтра имеются пики с разными амплитудами. У меня есть два вопроса:90

  • Как я могу выполнить восстановление синхронизации?
  • Что вы рекомендуете для преамбулы синхронизации пакетов (щебет, код Баркера, золотой код и т. Д.)?

Я погуглил алгоритм Гарднера, но я не уверен, применим ли он и как. Представьте, что я сейчас работаю с двумя частотами с битрейтом 800 бит / с, используя звуковую карту.

Питер
источник

Ответы:

8

В настоящее время я использую акустическую модуляцию и демодуляцию FSK. Я не парень обработки сигналов ...

Поскольку вы говорите, что у вас есть подходящие фильтры, и вы упоминаете некогерентное обнаружение, я думаю, что вы уже в значительной степени являетесь специалистом по цифровым коммуникациям - шаг к тому, чтобы быть человеком DSP, довольно мал :)

Полноценный подход синхронизатора SDR

Таким образом, классический способ сделать это состоит в том, чтобы взять выходные данные двух ваших фильтров, (по амплитуде) возвести их в квадрат, отфильтровать нижние частоты до значения, превышающего и во время / после фильтрации decimate (если возможно), так что мы не тратим операций в секунду.2есимвол, не более

Я сделал себе быстрый полосовой сигнал реального времени с демодуляцией FSK (думаю, если бы я сделал это снова, я бы заменил два полосовых фильтра одним комбинированным преобразованием частоты и одним фильтром нижних частот, дав мне сложную базовую полосу, или бросил набор многофазных фильтров в проблеме, но неважно) в GNU Radio с помощью спутника GNU Radio (файл потокового графика здесь ):

FSK recv

Дело в том, что мы, вероятно, хотим синхронизировать символы между делением и пороговым блоком. Впоследствии мы могли бы сделать это - классический подход «проектирование микроконтроллеров и цифрового оборудования» на самом деле был бы поглотителем тактовых импульсов Мюллера и Мюллера, и это сработало бы там точно так же - но давайте не будем тратить впустую информацию об уклоне.

Итак, я бы добавил здесь многофазную синхронизацию часов; Я должен признать, что не мог сформулировать это лучше, чем Том, ученик Харриса, сделал в документации одноименного радиоблока GNU :

Синхронизатор времени с использованием многофазных фильтров.

Этот блок выполняет временную синхронизацию для сигналов PAM путем минимизации производной отфильтрованного сигнала, что, в свою очередь, максимизирует SNR и минимизирует ISI.

Этот подход работает путем установки двух наборов фильтров; один набор фильтров содержит согласованный фильтр формирования импульсов сигнала (такой как фильтр с косинусным корнем), где каждая ветвь набора фильтров содержит различную фазу фильтра. Второй банк фильтров содержит производные фильтров в первом банке фильтров. Думая об этом во временной области, первый набор фильтров содержит фильтры, которые имеют форму синуса к ним. Мы хотим выровнять выходной сигнал, который будет дискретизирован точно на пике формы синуса. Производная sinc содержит ноль в точке максимума ( sinc ( 0 ) = 1 ,синк ). Кроме того, область вокруг нулевой точки является относительно линейной. Мы используем этот факт для генерации сигнала ошибки.синк(0)знак равно1,синк'(0)знак равно0

Если сигнал из производных фильтров равен для i- го фильтра, а выходной сигнал согласованного фильтра равен x i [ n ] , мы вычисляем ошибку как:dя[N]яИкся[N]

е[N]знак равно{Икся[N]}{dя[N]}+{Икся[N]}{dя[N]}2,0 ,

Икся[N]Икся[N]Икся[N]а не просто знак особенно хорош для сигналов с низким SNR.

е[N]dКdставкаdставкаdставкаdКdставкаdКdαdβdαdβусиление24

Понимая, что это аудио частота

Таким образом, правильно настроив этот блок (и, возможно, сократив его bpf_decimи lpf_decimпредоставив синхронизатору больший запас для сдвига фаз), вы можете создать очень стабильное восстановление синхронизации символов, что будет полностью излишним для вашего приложения 😁

Поскольку вы выполняете семплирование с помощью звуковой карты на обоих концах, и, как я полагаю, вам не нужно иметь дело с доплеровским режимом, скорость передачи символов имеет фиксированное отношение к несущим частотам (например, передающая сторона имеет более высокую несущую с период из 8 сэмплов звуковой карты, и символ всегда берет, скажем, 128 сэмплов, так что есть фиксированное соотношение), вы можете сделать короткий путь:

dагсdT[N]

Относительно синхронизации пакетов

Что ж, поскольку у вас есть работающий демодулятор, который, вероятно, слишком долго не синхронизируется при отсутствии сигнала, просто используйте фиксированную известную последовательность данных, чтобы найти ваш пакет.

Маркус Мюллер
источник