exponenta event banner

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

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

Описание

Объект comm.MSKDemodulator демодулирует сигнал, модулированный методом минимальной манипуляции сдвигом. Объект ожидает, что входной сигнал будет представлять собой представление основной полосы когерентного модулированного сигнала без предварительного кодирования. Свойство начального фазового смещения задает начальную фазу модулированного сигнала.

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

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

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

Примечание

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

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

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

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

Свойства

BitOutput

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

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

При установке для этого свойства значения false, step метод выводит вектор столбца длиной, равной N/SamplesPerSymbol. N представляет длину входного сигнала, которая является количеством входных модулируемых символов основной полосы частот. Элементы выходного вектора: -1 или 1.

При установке BitOutput свойство для true, step метод выводит двоичный вектор-столбец длиной, равной N/SamplesPerSymbol. Векторные элементы являются битовыми значениями 0 или 1.

InitialPhaseOffset

Начальное фазовое смещение

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

SamplesPerSymbol

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

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

TracebackDepth

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

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

OutputDataType

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

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

При установке BitOutput true, укажите тип выходных данных как один из logical | double.

Методы

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

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

reset

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

Примеры

свернуть все

% Create an MSK modulator, an AWGN channel, and an MSK demodulator.  Use a
% phase offset of pi/4.
 hMod = comm.MSKModulator('BitInput', true, ...
                    'InitialPhaseOffset', pi/4);
    hAWGN = comm.AWGNChannel('NoiseMethod', ...
                    'Signal to noise ratio (SNR)','SNR',0);
    hDemod = comm.MSKDemodulator('BitOutput', true, ...
                    'InitialPhaseOffset', pi/4);
 % Create an error rate calculator, account for the delay caused by the Viterbi algorithm
    hError = comm.ErrorRate('ReceiveDelay', hDemod.TracebackDepth);
    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.000000
Number of errors = 0

Этот пример иллюстрирует отображение двоичных последовательностей нулей и единиц на выход модулятора GMSK. Отношение также применимо для модуляции MSK.

Создайте модулятор GMSK, который принимает двоичные входы. Укажите длину импульса и отсчеты для каждого символа как 1.

gmsk = comm.GMSKModulator('BitInput',true,'PulseLength',1,'SamplesPerSymbol',1);

Создайте последовательность ввода всех нулей. Модулировать последовательность.

x = zeros(5,1);
y = gmsk(x)
y = 5×1 complex

   1.0000 + 0.0000i
  -0.0000 - 1.0000i
  -1.0000 + 0.0000i
   0.0000 + 1.0000i
   1.0000 - 0.0000i

Определите фазовый угол для каждой точки. Используйте unwrap функция, чтобы лучше показать тенденцию.

theta = unwrap(angle(y))
theta = 5×1

         0
   -1.5708
   -3.1416
   -4.7124
   -6.2832

Последовательность нулей приводит к сдвигу фазы на -δ/2 между выборками.

Сбросьте модулятор. Модулировать входную последовательность всех.

reset(gmsk)
x = ones(5,1);
y = gmsk(x)
y = 5×1 complex

   1.0000 + 0.0000i
  -0.0000 + 1.0000i
  -1.0000 - 0.0000i
   0.0000 - 1.0000i
   1.0000 + 0.0000i

Определите фазовый угол для каждой точки. Используйте unwrap функция, чтобы лучше показать тенденцию.

theta = unwrap(angle(y))
theta = 5×1

         0
    1.5708
    3.1416
    4.7124
    6.2832

Последовательность единиц заставляет фазу сдвигаться на + δ/2 между выборками.

Алгоритмы

Этот объект реализует алгоритм, входы и выходы, описанные на справочной странице блока основной полосы частот демодулятора MSK. Свойства объекта соответствуют параметрам блока. Для MSK фазовый сдвиг на символ равен δ/2, что является индексом модуляции 0,5.

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

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