exponenta event banner

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-арные символы данных.

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. Генерировать 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);

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

свернуть все

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

Типы данных: 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. Внутреннее кольцо имеет фазовый сдвиг 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].

  • целочисленный вектор - использование пользовательского сопоставления символов. Вектор должен состоять из 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.

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

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

свернуть все

Демодулированный сигнал, возвращаемый как скаляр, вектор или матрица. Размеры 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». Избранные темы по прикладной математике, схемам, системам и сигналам (П. Пардалос, Н. Масторакис, В. Младенов, и З. Бойкович, ред.). Vouliagmeni, Афины, Греция: WSEAS Press, 2009.

[2] Лю, З., К. Се, К. Пэн и З. Ян. «APSK Constellation с серым отображением». Информационные письма IEEE. Том 15, номер 12, декабрь 2011 г., стр. 1271-1273.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2018a