apskdemod

Амплитудно-фазовая демодуляция (APSK)

Описание

пример

z = apskdemod(y,M,radii) выполняет демодуляцию APSK входного сигнала y, на основе конкретного количества созвездия указывает на звонок PSK, M, и радиус каждого звонка PSK, radii. Для описания демодуляции APSK смотрите APSK Трудная Демодуляция и APSK Мягкая Демодуляция.

Примечание

apskdemod в частности применяется к нескольким кольцевым созвездиям PSK. Для одного кольцевого созвездия PSK использовать pskdemod.

z = apskdemod(y,M,radii,phaseoffset) задает смещение начальной фазы для каждого звонка PSK APSK модулируемый сигнал.

пример

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

Примеры

свернуть все

Демодулируйте сигнал 16-APSK, который имеет неравное количество точек созвездия на каждом круге. Постройте полученное созвездие.

Задайте векторы для порядка модуляции и кольцевых радиусов PSK. Сгенерируйте случайные 16-ary символы данных.

M = [4 12];
radii = [1 2];
modOrder = sum(M);

x = randi([0 modOrder-1],1000,1);

Примените модуляцию APSK к данным.

txSig = apskmod(x,M,radii);

Передайте модулируемый сигнал через шумный канал.

snr = 20; % dB
rxSig = awgn(txSig,snr,'measured');

Постройте переданные (ссылочные) точки сигнала и шумные полученные очки сигнала.

plot(rxSig,'b*')
hold on
grid
plot(txSig,'r+')
xlim([-3 3])
ylim([-3 3])
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 = apskdemod(rxSig,M,radii);
isequal(x,z)
ans = logical
   1

Демодулируйте сигнал 64-APSK с пользовательским отображением символа. Вычислите бит трудного решения выход и проверьте, что вход совпадает с выходом.

Задайте векторы для порядка модуляции и кольцевых радиусов PSK. Сгенерируйте 100 символов случайного битного входа.

M = [8 12 16 28]; % 4-PSK circles
modOrder = sum(M);
radii = [0.5 1 1.3 2];
x = randi([0 1],100*log2(modOrder),1);

Создайте пользовательский вектор отображения символа из бинарного отображения.

cmap = 0:63; 

Модулируйте данные и постройте созвездие.

y = apskmod(x,M,radii,'SymbolMapping',cmap,'inputType','bit', ...
    'PlotConstellation',true);

Figure contains an axes. The axes with title 64-APSK with Custom Mapping contains 67 objects of type line, text.

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

z = apskdemod(y,M,radii,'SymbolMapping',cmap,'OutputType','bit');

Проверьте, что демодулируемый сигнал равен исходным данным.

isequal(x,z)
ans = logical
   1

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

Задайте векторы для порядка модуляции и кольцевых радиусов PSK. Сгенерируйте 10 000 символов случайных битных данных.

M = [16 16];
modOrder = sum(M);
radii = [0.6 1.2];
numSym = 10000;
x = randi([0 1], numSym*log2(modOrder),1);

Сгенерируйте ссылочное созвездие. Создайте объект схемы созвездия.

refAPSK = apskmod(0:modOrder-1,M,radii);
constDiagAPSK = comm.ConstellationDiagram('ReferenceConstellation',refAPSK, ...
  'Title','Received Symbols','XLimits',[-2 2],'YLimits',[-2 2]);

Модулируйте данные.

txSig = apskmod(x,M,radii,'InputType','bit');
sigPow = var(txSig);

Передайте сигнал через шумный канал.

snr = 15;
rxSig = awgn(txSig,snr,sigPow,'linear');

Постройте ссылку и полученные символы созвездия.

constDiagAPSK(rxSig)

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

z = apskdemod(rxSig,M,radii,'OutputType','approxllr', ...
    'NoiseVariance',sigPow/snr);

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

свернуть все

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

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

Созвездие указывает на звонок PSK в виде вектора больше чем с одним элементом. Векторные элементы указывают на количество точек созвездия в каждом звонке PSK. Первый элемент соответствует самому внутреннему кругу, и так далее, до последнего элемента, который соответствует наиболее удаленному кругу. Значения элемента должны быть множителями четыре и сумма (M) должна быть степень двойки. Порядок модуляции является общим количеством точек в сигнальном созвездии и равняется сумме векторных элементов, сумме (M).

Пример: [4 12 16] задает три кольцевых созвездия PSK с порядком модуляции sum(M) = 32.

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

Кольцевые радиусы PSK в виде вектора с той же длиной как M. Первый элемент соответствует самому внутреннему кругу, и так далее, до последнего элемента, который соответствует наиболее удаленному кругу. Элементы должны быть положительными и расположены в увеличивающемся порядке.

Пример: [0.5 1 2] задает кольцевые радиусы PSK созвездия. Внутренний звонок имеет радиус 0,5, второй звонок имеет радиус 1,0, и внешний звонок имеет радиус 2,0.

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

Смещение фазы каждого PSK звенит в радианах в виде скаляра или вектора с той же длиной как M. Первый элемент соответствует самому внутреннему кругу, и так далее, до последнего элемента, который соответствует наиболее удаленному кругу. phaseoffset может быть скаляр только если все элементы M то же значение.

Пример: [pi/4 pi/12 pi/16] задает три кольцевых смещения фазы PSK созвездия. Внутренний звонок имеет смещение фазы пи/4, второй звонок имеет смещение фазы пи/12, и внешний звонок имеет смещение фазы пи/16.

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

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

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

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

Отображение символа в виде разделенной запятой пары, состоящей из SymbolMapping и одно из следующего:

  • 'contourwise-gray' — Использование Серое отображение вдоль контура в размерности фазы.

  • 'gray' — Использование Серое отображение вдоль контура и в амплитуде и в размерностях фазы. Для Серого отображения символа, всех значений для M должно быть равным и все значения для phaseoffset должно быть равным. Для описания используемого отображения Грэя см. [2].

  • целочисленный вектор — Использование пользовательское отображение символа. Вектор должен состоять из суммы (M) уникальные элементы со значениями от 0 до (сумма (M)-1). Первый элемент соответствует точке созвездия в первом квадранте самого внутреннего круга с последующими элементами, расположенными против часовой стрелки вокруг звонков PSK.

Отображение символа по умолчанию зависит от M и phaseOffset. Когда все элементы M и phaseOffset равны, значением по умолчанию является 'gray'. Для всех других случаев значением по умолчанию является 'contourwise-gray'.

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

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

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

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

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

Зависимости

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

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

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

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

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

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

Зависимости

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

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

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

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

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

свернуть все

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

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

Больше о

свернуть все

APSK трудная демодуляция

Твердый алгоритм демодуляции применяет амплитудное декодирование фазы как описано в [1].

APSK мягкая демодуляция

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

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

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

Примечание

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

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

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

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

Ссылки

[1] Sebesta, J. “Эффективный метод для Демодуляции APSK”. Выбранные Темы на Прикладной математике, Схемах, Системах и Сигналах (П. Пардэлос, Н. Мэсторакис, В. Младенов, и З. Бойкович, редакторы). Воулиагмени, Афины, Греция: Нажатие WSEAS, 2009.

[2] Лю, Z., Ц. Се, К. Пенг и З. Янг. "Созвездие APSK с Серым Отображением". Коммуникационные Буквы IEEE. Издание 15, Номер 12, декабрь 2011, стр 1271–1273.

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

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

Введенный в R2018a