exponenta event banner

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

Модуляция методом OQPSK

Описание

Объект comm.OQPSKModulator модулирует входной сигнал, используя метод квадратурной фазовой манипуляции со смещением (OQPSK), и применяет фильтрацию формы импульса к выходной форме сигнала. Дополнительные сведения см. в разделе Фильтр формирования импульсов. Выходной сигнал является представлением модулированного сигнала в основной полосе частот.

Информацию о задержках, возникающих при обработке пары модулятор-демодулятор, см. в разделе Задержки модуляции.

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

  1. Создать comm.OQPSKModulator и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

oqpskmod = comm.OQPSKModulator создает системный object™ модулятора. Этот объект применяет модуляцию квадратурной фазовой манипуляции со смещением (OQPSK) и фильтрацию формы импульса к входному сигналу.

пример

oqpskmod = comm.OQPSKModulator(demod) создает объект системы модулятора с симметричной конфигурацией по отношению к объекту демодулятора OQPSK, demod.

пример

oqpskmod = comm.OQPSKModulator(Name,Value) задает свойства, используя одну или несколько пар имя-значение. Заключите каждое имя свойства в отдельные кавычки.

Пример: comm.OQPSKModulator('BitInput',true)

oqpskmod = comm.OQPSKModulator(phase,Name,Value) задает для свойства PhaseOffset созданного объекта значение phase и устанавливает любые другие указанные Name, Value пар.

Пример: comm.OQPSKModulator(0.5*pi,'SymbolMapping','Binary')

Свойства

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

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Фазовое смещение от λ/4, определяемое как скаляр в радианах. Фазовое смещение применяется к нулевой точке сигнальной совокупности перед задержкой квадратурной составляющей. После задержки мнимой составляющей OQPSK сигнал нормализуется с единичной мощностью.

Пример: 'PhaseOffset',pi/4 выравнивает нулевую точку точки совокупности сигналов QPSK по осям, {(1,0), (0, j), (-1,0), (0, -j)}.

Типы данных: double

Параметр для ввода в битах, указанный как false или true.

  • Если для этого свойства установлено значение falseвходные значения должны быть целочисленными представлениями двухбитовых входных сегментов и находиться в диапазоне от 0 до 3.

  • Если для этого свойства установлено значение true, вход должен быть двоичным вектором чётной длины. Пары элементов являются двоичными представлениями целых чисел.

Типы данных: logical

Битовое отображение созвездия сигналов, указанное как 'Gray', 'Binary'или пользовательский 4-элементный числовой вектор целых чисел со значениями от 0 до 3.

НастройкаОтображение созвездий для целых чиселОтображение созвездия для битовКомментарий

Gray

Отображение созвездия сигналов кодируется по Грею.

Binary

Отображение комбинации сигналов для входного целого числа m (0 ≤ m ≤ 3) - комплексное значение e(j*(PhaseOffset+π/4) + j*2*π*m/4).

Пользовательский 4-элементный числовой вектор целых чисел со значениями от 0 до 3

Элементы [a b c d] должны состоять из набора значений [0, 1, 2, 3] в любом порядке.

Типы данных: char | double

Форма импульса фильтрации, указанная как 'Half sine', 'Normal raised cosine', 'Root raised cosine', или 'Custom'.

Типы данных: char

Повышенный коэффициент отката косинусного фильтра, заданный как скаляр из 0 кому 1.

Зависимости

Это свойство включено, когда PulseShape имеет значение 'Normal raised cosine' или 'Root raised cosine'.

Типы данных: double

Длина фильтра в символах, заданная как скаляр. Идеальный приподнятый косинусный фильтр имеет бесконечную импульсную характеристику. Однако для реализации практической реализации этого фильтра объект усекает импульсную характеристику на FilterSpanInSymbols символы.

Зависимости

Это свойство включено, когда PulseShape имеет значение 'Normal raised cosine' или 'Root raised cosine'.

Типы данных: double

Числитель фильтра, заданный как вектор строки.

Зависимости

Это свойство включено, когда PulseShape имеет значение 'Custom'.

Типы данных: double
Поддержка комплексного номера: Да

Число выборок на символ, указанное как положительное четное целое число.

Типы данных: double

Тип данных, назначенный для вывода, указанный как 'double' или 'single'.

Типы данных: char

Использование

Описание

пример

waveform = oqpskmod(insignal) возвращает модулированный в основной полосе выходной сигнал. Форма выходного сигнала формируется импульсным способом в соответствии со свойствами конфигурации PulseShape и PurePerSymbol.

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

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

Входной сигнал, определяемый как вектор столбца NS-элемента целых чисел или битов, где NS - количество выборок.

Настройка свойства BitInput определяет интерпретацию входного вектора.

Типы данных: double

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

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

Выходной сигнал, возвращаемый в виде вектора. Выходной сигнал имеет импульсную форму в соответствии со свойствами конфигурации PulseShape и PersPerSymbol.

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

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

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Создайте пару модулятора OQPSK и демодулятора. Создайте объект канала AWGN, имеющий два бита на символ.

oqpskmod = comm.OQPSKModulator('BitInput',true);
oqpskdemod = comm.OQPSKDemodulator('BitOutput',true);
channel = comm.AWGNChannel('EbNo',4,'BitsPerSymbol',2);

Создайте калькулятор частоты ошибок. Для учета задержки между модулятором и демодулятором установите ReceiveDelay свойство для 2.

errorRate = comm.ErrorRate('ReceiveDelay',2);

Обработка 300 кадров данных, закольцовывающих эти шаги.

  • Создайте векторы со 100 элементами случайных двоичных данных.

  • OQPSK - модулировать данные. Кадры данных обрабатываются как 50 кадров выборки 2-разрядных двоичных данных.

  • Передача модулированных данных через канал AWGN.

  • OQPSK - демодулировать данные.

  • Сбор статистики ошибок по кадрам данных.

for counter = 1:300
    txData = randi([0 1],100,1);
    modSig = oqpskmod(txData);
    rxSig = channel(modSig);
    rxData = oqpskdemod(rxSig);
    errorStats = errorRate(txData,rxData);
end

Просмотрите статистику ошибок.

ber = errorStats(1)
ber = 3.3336e-05
numErrors = errorStats(2)
numErrors = 1
numBits = errorStats(3)
numBits = 29998

Используйте объект демодулятора OQPSK для инициализации объекта модулятора OQPSK при его создании.

Создайте демодулятор OQPSK, назначив ему фазовое смещение 12δ.

phase = 0.5*pi;
oqpskdemod = comm.OQPSKDemodulator(phase)
oqpskdemod = 
  comm.OQPSKDemodulator with properties:

   Modulation
         PhaseOffset: 1.5708
       SymbolMapping: 'Gray'
           BitOutput: false

   Filtering
          PulseShape: 'Half sine'
    SamplesPerSymbol: 4

      OutputDataType: 'double'

Используйте объект демодулятора для инициализации модулятора OQPSK при его создании.

oqpskmod = comm.OQPSKModulator(oqpskdemod)
oqpskmod = 
  comm.OQPSKModulator with properties:

   Modulation
         PhaseOffset: 1.5708
       SymbolMapping: 'Gray'
            BitInput: false

   Filtering
          PulseShape: 'Half sine'
    SamplesPerSymbol: 4

      OutputDataType: 'double'

Выполнение модуляции и демодуляции OQPSK и применение корневой косинусной фильтрации к форме сигнала.

Инициализация системы

Определите параметры моделирования и создайте объекты для модуляции и демодуляции OQPSK.

sps = 12; % samples per symbol
bits = randi([0, 1], 800, 1); % transmission data

modulator = comm.OQPSKModulator('BitInput',true,'SamplesPerSymbol',sps,'PulseShape','Root raised cosine');
demodulator = comm.OQPSKDemodulator(modulator);

Передача и прием сигналов

Используйте modulator объект для применения модуляции OQPSK и передачи фильтрации к входным данным.

oqpskWaveform = modulator(bits);

Пропускайте сигнал через канал.

snr = 0;
rxWaveform = awgn(oqpskWaveform, snr);

Используйте demodulator объект для применения фильтрации приема и демодуляции OQPSK к форме сигнала.

demodData = demodulator(rxWaveform);

Вычислите частоту битовых ошибок для подтверждения качества восстановления данных.

delay = (1+modulator.BitInput)*modulator.FilterSpanInSymbols;
[~, ber] = biterr(bits(1:end-delay), demodData(delay+1:end))
ber = 0

Используйте qamdemod функция моделирования выхода мягкого решения для OQPSK-модулированных сигналов.

Формирование модулированного сигнала OQPSK.

sps = 4;
msg = randi([0 1],1000,1);
oqpskMod = comm.OQPSKModulator('SamplesPerSymbol',sps,'BitInput',true);
oqpskSig = oqpskMod(msg);

Добавьте шум к сгенерированному сигналу.

impairedSig = awgn(oqpskSig,15);

Выполнение демодуляции с мягким решением

Создайте эквивалентный сигнал QPSK для выравнивания синфазных и квадратурных сигналов.

impairedQPSK = complex(real(impairedSig(1+sps/2:end-sps/2)), imag(impairedSig(sps+1:end)));

Примените согласованную фильтрацию к принятому сигналу OQPSK.

halfSinePulse = sin(0:pi/sps:(sps)*pi/sps);
matchedFilter = dsp.FIRDecimator(sps,halfSinePulse,'DecimationOffset',sps/2);
filteredQPSK = matchedFilter(impairedQPSK);

Для выполнения мягкой демодуляции отфильтрованного сигнала OQPSK используйте qamdemod функция. Выравнивание отображения символов qamdemod с отображением символов, используемым comm.OQPSKModulatorзатем демодулируют сигнал.

oqpskModSymbolMapping = [1 3 0 2];
demodulated = qamdemod(filteredQPSK,4,oqpskModSymbolMapping,'OutputType','llr');

Подробнее

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

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

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