Амплитудно-фазовая демодуляция (APSK)
выполняет APSK демодуляцию входного сигнала z
= apskdemod(y
,M
,radii
)y
, исходя из заданного количества точек созвездия на звонок PSK, M
, и радиус каждого звонка, radii
. Описание демодуляции APSK смотрите в APSK Hard Demodulation и APSK Soft Demodulation.
Примечание
apskdemod специально применяется к нескольким кольцевым созвездиям PSK. Для одиночного звонка PSK созвездия, используйте pskdemod
.
задает начальное смещение фазы для каждого PSK- звонка модулированного сигнала APSK.z
= apskdemod(y
,M
,radii
,phaseoffset
)
задает опции, использующие один или несколько аргументы пары "имя-значение", используя любой из предыдущих синтаксисов. Для примера, 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')
Демодулируйте принятый сигнал и сравните с входными данными.
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);
Демодулируйте принятый сигнал.
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);
y
- модулированный сигнал APSKМодулированный сигнал APSK, заданный как комплексный скаляр, вектор или матрица. Каждый столбец рассматривается как отдельный канал.
Типы данных: double
| single
Поддержка комплексного числа: Да
M
- Точки созвездия на звонок PSKСозвездие точки на звонки PSK, заданные как вектор с более чем одним элементом. Векторы элементы указывают количество точек созвездия в каждом PSK- звонка. Первый элемент соответствует самой внутренней окружности, и так далее, до последнего элемента, который соответствует самой внешней окружности. Значения элемента должны быть кратны четырем и сумма
должно быть степенью двойки. Порядок модуляции является общим числом точек в сигнальном созвездии и равен сумме вектора элементов, (M
)сумма
.(M
)
Пример: [4 12 16]
задает три звонка созвездия PSK с порядком модуляции sum(M)
= 32.
Типы данных: double
radii
- радиусы звонка PSKPSK кольцевые радиусы, заданные как вектор с той же длиной, что и M
. Первый элемент соответствует самой внутренней окружности, и так далее, до последнего элемента, который соответствует самой внешней окружности. Элементы должны быть положительными и располагаться в порядке возрастания.
Пример: [0.5 1 2]
задает созвездие PSK кольцевых радиусов. Внутренний звонок имеет радиус 0,5, второй звонок имеет радиус 1,0, а внешний звонок имеет радиус 2,0.
Типы данных: double
phaseoffset
- смещения фазы звонка PSK[pi/M(1) pi/M(2) … pi/M(end)]
(по умолчанию) | скалярный вектор |Смещение фазы каждого 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'
- Отображение символов'gray'
| 'contourwise-gray'
| целочисленный векторОтображение символов, заданное как разделенная разделенными запятой парами, состоящая из SymbolMapping
и одно из следующих:
'contourwise-gray'
- Использует отображение серого по контуру по размерности фазы.
'gray'
- Использует отображение серого по контуру как по амплитуде, так и по фазе. Для отображения символов серого цвета все значения для M
должны быть равными и все значения для phaseoffset
должно быть равным. Описание используемого отображения серого см. в разделе [2].
целочисленный вектор - Использование пользовательского отображения символов. Вектор должен состоять из суммы
уникальные элементы со значениями от 0 до ((M
)сумма
). Первый элемент соответствует точке созвездия в первом квадранте самой внутренней окружности с последующими элементами, расположенными против часовой стрелки вокруг звонков. (M
)-1
Значение по умолчанию отображения зависит от M
и phaseOffset
. Когда все элементы M
и phaseOffset
равны, значение по умолчанию 'gray'
. Во всех других случаях значение по умолчанию является 'contourwise-gray'
.
Типы данных: double
| char
| string
'OutputType'
- Тип выхода'integer'
(по умолчанию) | 'bit'
| 'llr'
| 'approxllr'
Выходной тип, заданный как разделенная разделенными запятой парами, состоящая из 'OutputType'
и 'integer'
, 'bit'
, 'llr'
, или 'approxllr'
. Описание возвращенных выходов см. в разделе z
.
Типы данных: char
| string
'OutputDataType'
- Тип выходных данных'double'
(по умолчанию) | ...
Выход данных, заданный как разделенная разделенными запятой парами, состоящая из 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'
- Отклонение шума1
(по умолчанию) | положительная скалярная величина | вектор положительных значенийШумовое отклонение, заданная как разделенная запятой пара, состоящая из NoiseVariance
и положительная скалярная величина или вектор положительных значений.
При задании в виде скаляра то же значение отклонения шума используется для всех входных элементов.
При указании в качестве вектора длина вектора должна быть равна количеству столбцов в входном сигнале.
Когда отклонение шума или степень сигнала приводят к расчетам с крайними положительными или отрицательными величинами, см. APSK Soft Demodulation для факторов выбора алгоритма.
Этот аргумент пары "имя-значение" применяется только при OutputType
установлено в 'llr'
или 'approxllr'
.
Типы данных: double
'PlotConstellation'
- Опция для построения созвездияfalse
(по умолчанию) | true
Опция для построения созвездия, заданная как разделенная запятыми пара, состоящая из 'PlotConstellation'
и логический скаляр. Чтобы построить график созвездия, задайте PlotConstellation
на true
.
Типы данных: logical
z
- Демодулированный сигналДемодулированный сигнал, возвращенный в виде скаляра, вектора или матрицы. Размерности z
зависят от заданного OutputType
значение.
OutputType Значение | Возвращаемое значение apskdemod | Размерности z |
---|---|---|
'integer' | Демодулированные целочисленные значения от 0 до (сумма (M ) – 1) | z имеет те же размерности, что и входные y . |
'bit' | Демодулированные биты | Количество строк в z is log2 (сумма (M )) умножить количество строк в y . Каждый демодулированный символ преобразуется в группу log2 (сумма (M ) элементы в столбце, где первый элемент представляет MSB, а последний - LSB. |
'llr' | Значение логарифмического отношения логарифмической правдоподобности для каждого бита | |
'approxllr' | Приблизительное значение логарифмического отношения логарифмической правдоподобности для каждого бита |
Для мягкой демодуляции доступны два алгоритма коэффициента логарифмической правдоподобности (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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.