Документация Engee

demod

Демодуляция для моделирования систем связи.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • x = demod(y, fc, fs, method, opt) — демодулирует вещественный полезный сигнал y с использованием несущей частоты fc, частоты дискретизации fs и метода method с дополнительными параметрами, заданными в opt.

  • x = demod(y, fc, fs, method) — демодулирует вещественный полезный сигнал y с использованием несущей частоты fc, частоты дискретизации fs и метода method.

Аргументы

Входные аргументы

# y — модулированный сигнал
вектор | матрица

Details

Модулированный полезный сигнал, заданный как вещественный вектор или матрица. Сигнал y имеет ту же размерность, что и x, за исключением методов method: "pwm" и "ppm".

# fc — несущая частота
скаляр

Details

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

# fs — частота дискретизации
скаляр

Details

Частота дискретизации, указанная как вещественный положительный скаляр.

# method — метод модуляции
"am" (по умолчанию) | "amdsb-sc" | "amdsb-tc" | "amssb" | "fm" | "pm" | "pwm" | "pmm" | "qam"

Details

Используемый метод модуляции, возможные значения:

  • "am" или "amdsb-sc" — амплитудная демодуляция, две боковые полосы, подавленная несущая. Умножает y на синусоиду с частотой fc и применяет фильтр нижних частот Баттерворта пятого порядка с использованием функции filtfilt.

    x = y.*cos(2*pi*fc*t);
    [b,a] = butter(5,fc*2/fs);
    x = filtfilt(b,a,x);
  • "amdsb-tc" — амплитудная демодуляция, две боковые полосы, передаваемая несущая. Умножает y на синусоиду с частотой fc и применяет фильтр нижних частот Баттерворта пятого порядка с использованием функции filtfilt.

    x = y.*cos(2*pi*fc*t);
    [b,a] = butter(5,fc*2/fs);
    x = filtfilt(b,a,x);

    Если вы укажете opt, то demod вычтет скалярное значение opt из x. Значение по умолчанию для параметра opt равно 0.

  • "amssb" — амплитудная демодуляция. Умножает y на синусоиду с частотой fc и применяет фильтр нижних частот Баттерворта пятого порядка с использованием функции filtfilt.

    x = y.*cos(2*pi*fc*t);
    [b,a] = butter(5,fc*2/fs);
    x = filtfilt(b,a,x);
  • "fm" — частотная демодуляция. Демодулирует форму частотно-модулированного (ЧМ) сигнала путем модуляции преобразования Гильберта y с помощью комплексной экспоненциальной частоты -fc Гц и получает в результате мгновенную частоту.

    y=cos(2*pi*fc*t + opt*cumsum(x))

    Функция cumsum является прямоугольной аппроксимацией интеграла от x. Функция modulate использует opt как константу частотной модуляции. Если вы не укажете значение opt, то modulate использует значение по умолчанию opt=(fc/fs)*2*pi/(max(max(x))), поэтому максимальное отклонение частоты от fc будет fc Гц.

  • "pm" — фазовая демодуляция. Демодулирует форму фазово-модулированного (ФМ) сигнала путем модуляции преобразования Гильберта y с помощью комплексной экспоненциальной частоты -fc Гц и получает в результате мгновенную фазу.

    y=cos(2*pi*fc*t + opt*x)

    Функция modulate использует opt как константу фазовой модуляции. Если вы не укажете значение opt, то modulate использует значение по умолчанию opt=pi/(max(max(x))), поэтому максимальное отклонение фазы будет рад.

  • "pwm" — широтно-импульсная демодуляция. Определяет ширину импульса сигнала с широтно-импульсной модуляцией y. Функция demod возвращает в x вектор, элементы которого определяют длительность каждого импульса в долях периода. Импульсы в y должны начинаться с начала каждого периода несущей, то есть они должны быть выровнены по левому краю. При вызове функции modulate(x,fc,fs,"pwm","centered") получаются импульсы, центрированные в начале каждого периода. Длина y равна length(x)*fs/fc.

  • "ppm" — позиционно-импульсная демодуляция. Определяет положения импульсов в сигнале с позиционно-импульсной модуляцией y. Для правильной демодуляции импульсы не должны перекрываться. Длина x равна length(t)*fc/fs.

  • "qam" — квадратурная амплитудная демодуляция. Функция [x1,x2] = demod(y,fc,fs,"qam") умножает y на косинус и синус с частотой fc и применяет фильтр нижних частот Баттерворта пятого порядка, используя filtfilt.

    x1 = y.*cos(2*pi*fc*t);
    x2 = y.*sin(2*pi*fc*t);
    [b,a] = butter(5,fc*2/fs);
    x1 = filtfilt(b,a,x1);
    x2 = filtfilt(b,a,x2);

    Входной аргумент opt должен быть той же размерности, что и y.

# opt — дополнительные параметры для некоторых методов
Произвольный тип

Details

Дополнительные параметры для некоторых методов. Подробнее в method.

Типы данных

Float32, Float64, Char, String

Поддержка комплексных чисел

Да

Выходные аргументы

# x — демодулированный полезный сигнал
вектор | матрица

Details

Демодулированный полезный сигнал, возвращаемый в виде вещественного вектора или матрицы.