exponenta event banner

коммуникация. CPMDemodulator

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

Описание

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

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

  1. Определите и настройте объект демодулятора CPM. См. раздел Строительство.

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

Примечание

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

Строительство

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

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 свойство имеет значение true.

ModulationIndex

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

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

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

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

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

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

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

OutputDataType

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

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

Методы

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

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

reset

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

Примеры

свернуть все

% 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. Свойства объекта соответствуют параметрам блока. Для CPM фазовым сдвигом на символ является λ × h, где h - индекс модуляции.

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

.
Представлен в R2012a