MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем
 

Обработка сигналов и изображений\Communications Toolbox

Список функций CommunicationsToolbox:  Модуляция и демодуляция

  В оглавление \ К следующему разделу \ К предыдущему разделу

AMOD
Аналоговая модуляция (вещественный выходной сигнал)

Синтаксис:

y = amod(x,Fc,Fs,'amdsb-sc');
y = amod(x,Fc,Fs,'amdsb-tc',offset);
y = amod(x,Fc,Fs,'amssb/opt');
y = amod(x,Fc,Fs,'amssb/opt',num,den);
y = amod(x,Fc,Fs,'amssb/opt',hilbertflag);
y = amod(x,Fc,Fs,'qam');
y = amod(x,Fc,Fs,'fm',deviation);
y = amod(x,Fc,Fs,'pm',deviation);
y = amod(x,Fc,[Fs phase],...);
[y,t] = amod(...);

Необязательные входные параметры:

Параметр Значение по умолчанию или поведение функции, если параметр опущен
offset -min(min(x))
opt Если данный параметр опущен, функция amod формирует однополосный сигнал с нижней боковой полосой
deviation 1

Описание:

Функция amod выполняет аналоговую модуляцию, генерируя вещественный выходной сигнал с заданной несущей частотой. Соответствующая функция демодуляции — ademod. В приведенной ниже таблице перечислены поддерживаемые функцией amod виды модуляции.

Вид модуляции Четвертый входной параметр
Амплитудная модуляция, передаются две боковых полосы и несущее колебание 'amdsb-tc'
Амплитудная модуляция, две боковых полосы с подавленной несущей 'amdsb-sc'
Амплитудная модуляция, одна боковая полоса с подавленной несущей 'amssb' или 'amssb/up'
Квадратурная амплитудная модуляция 'qam'
Частотная модуляция 'fm'
Фазовая модуляция 'pm'

Общая информация о синтаксисе:

При всех вариантах вызова функции y = amod(x,Fc,Fs,...) в качестве модулирующего сигнала используется массив x. Параметр Fc — это несущая частота в герцах, а Fs — частота дискретизации в герцах. (Соответственно, период дискретизации для x и y составляет 1/Fs.) Начальная фаза несущего колебания равна нулю. Согласно теореме Найквиста, частота дискретизации должна быть как минимум в два раза больше несущей частоты. Параметры x и y — вещественные матрицы, размеры которых зависят от вида модуляции:

  • Квадратурная амплитудная модуляция. Массив x должен иметь четное число столбцов. Столбцы с нечетными номерами представляют синфазные компоненты модулирующего сигнала, а столбцы с четными номерами — квадратурные компоненты. Если массив x имеет n строк и 2m столбцов, то модулированный сигнал y будет иметь n строк и m столбцов; все пары столбцов массива x обрабатываются независимо друг от друга.
  • Другие виды модуляции. Массивы x и y имеют одинаковые размеры. Если x — двумерная матрица, то ее столбцы обрабатываются независимо друг от друга.

Можно задать частоту дискретизации в виде двухэлементного вектора: y = amod(x,Fc,[Fs phase],...). В данном случае первый элемент этого вектора (Fs) задает частоту дискретизации, как описано выше. Второй элемент (phase) — это начальная фаза несущего колебания в радианах.

Конкретные варианты синтаксиса:

  • y = amod(x,Fc,Fs,'amdsb-tc',offset)

Реализует двухполосную амплитудную модуляцию. Параметр offset — это постоянное смещение, добавляемое к x перед модуляцией. Если параметр offset опущен, его значение по умолчанию равно -min(min(x)). Это обеспечивает стопроцентную глубину модуляции.

  • y = amod(x,Fc,Fs,'amdsb-sc')

Реализует двухполосную амплитудную модуляцию с подавленной несущей.

  • y = amod(x,Fc,Fs,'amssb/opt')

Реализует однополосную амплитудную модуляцию с подавленной несущей. По умолчанию формируется сигнал с нижней боковой полосой; если ключ opt имеет значение up, формируется сигнал с верхней боковой полосой. При данном варианте вызова для формирования сигнала используется преобразование Гильберта в частотной области.

Внимание! Указанный в документации способ управления боковой полосой формируемого сигнала на самом деле не работает. Для устранения этой ошибки можно заменить в строке 79 файла amod.m имя вызываемой функции strcmp на findstr. Впрочем, можно добиться результата и не редактируя файлы MATLAB — достаточно при вызове указать отрицательное значение несущей частоты, и будет сформирован сигнал с верхней боковой полосой.

  • y = amod(x,Fc,Fs,'amssb/opt',num,den)

То же, что и предыдущий вариант синтаксиса, но преобразование Гильберта выполняется во временной области. Параметры num и den — векторы-строки, задающие коэффициенты числителя и знаменателя функции передачи фильтра (в порядке убывания степеней переменной z). Для расчета фильтра Гильберта можно использовать функцию hilbiir.

  • y = amod(x,Fc,Fs,'amssb/opt',hilbertflag)

То же, что и предыдущий вариант синтаксиса, но фильтр, выполняющий преобразование Гильберта во временной области, рассчитывается по умолчанию следующим образом: [num,den] = hilbiir(1/Fs) (параметры num и den были описаны выше). Входной параметр hilbertflag может иметь произвольное значение.

Внимание! При использовании преобразования Гильберта во временной области функция amod работает, мягко говоря, плохо. Причиной является то, что разработчики забыли компенсировать задержку квадратурной составляющей сигнала, неизбежно появляющуюся при фильтрации.

  • y = amod(x,Fc,Fs,'qam')

Реализует квадратурную амплитудную модуляцию. Параметр x должен быть матрицей с четным числом столбцов, при этом столбцы с нечетными номерами служат синфазными модулирующими сигналами, а столбцы с четными номерами — квадратурными модулирующими сигналами. Выходной сигнал y будет матрицей с числом столбцов, в два раза меньшим, чем у x.

  • y = amod(x,Fc,Fs,'fm',deviation)

Реализует частотную модуляцию. Спектр модулированного сигнала лежит в полосе частот от (min(x) + Fc) до (max(x) + Fc). Необязательный параметр deviation — число, задающее девиацию частоты. Модулирующий сигнал x перед модуляцией умножается на константу deviation, так что вызов y = amod(x,Fc,Fs,'fm',deviation) эквивалентен вызову y = amod(x*deviation,Fc,Fs,'fm').

  • y = amod(x,Fc,Fs,'pm',deviation)

Реализует фазовую модуляцию. Необязательный параметр deviation — число, задающее девиацию фазы. Модулирующий сигнал x перед модуляцией умножается на константу deviation, так что вызов y = amod(x,Fc,Fs,'pm',deviation) эквивалентен вызову y = amod(x*deviation,Fc,Fs,'pm').

  • [y,t] = amod(...)

Дополнительно возвращает вектор значений времени t, использованных при вычислениях.

Примеры.

Сравнение двухполосной и однополосной модуляции.

В первом примере сравниваются спектры сигналов с двухполосной и однополосной модуляцией. Модулирующий сигнал — синусоида с частотой 1 Гц, несущая частота равна 10 Гц. Приведенный ниже сценарий использует при вызове функции amod параметры 'amdsb-sc' и 'amssb', чтобы создать модулированные сигналы ydouble (двухполосная модуляция) ysingle (однополосная модуляция). Затем строятся спектры обоих модулированных сигналов.

% Частота дискретизации 100 Гц, продолжительность сигнала 2 с
Fs = 100;
t = [0:2*Fs+1]'/Fs;
Fc = 10; % Несущая частота
x = sin(2*pi*t); % Синусоидальный модулирующий сигнал
% Производим двухполосную и однополосную амплитудную модуляцию.
ydouble = amod(x,Fc,Fs,'amdsb-sc');
ysingle = amod(x,Fc,Fs,'amssb');
% Выводим графики спектров обоих модулированных сигналов.
zdouble = fft(ydouble);
zdouble = abs(zdouble(1:length(zdouble)/2+1));
frqdouble = [0:length(zdouble)-1]*Fs/length(zdouble)/2;
plot(frqdouble,zdouble); % Левый график, приведенный ниже
figure;
zsingle = fft(ysingle);
zsingle = abs(zsingle(1:length(zsingle)/2+1));
frqsingle = [0:length(zsingle)-1]*Fs/length(zsingle)/2;
plot(frqsingle,zsingle); % Правый график, приведенный ниже

Обратите внимание на то, что спектр на левом графике имеет два пика, представляющие собой нижнюю и верхнюю боковые полосы модулированного сигнала. Эти две боковые полосы симметричны относительно несущей частоты Fc, равной 10 Гц. Ширина спектра сигнала с двухполосной АМ в два раза больше, чем максимальная частота, содержащаяся в спектре входного (модулирующего) сигнала. На правом графике есть только один пик, поскольку при однополосной модуляции передается только одна (в данном случае нижняя) боковая полоса.

Пример использования гильбертовского фильтра.

Следующий пример иллюстрирует выполнение преобразования Гильберта во временной области.

Fc = 25; % Несущая частота
Fs = 100; % Частота дискретизации сигнала
[numh,denh] = hilbiir(1/Fs,15/Fs,15); % Расчет фильтра Гильберта.
t = [0:1/Fs:5]'; % Моменты дискретизации сигнала
x = cos(t); % Синусоидальный сигнал.
y = amod(x,Fc,[Fs pi/4],'amssb',numh,denh); % Модулируем,
% используя преобразование Гильберта во временной области.
z = ademod(y,Fc,[Fs pi/4],'amssb'); % Демодуляция.
plot(t,z) % График демодулированного сигнала.

Результирующий график показан ниже слева. Если заменить шестую строку приведенного кода на

y = amod(x,Fc,[Fs pi/4],'amssb'); % Модулируем,

то при однополосной модуляции будет используется преобразование Гильберта в частотной области. Результат демодуляции показан на рисунке ниже справа. Два приведенных графика незначительно различаются начальными переходными процессами.

Внимание! Данный пример приводится в документации пакета Communications и вроде бы работает, несмотря на сформулированные выше предупреждения. Однако качество сформированного однополосного сигнала в данном примере практически не влияет на результат демодуляции. Если же вывести график спектра однополосного сигнала, сформированного с помощью преобразования Гильберта, выполняемого во временной области, окажется, что подавление верхней боковой полосы составляет всего лишь около 20 дБ. Да и такое подавление достигнуто лишь благодаря тому, что период модулирующего сигнала (6,28 с) значительно превышает вносимую гильбертовским фильтром задержку, заданную в числе параметров функции hilbiir и равную 15/Fs = 0,15 с.

Сопутствующие функции: ademod, dmod, ddemod, amodce, ademodce.

  В оглавление \ К следующему разделу \ К предыдущему разделу

 

Поиск по сайту:

Система Orphus

Яндекс.Метрика