comm.CPMDemodulator

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

Описание

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 - слово бита длины, где P = log2 (ModulationOrder).

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

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

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

ModulationIndex

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

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

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

Когда h i варьируется от интервала до интервала, объект действует в multi-h. Когда объект действует в 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

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

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

OutputDataType

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

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

Методы

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

Позвольте изменения значения свойства Системного объекта

Примеры

развернуть все

% 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)

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

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

Алгоритмы

Этот объект реализует алгоритм, входные параметры и выходные параметры, описанные на странице с описанием блока CPM Demodulator Baseband. Свойства объектов соответствуют параметрам блоков. Для CPM сдвиг фазы на символ является π × h, где h является индексом модуляции.

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

Представленный в R2012a