Вопрос по статье "Демодуляция сигналов с угловой модуляцией. PM и FM демодуляторы "

IgorV
Сообщения: 17
Зарегистрирован: 02 мар 2021, 17:36

Вопрос по статье "Демодуляция сигналов с угловой модуляцией. PM и FM демодуляторы "

Сообщение IgorV »

Вообще это про демодулирование FM радио 88-108МГц.
При попытке демодулировать IQ с частотой сэмплов F = 312.5к, имея максимальную девиацию 110кГц на входе, по методике из статьи https://ru.dsplib.org/content/signal_fm ... demod.html
столкнулся с тем, что демодулятор работает не линейно, вместо получения f - частоты модуляции получается sin(f/F) , т.е. после девиации ~80кГц выходное значение такого демодулятора уменьшается. Когда F на 2 порядка больше максимальной девиации тогда sin x примерно равен x и искажения не так заметны, почти линейно.

Применяя демодулирование при помощи КИХ дискриминатора (совсем другой способ) получается линейно во всем диапазоне девиаций до 110кГц. Но вычислений больше, КИХ имеет 29-31 точку.

Как можно "выпрямить" демодулятор из https://ru.dsplib.org/content/signal_fm ... demod.html в моем случае?

P.S. Ссылки не на ту статью написал - исправил теперь.
Последний раз редактировалось IgorV 04 мар 2021, 19:16, всего редактировалось 3 раза.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Вопрос по статье "Сигналы с угловой модуляцией. "

Сообщение Бахурин Сергей »

А можно подробнее с данными и примерами увидеть как проявляют себя данные нелинейные искажения? По идее такого быть не должно.

IgorV
Сообщения: 17
Зарегистрирован: 02 мар 2021, 17:36

Re: Вопрос по статье "Демодуляция сигналов с угловой модуляцией. PM и FM демодуляторы "

Сообщение IgorV »

Код: Выделить всё

int discriminator2(icomplex in)
{
static complex inD;
double A,B,S;
A= in.Re; B=in.Im;
S=( A * (inD.Im-B)-(inD.Re-A) * B )/( A*A + B*B );
inD.Re = in.Re;
inD.Im = in.Im;
return S*100;
}
функция вызывается с частотой сэмплов 312.5к раз в сек На графике сравнение двух вариантов. Черные точки КИХ, зеленые- арктангенс.
Вложения
FIRvsArctan.jpg
Последний раз редактировалось IgorV 04 мар 2021, 19:16, всего редактировалось 1 раз.

IgorV
Сообщения: 17
Зарегистрирован: 02 мар 2021, 17:36

Re: Вопрос по статье Демодуляция сигналов с угловой модуляцией. PM и FM демодуляторы"

Сообщение IgorV »

Код: Выделить всё

  for(j=-110;j<120;j+=10) // ступеньки частот от -110кГц до +110кГц
  {
     geterodin_init(j * 1000.0, 312500.0); //назначить новую частоту гетеродину, частота сэмплов 312500Гц

     for(i=0;i<20; i++)
     {
        vect = geterodin(); // возвращает IQ 
        ivect.Re = vect.Re*2500; // амплитуда от фанаря
        ivect.Im = vect.Im*2500;
        Image1->Canvas->Pixels[k++][ - discriminator(ivect) + Image1->Height/2 ]=clBlack; // КИХ

        Image1->Canvas->Pixels[k++][  discriminator2(ivect) + Image1->Height/2 ]=clGreen; // Арктангенс

     }
   }


IgorV
Сообщения: 17
Зарегистрирован: 02 мар 2021, 17:36

Re: Вопрос по статье "Демодуляция сигналов с угловой модуляцией. PM и FM демодуляторы "

Сообщение IgorV »

вот http://ru.dsplib.org/forum/viewtopic.php?f=8&t=177 пример ,когда девиация 80, а частота сэмплов 3200. Загоняю эти данные в свою программу и получаю, что как будто демодулированный сигнал попадает, но на самом деле есть небольшое отклонение, просто его не видно на картинке. Может кто-нибудь попробовать промоделировать в скрипте как тут http://ru.dsplib.org/forum/viewtopic.php?f=8&t=177 только чуток другие данные: девиация 100, частота сэмплов 312.5 что станет с синусоидой на сравнительном изображении? Мне этот скрипт вводить просто некуда. Заранее благодарю.
Вложения
FIRvsArctan2.jpg

IgorV
Сообщения: 17
Зарегистрирован: 02 мар 2021, 17:36

Re: Вопрос по статье "Демодуляция сигналов с угловой модуляцией. PM и FM демодуляторы "

Сообщение IgorV »

Сам разобрался. Как мне кажется. Может кому пригодится. Методика из статьи по демодулированию FM имеет ограничения:
1. Частота сэмплов IQ должна быть не менее чем в 4 раза выше частоты максимальной девиации.
2. Результатом методики является значение sin(2pi*dev/Fs) т.е. для получения девиации необходимо еще выполнить функцию arcsin - крайне противная функция т.к. при значениях аргумента, близких к 1, производная результата стремится к бесконечности.
3. Если частота Fs на порядок и более превышают dev тогда и arcsin не нужен.

Ответить