comm.OQPSKDemodulator

Демодуляция с использованием OQPSK метода

Описание

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

Для получения информации о задержках, связанных с обработкой пары модулятор-демодулятор, см. «Задержки модуляции».

Чтобы демодулировать сигнал, который модулируется OQPSK:

  1. Создайте comm.OQPSKDemodulator Объекту и установите его свойства.

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

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

Создание

Описание

oqpskdemod = comm.OQPSKDemodulator создает демодулятор System object™. Этот объект может совместно соответствовать-фильтровать и децимировать форму волны и демодулировать ее с помощью смещения квадратурного метода фазы сдвига keying (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 ≤ <reservedrangesplaceholder0> ≤ 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
Поддержка комплексного числа: Да

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

расширить все

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

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

Создайте пару 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