Как использовать Scilab для анализа частотно-модулированных РЧ сигналов

Добавлено 17 ноября 2018 в 01:10
Цифровая обработка сигналов в Scilab  (содержание)

Вычисление дискретного преобразования Фурье может помочь вам проанализировать, как радиочастотная модуляция влияет на спектр сигнала несущей.

Вспомогательная информация

Предыдущие статьи о цифровой обработке сигналов в Scilab

Влияния амплитудной модуляции в частотной области достаточно просты: основной математической операцией в АМ системах является умножение, а умножение заставляет спектр смещаться так, что оно центрируется относительно новой частоты. Математическое соотношение, составляющее основу частотной модуляции, сложнее:

\[x_{АМ}(t)=\sin(\omega_{нес}t+\int_{-\infty}^{t} x_{нч}(t)dt)\]

Как вы можете видеть, частотно-модулированный сигнал создается путем добавления интеграла от модулирующего сигнала к аргументу функции синуса, которая соответствует несущей. Другими словами, несущая – это sin(ωнесt), что означает, что синусоидальный сигнал с угловой частотой ωнес и без аргумента фазы, а ЧМ сигнал – это несущая с добавлением изменяющегося во времени фазового аргумента, равного интегрированному низкочастотному модулирующему сигналу.

С частотной модуляцией тесно связана фазовая модуляция:

\[x_{ФМ}(t)=\sin(\omega_{нес}t+x_{нч}(t))\]

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

Интегрирование модулирующего сигнала основной полосы

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

BasebandFrequency = 10e3;
CarrierFrequency = 100e3;
SamplingFrequency = 1e7;
BufferLength = 2000;
n = 0:(BufferLength - 1);
BasebandSignal = sin(2*%pi*n / (SamplingFrequency/BasebandFrequency));
CarrierSignal = sin(2*%pi*n / (SamplingFrequency/CarrierFrequency));
plot(n, BasebandSignal)
plot(n, CarrierSignal)
Представление низкочастотного модулирующего сигнала и сигнала несущей во временной области
Представление низкочастотного модулирующего сигнала и сигнала несущей во временной области

Теперь нам нужно интегрировать сигнал основной полосы. Вычисление неопределенного интеграла оцифрованного сигнала не является особенно простым. В Scilab есть команда integrate(), которая может помочь нам с этой задачей, integrate() – это тема для отдельной статьи, поэтому в этой статье я собираюсь использовать более простой метод и обсудить использование integrate() в следующей статье.

Более простой метод, который мы будем использовать сейчас, основан на следующих наблюдениях:

  1. Сигнал основной полосы представляет собой постоянную, одночастотную синусоиду.
  2. Неопределенный интеграл синусоиды представляет собой отрицательную косинусоиду (плюс константа, в нашем случае константа равна нулю).

Итак, всё, что нам нужно сделать, это изменить команду BasebandSignal = sin(...) на BasebandSignal_integral = –cos(...):

BasebandSignal_integral = -cos(2*%pi*n / (SamplingFrequency/BasebandFrequency));
plot(n, BasebandSignal)
plot(n, BasebandSignal_integral)
Синим показана синусоида, красным – отрицательная косинусоида
Синим показана синусоида, красным – отрицательная косинусоида

Частотная модуляция во временной области

Теперь мы готовы сгенерировать ЧМ сигнал. Всё, что нам нужно сделать, это взять команду, используемую для создания сигнала несущей, и добавить массив BasebandSignal_integral к аргументу функции sin().

ModulatedSignal_FM = sin((2*%pi*n / (SamplingFrequency/CarrierFrequency)) + BasebandSignal_integral);

Ниже показан результат.

plot(n, ModulatedSignal_FM)
Частотно-модулированный сигнал во временной области
Частотно-модулированный сигнал во временной области

Не волнуйтесь, частотная модуляция там где-то есть. Проблема в том, что вы не можете ее увидеть, потому что изменения частоты слишком малы относительно несущей частоты. Здесь вводится индекс модуляции. Индекс модуляции, обозначенный символом m, используется для увеличения (или уменьшения) величины изменения частоты, вызванного заданным значением модулирующего сигнала:

\[x_{ЧМ}(t)=\sin(\omega_{нес}t+m\int_{-\infty}^{t} x_{нч}(t)dt)\]

Если мы включим индекс модуляции 4 в команду, используемую для генерации данных ЧМ, эффект модуляции будет гораздо более очевидным:

ModulatedSignal_FM = sin((2*%pi*n / (SamplingFrequency/CarrierFrequency)) + (4*BasebandSignal_integral));
plot(n, ModulatedSignal_FM)
Частотно-модулированный сигнал во временной области при индексе модуляции 4
Частотно-модулированный сигнал во временной области при индексе модуляции 4

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

plot(n, BasebandSignal)
plot(n, BasebandSignal_integral)
Исходный низкочастотный модулирующий сигнал, проинтегрированный модулирующий сигнал и частотно-модулированный сигнал во временной области
Исходный низкочастотный модулирующий сигнал, проинтегрированный модулирующий сигнал и частотно-модулированный сигнал во временной области

Частотная модуляция в частотной области

Следующие команды создадут представление частотно-модулированного сигнала в частотной области.

HalfBufferLength = BufferLength/2;
HorizAxisIncrement = (SamplingFrequency/2)/HalfBufferLength;
DFTHorizAxis = 0:HorizAxisIncrement:((SamplingFrequency/2)-HorizAxisIncrement);
FM_DFT = fft(ModulatedSignal_FM);
FM_DFT_magnitude = abs(FM_DFT);
plot(DFTHorizAxis, FM_DFT_magnitude(1:HalfBufferLength))
xlabel("Frequency (Hz)")
Частотно-модулированный сигнал в частотной области
Частотно-модулированный сигнал в частотной области

Здесь есть две особенности, которые я хочу упомянуть. Во-первых, амплитуда боковой полосы может быть выше амплитуды компонента на несущей частоте. Во-вторых, полоса частот модулированного сигнала (около ±70 кГц относительно несущей частоты) намного больше, чем ширина полосы частот модулирующего сигнала (т.е. ±10 кГц).

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

Частотно-модулированный сигнал в частотной области (индекс модуляции равен 2)
Частотно-модулированный сигнал в частотной области (индекс модуляции равен 2)

Если мы вернем индекс модуляции 4 и уменьшим частоту модулирующего сигнала в 2 раза, спектр изменится на следующий:

Частотно-модулированный сигнал в частотной области (индекс модуляции равен 4, частота модулирующего сигнала равна 5 кГц)
Частотно-модулированный сигнал в частотной области (индекс модуляции равен 4, частота модулирующего сигнала равна 5 кГц)

Заключение

Я не изучал интенсивно частотную модуляцию с точки зрения теоретического анализа, но, насколько я могу судить, довольно сложно предсказать характеристики спектра ЧМ сигнала на основе математических соотношений между модулирующим сигналом и сигналом несущей. Это отличная причина использовать Scilab (или MATLAB, или Octave) для частотного анализа ЧМ систем. Я надеюсь, данная статья предоставила хорошее представление, и мы продолжим обсуждение в следующей статье.

Теги

DFT / ДПФ (дискретное преобразование Фурье)DSP / ЦОС (цифровая обработка сигналов)FFT / БПФ (быстрое преобразование Фурье)FM / ЧМ (частотная модуляция)ScilabМодуляцияРадиочастотная модуляцияЧастотная областьЧастотный анализ

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.