comm.CPMDemodulator

Демодулируйте с использованием метода CPM и алгоритма Viterbi

Описание

The CPMDemodulator объект демодулирует сигнал, который был модулирован с помощью непрерывной фазовой модуляции. Вход является представлением модулированного сигнала в основной полосе частот.

Чтобы демодулировать сигнал, который был модулирован с использованием непрерывной фазовой модуляции:

  1. Определите и настройте объект демодулятора CPM. См. «Конструкция».

  2. Функции step для демодуляции сигнала в соответствии со свойствами comm.CPMDemodulator. Поведение step характерен для каждого объекта в тулбоксе.

Примечание

Начиная с R2016b, вместо использования step метод для выполнения операции, заданной Системной object™, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Конструкция

H = comm.CPMDemodulator создает демодулятор Системного объекта, H. Этот объект демодулирует входные данные непрерывной фазы, модулированные (CPM), используя алгоритм Viterbi.

H = comm.CPMDemodulator(Name,Value) создает объект демодулятора CPM, H, с каждым заданным набором свойств до заданного значения. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1, Value1..., NameN, ValueN).

H = comm.CPMDemodulator(M,Name,Value) создает объект демодулятора CPM, H, с ModulationOrder значение свойства установлено в M, и другие заданные свойства устанавливаются на заданные значения.

Свойства

ModulationOrder

Размер символа алфавита

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

BitOutput

Выход данных в виде бит

Задайте, состоит ли выход из групп бит или целого числа значений. Значение по умолчанию является false.

Когда вы устанавливаете это свойство на false, а step метод выводит вектор-столбец длины, равную N/ SamplesPerSymbol и с элементами, которые являются целыми числами между - (ModulationOrder-1) и ModulationOrder–1. Здесь, N, - длина входного сигнала, которая указывает количество входа модулированных символов основной полосы частот.

Когда вы устанавливаете это свойство на true, а step метод выводит двоичный вектор-столбец длины, равную P×(N / SamplesPerSymbol), где P = log2 (ModulationOrder). Вывод содержит длинно- P битовые слова. В этом сценарии объект сначала преобразует каждый демодулированный символ в нечетное целое значение, K, между - (ModulationOrder-1) и ModulationOrder–1. Затем объект преобразует K в неотрицательное целое число (K + ModulationOrder–1)/2. Наконец, объект сопоставляет каждое неотрицательное целое число с двоичным словом с P длиной, используя отображение, заданное в SymbolMapping свойство.

SymbolMapping

Кодировка символов

Задайте отображение демодулированных символов как одно из Binary | Gray. Значение по умолчанию является Binary. Это свойство определяет, как объект отображает каждое демодулированное целочисленное значение символа (в области значений 0 и ModulationOrder-1) к P битовому слову -length, где P = log2 (ModulationOrder).

Когда вы устанавливаете это свойство на Binaryобъект использует естественное двоичное закодированное упорядоченное расположение.

Когда вы устанавливаете это свойство на Grayобъект использует Серый-закодированное упорядоченное расположение.

Это свойство применяется, когда вы устанавливаете BitOutput свойство true.

ModulationIndex

Индекс модуляции

Задайте индекс модуляции. Значение по умолчанию является 0.5. Значение этого свойства может быть скаляром, h или вектором-столбцом, [h0, h1,.... h H-1]

где H-1 представляет длину вектора-столбца.

Когда h i изменяется от интервала к интервалу, объект работает в несколько часов. Когда объект работает в multi-h, h i должно быть рациональным числом.

FrequencyPulse

Форма импульса частоты

Задайте тип формирования импульса, который модулятор использовал для сглаживания фазовых переходов входного модулированного сигнала, как один из Rectangular | Raised Cosine | Spectral Raised Cosine | Gaussian | Tamed FM. Значение по умолчанию является Rectangular.

MainLobeDuration

Длительность основной доли спектрального приподнятого косинусоидного импульса

Задайте в количестве интервалов символов длительность самой большой доли спектрального приподнятого косинусоидного импульса. Это значение является значением, которое модулятор использовал для формирования импульса входа модулированного сигнала. Значение по умолчанию является 1. Это свойство требует реального, положительного, целочисленного скаляра. Это свойство применяется, когда вы устанавливаете FrequencyPulse свойство к Spectral Raised Cosine.

RolloffFactor

Коэффициент отката спектрального приподнятого косинусоидного импульса

Задайте коэффициент выключения крена спектрального приподнятого косинусоидного импульса. Это значение является значением, которое модулятор использовал для формирования импульса входа модулированного сигнала. Значение по умолчанию является 0.2. Это свойство требует реального скаляра между 0 и 1. Это свойство применяется, когда вы устанавливаете FrequencyPulse свойство к Spectral Raised Cosine.

BandwidthTimeProduct

Продукт полосы пропускания и времени символа Гауссова импульса

Задайте продукт полосы пропускания и времени символа для формы Гауссова импульса. Это значение является значением, которое модулятор использовал для формирования импульса входа модулированного сигнала. Значение по умолчанию является 0.3. Это свойство требует реального, положительного скаляра. Это свойство применяется, когда вы устанавливаете FrequencyPulse свойство к Gaussian.

PulseLength

Длина импульса

Задайте длину формы частотного импульса в символьных интервалах. Значение этого свойства требует действительного положительного целого числа. Значение по умолчанию является 1.

SymbolPrehistory

Символьная доистория

Задайте символы данных, используемые модулятором до первого вызова step способ. Значение по умолчанию является 1. Это свойство требует скаляра или вектора с нечетными целочисленными элементами между - (ModulationOrder-1) и (ModulationOrder–1). Если значение является вектором, то его длина должна быть на один меньше, чем значение в PulseLength свойство.

InitialPhaseOffset

Смещение начальной фазы

Задайте начальное смещение фазы входа модулированной формы волны в радианах как действительное, числовой скаляр. Значение по умолчанию является 0.

SamplesPerSymbol

Количество выборок на один входной символ

Задайте ожидаемое количество выборок на входной символ в виде положительного, целочисленного скаляра. Значение по умолчанию является 8.

TracebackDepth

Глубина следа для алгоритма Viterbi

Задайте количество ветвей шпалеры, которое алгоритм Viterbi использует для построения каждого пути трассировки как положительного, целочисленного скаляра. Значение по умолчанию является 16. Значение этого свойства также является выходной задержкой, которая является количеством нулевых символов, которые предшествуют первому значимому демодулированному символу в выходе.

OutputDataType

Тип данных выхода

Укажите тип выходных данных как один из int8 | int16 | int32 | double, когда вы устанавливаете BitOutput свойство false. Когда вы устанавливаете BitOutput свойство к true, задайте тип выходных данных как один из logical | double. Значение по умолчанию является double.

Методы

шагДемодулируйте с использованием метода CPM и алгоритма Viterbi
Общий для всех системных объектов
release

Разрешить изменение значения свойства системного объекта

reset

Сброс внутренних состояний Системного объекта

Примеры

свернуть все

% Create a CPM modulator, an AWGN channel, and a CPM demodulator. 
    hMod = comm.CPMModulator(8, 'BitInput', true, ...
                         'SymbolMapping', 'Gray');
    hAWGN = comm.AWGNChannel('NoiseMethod', ...
                         'Signal to noise ratio (SNR)','SNR',0);
    hDemod = comm.CPMDemodulator(8, 'BitOutput', true, ...
                         'SymbolMapping', 'Gray');
% Create an error rate calculator, account for the delay caused by the Viterbi algorithm.
    delay = log2(hDemod.ModulationOrder)*hDemod.TracebackDepth;
    hError = comm.ErrorRate('ReceiveDelay', delay);
    for counter = 1:100
        % Transmit 100 3-bit words
        data = randi([0 1],300,1);
        modSignal = step(hMod, data);
        noisySignal = step(hAWGN, modSignal);
        receivedData = step(hDemod, noisySignal);
        errorStats = step(hError, data, receivedData);
    end
    fprintf('Error rate = %f\nNumber of errors = %d\n', ...
      errorStats(1), errorStats(2))
Error rate = 0.004006
Number of errors = 120

Использование comm.CPMModulator и comm.CPMDemodulator Системные объекты применяют GFSK модуляцию и демодуляцию к случайным битовым данным.

Создайте пару объектов GFSK и демодулятора.

gfskMod = comm.CPMModulator('ModulationOrder', 2, 'FrequencyPulse', 'Gaussian', ... 
               'BandwidthTimeProduct', 0.5, 'ModulationIndex', 1, ...
               'BitInput', true);
gfskDemod = comm.CPMDemodulator('ModulationOrder', 2, 'FrequencyPulse', 'Gaussian', ... 
               'BandwidthTimeProduct', 0.5, 'ModulationIndex', 1, ...
               'BitOutput', true);

Сгенерируйте случайные битовые данные и примените GFSK модуляцию. Используйте график поля точек для просмотра созвездия.

numSym = 100;
x = randi([0 1],numSym*gfskMod.SamplesPerSymbol,1);
y = gfskMod(x);
eyediagram(y,16)

Figure Eye Diagram contains 2 axes. Axes 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.

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

z = gfskDemod(y);
delay = finddelay(x,z);
isequal(x(1:end-delay),z(delay+1:end))
ans = logical
   1

Алгоритмы

Этот объект реализует алгоритм, входы и выходы, описанные на CPM Demodulator Baseband блочных страниц с описанием. Свойства объекта соответствуют параметрам блоков. Для КАРТЫ В МИНУТУ сдвиг фазы за символ - π × <reservedrangesplaceholder1>, где h - индекс модуляции.

Расширенные возможности

.
Введенный в R2012a