exponenta event banner

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

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

Описание

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

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

Для демодуляции сигнала, модулированного OQPSK:

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

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

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

Создание

Описание

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

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

пример

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

Пример: comm.OQPSKDemodulator('BitOutput',true)

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

Пример: comm.OQPSKDemodulator(0.5*pi,'SamplesPerSymbol',2)

Свойства

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

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и 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', или 'uint8'.

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

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

Описание

пример

outsignal = oqpskdemod(waveform) возвращает демодулированный выходной сигнал. Объект создает один выходной символ для каждого входного импульса.

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

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

Принятая форма сигнала, заданная как сложный скалярный или столбчатый вектор.

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

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

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

Демодулированный сигнал, возвращаемый в виде целочисленного вектора NS-элемента или битового вектора, где NS - количество выборок.

Принимаемый сигнал формируется импульсным путем в соответствии со свойствами конфигурации PulseShape и PersPerSymbol. Установка свойства BitOutput определяет интерпретацию принятого сигнала.

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

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

Чтобы использовать функцию объекта, укажите объект 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.

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