apskdemod

Демодуляция амплитудного манипулирования сдвига фазы (APSK)

Синтаксис

z = apskdemod(y,M,radii)
z = apskdemod(y,M,radii,phaseoffset)
z = apskdemod(___,Name,Value)

Описание

пример

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

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

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

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

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. Первый элемент соответствует самому внутреннему кругу, и так далее, до последнего элемента, который соответствует наиболее удаленному кругу. Значения элемента должны быть множителями четыре, и sum(M) должен быть степенью двойки. Порядок модуляции является общим количеством точек в сигнальном созвездии и равняется сумме векторных элементов, sum(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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

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

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

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

  • целочисленный вектор — Использование пользовательское отображение символа. Вектор должен состоять из sum(M) уникальные элементы со значениями от 0 до (sum(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', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16' или 'uint32'
'bit''double', 'single', 'int8', 'int16', 'int32', 'uint8', 'uint16', 'uint32' или '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