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