реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Демодуляция FM (УКВ-радио): почему может быть очень низкий SNR?
blacklion
сообщение Oct 20 2014, 18:45
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 20-10-14
Пользователь №: 83 244



Сразу скажу, что формального образования в области ЦОС и электроники у меня нет, но в связи с интересом к 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
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Oct 20 2014, 19:39
Сообщение #2


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Полосу входных отсчетов (I/Q) надо бы ограничить, чтобы она соответствовала полосе радиоканала. Иначе у вас вся полоса в 1 МГц поступает на демодулятор.

В случае с фапч эквивалентная полоса будет определяться полосой петли, т.е. хоть как-то сигнал фильтруется, и поэтому на слух качество лучше.
В случае с прямой оценкой разности фаз на нелинейный элемент поступает все, что есть в полосе 1 МГц.
В том и в другом случае то, что вы слышите, это не статика, а шум, связанный с нелинейным преобразованием сигнала с плохим отношением сигнал-шум. Из-за большой входной полосы мощность шума на входе демодулятора очень большая.

Подробнее здесь:
Кантор Л. Я. и Дорофеев В. М. Помехоустойчивость приема ЧМ сигналов. М., «Связь», 1977. 336 с. с ил.

Также
В примерах GNU Radio был проект демодулятора RDS.

То, что в вашей системе отсутствует, насколько я мне удалось понять из вашего повествования, - это Channel Filter вот с этой картинки.
Go to the top of the page
 
+Quote Post
Serg76
сообщение Oct 20 2014, 20:33
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(blacklion @ Oct 20 2014, 21:45) *
Я решил реализовать два других основных метода 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'ом).

попробуйте такой дискриминатор y[n] = Re(x[n]) × Im(x[n-1]) - Im(x[n]) × Re(x[n-1]), все должно работать, любое дифференцирование сильно разгоняет шумовую составляющую, и плюс к этому надо убрать весь внеполосный шум, чтобы он не попадал в полосу дискриминатора
Go to the top of the page
 
+Quote Post
andyp
сообщение Oct 20 2014, 20:45
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Ну и мои 5 копеек - там по идее должен быть фильтр-деемфазис, подавляющий шум на выходе частотного детектора. Про него не забыли?
Go to the top of the page
 
+Quote Post
V_G
сообщение Oct 21 2014, 02:25
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Ну, и Re(x[n]) * Im(x[n-1]) - Im(x[n]) * Re(x[n-1]) - это как раз вариант вычислений с производной по 2-м точкам. Желательно (но не обязательно) выходной сигнал пронормировать по амплитуде (/ (abs(x[n])^2), чтобы громкость разных радиостанций была одинакова.

И наконец, для минимизации искажений частота дискретизации должна быть максимально высокой, иначе вычисление производной по двум точкам будет неточным.
Go to the top of the page
 
+Quote Post
blacklion
сообщение Oct 21 2014, 15:22
Сообщение #6





Группа: Новичок
Сообщений: 3
Регистрация: 20-10-14
Пользователь №: 83 244



Всем спасибо! Разумеется, не было входного фильтра на 100Khz, введение его всё починило, работают одинаково все 3 способа демодуляции.

Про де-емфазис я помню, пока его нет, но это вопрос правильности передачи частот :) Ну да, высокие неправильные в звуке сейчас.

Производную я считаю по 5 точкам, по 3-м точкам даже на тестовом сигнале (2 синуса как сигнал) очень много шума остаётся.

Ещё раз всем спасибо.

(да, в GNURadio я тоже подглядываю, конечно, но код там… Местами вот прямо баги очевидные, на уровне перепутанных имён переменных, надо, кстати, парочку отрепортить).


--------------------
// Black Lion AKA Lev Serebryakov
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 10:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016