mil188qamdemod

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

Синтаксис

z = mil188qamdemod(y,M)
z = mil188qamdemod(y,M,Name,Value)

Описание

пример

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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].

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

Шумовое отклонение, заданное как пара, разделенная запятой, состоящая из 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