Сразу скажу, что формального образования в области ЦОС и электроники у меня нет, но в связи с интересом к SDR я прочитал уже десяток англоязычных учебников по разным аспектам теории связи и ЦОС.
Сейчас я, что бы теория не оставалась голой теорией, экспериментирую с широкоизвестным RTL-SDR USB-свистком. При этом, я не пользуюсь GNURadio, а кусочки пишу сам, с нуля. Первая цель — полная реализация FM-радио, включая RDS. Понятно, что я совершенно не оригинален, но можно считать это курсовой работой для самого себя.
С приёмника я получаю оцифрованный Q/I поток в baseband. Частота семплирования — 2Ms/s, т.е. по 1Ms/s на Q и на I.
Так вот, я вполне успешно реализовал LPF, PLL и ресемплер. В результате, с использованием PLL в качестве демодулятора (его частотного выхода) после LPF-фильтрации со срезом в 15Khz и ресемплингом в 48Khz моно-звук вполне сносо играет.
Я решил реализовать два других основных метода FM-демодуляции в complex baseband — квадратурную (y[n] = arg(x[n] × x*[n-1]), где x*[n] — комплексное сопряжённое) и с использованием дефференциатора (y[n] = (Re(x[n]) × Im(x'[n]) - Im(x[n]) × Re(x'[n])) / abs²(x[n]), где x'[n] — производная, считается 5-ти стадийным FIR'ом).
Оба способа, в принципе, работают (что-то слышно). Но у них ужасный SNR. Звук радио слышен едва-едва на фоне статики. При том, что я пробую локальные радиостанции, которые отлично принимаются любым "аппаратным" радиоприёмником и вполне нормально детектируется PLL.
Так как я неопытный, я не понимаю: это я что-то делаю не так? Почему оба «классических» способа фактически непригодны к использованию? Где я налажал?
У PLL, впрочем, есть другая проблема: на «разговорных» станциях поверх голосов ведущих и прочих гостей в студии всё время слышен отчётливый нерегулярный треск (не как статика, а отдельными песчинками, если можно так сказать). Почему-то поверх музыки его при этом нет! Опять же, вопрос: что я сделал не так?
Да, вся реализация в double, все значения болтаются во вполне разумных пределах (~10), так что это точно не проблемы недостатка точности.
--------------------
// Black Lion AKA Lev Serebryakov
|