mil188qamdemod

Квадратурная амплитудная демодуляция MIL STD 188 110 B/C

Описание

пример

z = mil188qamdemod(y,M) выполняет демодуляцию QAM на входном сигнале, y, это модулировалось в соответствии с миллиметром STD-188 110 и порядком модуляции, M. Для описания демодуляции STD-188 110 QAM миллиметра смотрите миллиметр STD-188 110 QAM Трудная Демодуляция и миллиметр STD-188 110 QAM Мягкая Демодуляция.

пример

z = mil188qamdemod(y,M,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение". Например, 'OutputDataType','double' задает желаемый тип выходных данных как дважды. Задайте аргументы пары "имя-значение" после всех других входных параметров.

Примеры

свернуть все

Демодулируйте 16-QAM сигнал, который модулировался, как задано в миллиметре STD-188 110B. Постройте полученное созвездие и проверьте, что выход совпадает с входом.

Установите порядок модуляции и сгенерируйте случайные данные.

M = 16;
numSym = 20000;
x = randi([0 M-1],numSym,1);

Модулируйте данные и пройдите через шумный канал.

txSig = mil188qammod(x,M);
rxSig = awgn(txSig,25,'measured');

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

plot(rxSig,'b*')
hold on; grid
plot(txSig,'r*')
xlim([-1.5 1.5]);
ylim([-1.5 1.5])
xlabel('In-Phase')
ylabel('Quadrature')
legend('Received constellation','Reference constellation')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Received constellation, Reference constellation.

Демодулируйте полученный сигнал. Сравните демодулируемые данные с исходными данными.

z = mil188qamdemod(rxSig,M);
isequal(x,z)
ans = logical
   1

Демодулируйте 64-QAM сигнал, который модулировался, как задано в миллиметре STD-188 110C. Вычислите бит трудного решения выход и которые проверяют, что выход совпадает с входом.

Установите порядок модуляции и сгенерируйте случайные битные данные.

M = 64;
numBitsPerSym = log2(M);
x = randi([0 1],1000*numBitsPerSym,1);

Модулируйте данные. Используйте пары "имя-значение", чтобы задать битные входные данные и построить созвездие.

txSig = mil188qammod(x,M,'InputType','bit','PlotConstellation',true);

Figure contains an axes. The axes with title MIL188 64-QAM , UnitAveragePower=false contains 67 objects of type line, text.

Демодулируйте полученный сигнал. Сравните демодулируемые данные с исходными данными.

z = mil188qamdemod(txSig,M,'OutputType','bit');
isequal(z,x)
ans = logical
   1

Демодулируйте 32-QAM сигнал и вычислите мягкие биты.

Установите порядок модуляции и сгенерируйте случайную последовательность битов.

M = 32;
numSym = 20000;
numBitsPerSym = log2(M);
x = randi([0 1], numSym*numBitsPerSym,1);

Модулируйте данные. Используйте пары "имя-значение", чтобы задать битные входные данные и модульную среднюю степень, и построить созвездие.

txSig = mil188qammod(x,M,'InputType','bit','UnitAveragePower',true, ...
    'PlotConstellation',true);

Figure contains an axes. The axes with title MIL188 32-QAM , UnitAveragePower=true contains 35 objects of type line, text.

Передайте передаваемые данные через белый Гауссов шум.

rxSig = awgn(txSig,10,'measured');

Просмотрите созвездие с помощью графика рассеивания.

scatterplot(rxSig) 

Figure Scatter Plot contains an axes. The axes with title Scatter plot contains an object of type line. This object represents Channel 1.

Демодулируйте сигнал, вычисляя мягкие биты с помощью аппроксимированного алгоритма LLR.

z = mil188qamdemod(rxSig,M,'OutputType','approxllr', ...
     'NoiseVariance',10^(-1));

Входные параметры

свернуть все

Модулируемый сигнал в виде комплексного скаляра, вектора или матрицы. Когда y матрица, каждый столбец обработан как независимый канал.

y должен модулироваться в соответствии с миллиметром STD-188 110 [1].

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

Порядок модуляции в виде степени двойки. Порядок модуляции задает общее количество точек в сигнальном созвездии.

Пример: 16

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

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: y = mil188qamdemod(x,M,'OutputType','bit','OutputDataType','single');

Выведите тип в виде разделенной запятой пары, состоящей из OutputType и 'integer', 'bit', 'llr', или 'approxllr'.

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

Выходные данные вводят в виде разделенной запятой пары, состоящей из OutputDataType и один из обозначенных типов данных. Приемлемые значения для OutputDataType зависьте от OutputType значение.

OutputType ЗначениеПриемлемый OutputDataType Значения
'integer''double'единственныйint8int16int32uint8uint16, или 'uint32'
'bit''double'единственныйint8int16int32uint8uint16uint32, или 'logical'

Зависимости

Этот аргумент пары "имя-значение" применяется только когда OutputType установлен в 'integer' или 'bit'.

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

Модульная средняя степень отмечает в виде разделенной запятой пары, состоящей из UnitAveragePower и логический скаляр. Когда этим флагом является true, функция масштабирует созвездие к средней степени 1 ватта, на который ссылаются к 1 Ому. Когда этим флагом является false, функция масштабирует созвездие на основе технических требований в соответствующем стандарте, как описано в [1].

Типы данных: логический

Шумовое отклонение в виде разделенной запятой пары, состоящей из NoiseVariance и положительная скалярная величина или вектор из положительных значений.

  • Когда задано как скаляр, то же шумовое значение отклонения используется на всех входных элементах.

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

Когда шумовое отклонение или результат степени сигнала в расчетах включающие экстремальные положительные или отрицательные величины, смотрите миллиметр STD-188 110 QAM Мягкая Демодуляция для факторов выбора алгоритма.

Зависимости

Этот аргумент пары "имя-значение" применяется только когда OutputType установлен в 'llr' или 'approxllr'.

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

Опция, чтобы построить созвездие в виде разделенной запятой пары, состоящей из 'PlotConstellation' и логический скаляр. Чтобы построить созвездие, установите PlotConstellation к true.

Типы данных: логический

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

свернуть все

Демодулируемый сигнал, возвращенный как скаляр, вектор или матрица. Размерности z зависьте от заданного OutputType значение.

OutputType ЗначениеВозвращаемое значение mil188qamdemodРазмерности z
'integer'Демодулируемые целочисленные значения от 0 до (M – 1)z имеет те же размерности как вход y.
'bit'Демодулируемые битыКоличество строк в z log2 (сумма (M)) времена количество строк в y. Каждый демодулируемый символ сопоставлен с группой log2 (сумма (M)) элементы в столбце, где первый элемент представляет MSB и последний элемент, представляют LSB.
'llr'Значение отношения логарифмической правдоподобности для каждого бита
'approxllr'Аппроксимированное значение отношения логарифмической правдоподобности для каждого бита

Больше о

свернуть все

Миллиметр STD-188 110 QAM трудная демодуляция

Твердый алгоритм демодуляции использует оптимальное решение находящаяся в области демодуляция. Поскольку все точки созвездия одинаково вероятны, максимальны по опыту вероятность (MAP), обнаружение уменьшает до обнаружения наибольшего правдоподобия (ML). Правило обнаружения ML эквивалентно выбору самой близкой точки созвездия к полученному символу. Область решения для каждой точки созвездия спроектирована путем рисования перпендикулярных биссектрис между смежными точками. Полученный символ сопоставлен с соответствующей точкой созвездия, на основе которой области решения он находится в.

Поскольку все созвездия MIL-STD основаны на квадранте симметричный для каждого символа оптимальное решение находящаяся в области демодуляция:

  • Сопоставляет полученный символ в первый квадрант

  • Выбирает область решения для символа

  • Сопоставляет точку созвездия назад с ее исходным квадрантом с помощью знака действительных и мнимых частей полученного символа

Миллиметр STD-188 110 QAM мягкая демодуляция

Для мягкой демодуляции два алгоритма отношения логарифмической правдоподобности (LLR) мягкого решения доступны: точный LLR и аппроксимированный LLR. Эта таблица сравнивает эти алгоритмы.

АлгоритмТочностьСкорость выполнения
Точный LLRболее точныйболее медленное выполнение
Аппроксимированный LLRменее точныйболее быстрое выполнение

Для дальнейшего описания этих алгоритмов см. Точный Алгоритм LLR и Аппроксимируйте Алгоритм LLR.

Примечание

Точный алгоритм LLR вычисляет экспоненциалы с помощью конечной арифметики точности. Расчет экспоненциалов с очень большими положительными или отрицательными величинами может уступить:

  • Inf или -Inf если шумовое отклонение является очень большим значением

  • NaN если оба шумовое отклонение и степень сигнала являются очень маленькими значениями

Когда выход возвращает любое из этих значений, попытайтесь использовать аппроксимированный алгоритм LLR, потому что это не вычисляет экспоненциалы.

Ссылки

[1] Миллиметр STD-188 110B & C: "Функциональная совместимость и стандарты эффективности для модемов данных". Стандарт интерфейса министерства обороны, США.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2018a