Демодуляція FSK, відновлення бітів


10

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

  • Як я можу виконати відновлення бітових синхронізацій?
  • Що ви рекомендуєте для преамбули синхронізації пакетів (чирп, код баркера, золотого коду тощо)?

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

Відповіді:


8

В даний час я впроваджую акустичну модуляцію та демодуляцію FSK. Я не хлопець, що обробляє сигнали ...

Оскільки ви говорите, що у вас є відповідні фільтри, і ви згадуєте про несумісне виявлення, я думаю, ви вже майже людина з цифрового спілкування - крок до того, щоб бути людиною DSP, досить малий :)

Повноцінний підхід SDR синхронізатора

2fsymbol,max

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

FSK recv

Справа в тому, що ми, мабуть, хочемо, щоб синхронізація часу синхронізації між розділом і пороговим блоком. Ми могли б зробити згодом - класичний підхід "мікроконтролера та цифрового обладнання" насправді був би раковиною Muller & Mueller, і це також спрацювало б там, але не будемо витрачати інформацію на схил.

Отже, я б тут додав багатофазну синхронізацію годин; Я мушу визнати, що я не міг сформулювати це краще, ніж Том, учень Гарріса, в документації однойменного радіоблоку GNU :

Синхронізатор синхронізації за допомогою багатофазних фільтрів.

Цей блок виконує синхронізацію синхронізації для PAM-сигналів шляхом мінімізації похідної відфільтрованого сигналу, що, в свою чергу, максимально збільшує SNR та мінімізує ISI.

sincsinc(0)=1,sinc(0)=0

di[n]ixi[n]

e[n]={xi[n]}{di[n]}+{xi[n]}{di[n]}2.0 .

xi[n]xi[n]xi[n]замість просто знаку особливо добре для сигналів із низьким SNR.

e[n]dkdratedratedratedkdratedkdαdβdαdβgain24

Зрозумівши це - частота звуку

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

Оскільки ви робите вибірки із звуковою карткою на обох кінцях, і оскільки я припускаю, що вам не доведеться мати справу з доплером, швидкість передачі символів має фіксовану залежність від частот несучої (наприклад, сторона передачі має більш високий носій із a період з 8 зразків звукової картки, і символ завжди приймає, скажімо, 128 зразків, тож фіксований коефіцієнт), ви можете зробити скорочення:

darctandt[n]

Щодо синхронізації пакетів

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.