apskdemod

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

Описание

пример

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

Примечание

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

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

пример

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

Примеры

свернуть все

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

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

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

Задайте векторы для порядка модуляции и радиусов звонка. Сгенерируйте 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 и вычислите мягкие биты.

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

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. Первый элемент соответствует самой внутренней окружности, и так далее, до последнего элемента, который соответствует самой внешней окружности. The phaseoffset может быть скаляром, только если все элементы M являются одинаковыми значениями.

Пример: [pi/4 pi/12 pi/16] задает три смещения фазы звонка PSK созвездия. Внутренний звонок имеет смещение фазы pi/4, второй звонок имеет смещение фазы pi/12, и внешний звонок имеет смещение фазы pi/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). Первый элемент соответствует точке созвездия в первом квадранте самой внутренней окружности с последующими элементами, расположенными против часовой стрелки вокруг звонков.

Значение по умолчанию отображения зависит от 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', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16', или 'uint32'
'bit''double', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16', 'uint32', или 'logical'

Зависимости

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

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

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

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

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

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

Зависимости

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

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

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

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

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

свернуть все

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

OutputType ЗначениеВозвращаемое значение apskdemodРазмерности z
'integer'Демодулированные целочисленные значения от 0 до (сумма (M) – 1)z имеет те же размерности, что и входные y.
'bit'Демодулированные битыКоличество строк в z is 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] Себеста, Дж. «Эффективный метод демодуляции APSK». Избранные темы по прикладной математике, схемам, системам и сигналам (П. Пардалос, Н. Масторакис, В. Младенов, и З. Бойкович, эд.). Вулиагмени, Афины, Греция: WSEAS Press, 2009.

[2] Лю, З., К. Се, К. Пэн и З. Ян. APSK Созвездия с серым Отображением. Буквы IEEE. Том 15, № 12, декабрь 2011, стр. 1271-1273.

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

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

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