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')

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

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);

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

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);

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

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

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

scatterplot(rxSig) 

Демодулируйте сигнал, вычисляя мягкие биты с помощью аппроксимированного алгоритма 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