mil188qamdemod

MIL-STD-188-110 B/C-специфическую квадратурную амплитудную демодуляцию

Описание

пример

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

пример

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

Примеры

свернуть все

Демодулируйте сигнал 16-QAM, который был модулирован как указано в MIL-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, который был модулирован как указано в MIL-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 должна быть модулирована в соответствии с MIL-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', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16', или 'uint32'
'bit''double', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16', 'uint32', или 'logical'

Зависимости

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

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

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

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

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

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

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

Когда отклонение шума или степень сигнала приводят к расчетам с крайними положительными или отрицательными величинами, смотрите MIL-STD-188-110 QAM Soft Demodulation для факторов выбора алгоритма.

Зависимости

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

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

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

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

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

свернуть все

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

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

Подробнее о

свернуть все

MIL-STD-188-110 жесткую демодуляцию QAM

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

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

  • Отображает полученный символ в первый квадрант

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

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

MIL-STD-188-110 мягкую демодуляцию QAM

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

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

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

Примечание

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

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

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

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

Ссылки

[1] MIL-STD-188-110B & C: «Стандарты взаимодействия и эффективности для модемов данных». Стандарт взаимодействия Министерства обороны США.

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

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

.
Введенный в R2018a