Квадратурная амплитудная модуляция (QAM)
задает опции, использующие аргументы пары "имя-значение" в дополнение к любой комбинации входных аргументов из предыдущих синтаксисов.y
= qammod(___,Name,Value
)
Модулируйте данные с помощью QAM и отобразите результат на графике поля точек.
Установите порядок модуляции 16 и создайте вектор данных, содержащий каждый из возможных символов.
M = 16; x = (0:M-1)';
Модулируйте данные с помощью qammod
функция.
y = qammod(x,M);
Отобразите модулированное сигнальное созвездие с помощью scatterplot
функция.
scatterplot(y)
Установите порядок модуляции 256 и отобразите график поля точек модулированного сигнала.
M = 256; x = (0:M-1)'; y = qammod(x,M); scatterplot(y)
Модулируйте символы случайных данных, используя QAM. Нормализуйте выход модулятора так, чтобы он имел среднюю степень сигнала 1 Вт.
Установите порядок модуляции и сгенерируйте случайные данные.
M = 64; x = randi([0 M-1],1000,1);
Модулируйте данные. Используйте 'UnitAveragePower'
Пара "имя-значение", чтобы задать среднюю степень сигнала выхода 1 Вт.
y = qammod(x,M,'UnitAveragePower',true);
Подтвердите, что сигнал имеет среднюю степень модуля.
avgPower = mean(abs(y).^2)
avgPower = 1.0070
Постройте график получившегося созвездия.
scatterplot(y)
title('64-QAM, Average Power = 1 W')
Постройте графики созвездий QAM для Серых, двоичных и пользовательских отображений символов.
Установите порядок модуляции и создайте последовательность данных, которая включает полный набор символов для схемы модуляции.
M = 16; d = [0:M-1];
Модулируйте данные и постройте их созвездие. Для отображения символов по умолчанию используется упорядоченное расположение «Серый». Упорядоченное расположение точек не является последовательной.
y = qammod(d,M,'PlotConstellation',true);
Повторите процесс модуляции с двоичным отображением символов. Отображение символов выполняется в натуральном двоичном порядке и является последовательным.
z = qammod(d,M,'bin','PlotConstellation',true);
Создайте пользовательское отображение символов.
smap = randperm(M)-1;
Модулируйте и постройте график созвездия.
w = qammod(d,M,smap,'PlotConstellation',true);
Модулируйте последовательность бит с помощью 64-QAM. Пропустите сигнал через шумный канал. Отобразите результирующую сигнальное созвездие.
Установите порядок модуляции и определите количество бит на символ.
M = 64; k = log2(M);
Создайте двоичную последовательность данных. При использовании двоичных входов количество строк в вход должно быть целым числом, кратным количеству бит на символ.
data = randi([0 1],1000*k,1);
Модулируйте сигнал с помощью битовых входов и установите его на среднюю степень модуля.
txSig = qammod(data,M,'InputType','bit','UnitAveragePower',true);
Пропустите сигнал через шумный канал.
rxSig = awgn(txSig,25);
Постройте график созвездия.
cd = comm.ConstellationDiagram('ShowReferenceConstellation',false);
cd(rxSig)
Демодулируйте сигнал QAM с фиксированной точкой и проверьте, что данные восстановлены правильно.
Установите порядок модуляции следующим 64
, и определить количество бит на символ.
M = 64; bitsPerSym = log2(M);
Сгенерируйте случайные биты. При работе в битовом режиме длина входных данных должна быть целым числом, кратным количеству бит на символ.
x = randi([0 1],10*bitsPerSym,1);
Модулируйте входные данные с помощью двоичного отображения символов. Установите модулятор, чтобы вывести данные с фиксированной точкой. Тип числовых данных подписан 16-битным размером слова и 10-битной длиной дроби.
y = qammod(x,M,'bin','InputType','bit','OutputDataType', ... numerictype(1,16,10));
Демодулируйте сигнал 64-QAM. Проверьте, что демодулированные данные соответствуют входным данным.
z = qamdemod(y,M,'bin','OutputType','bit'); s = isequal(x,double(z))
s = logical
1
x
- Входной сигналВходной сигнал, заданный как скаляр, вектор, матрица или трехмерный массив. Элементами x должны быть двоичные значения или целые числа, которые варьируются от 0 до (M
- 1), где M
- порядок модуляции.
Примечание
Чтобы обработать входной сигнал как двоичные элементы, установите 'InputType
'пара "имя-значение" в 'bit'
. Для двоичных входов количество строк должно быть целым числом, кратным log2 (M
). Группы log2 (M
) биты отображаются на символ, причем первый бит представляет MSB и последний бит представляет LSB.
Типы данных: double
| single
| fi
| int8
| int16
| uint8
| uint16
M
- Порядок модуляцииПорядок модуляции, заданный как скалярная целая степень двойки. Порядок модуляции задает число точек в сигнальном созвездии.
Пример: 16
Типы данных: double
symOrder
- Порядок символов'gray'
(по умолчанию) | 'bin'
| векторПорядок символа, заданный как 'gray'
, 'bin'
, или вектор.
'gray'
- Использование упорядоченного расположения по серому коду
'bin'
- Используйте естественный двоичный код упорядоченного расположения
Вектор - Использование пользовательского упорядоченного расположения символов
Векторы должны использовать уникальные элементы, значения которых варьируются от 0 до M
– 1. Первый элемент соответствует верхней левой точке созвездия, с последующими элементами, идущими вниз по столбцу слева направо.
Пример: [0 3 1 2]
Типы данных: char
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
y = qammod(x,M,symOrder,'InputType','bit')
'InputType'
- Входной тип'integer'
(по умолчанию) | 'bit'
Входной тип, заданный как разделенная разделенными запятой парами, состоящая из 'InputType'
и любой из них 'integer'
или 'bit'
. Если вы задаете 'integer'
входной сигнал должен состоять из целых чисел от 0 до M
– 1. Если вы задаете 'bit'
входной сигнал должен содержать двоичные значения, а количество строк должно быть целым числом, кратным log2 (M
).
Типы данных: char
'UnitAveragePower'
- Флаг средней степени модуляfalse
или 0
(по умолчанию) | true
или 1
Среднее значение степени модуля, заданный как разделенная разделенными запятой парами, состоящая из 'UnitAveragePower'
и числовое или логическое 0
(false
) или 1
(true
). Когда этот флаг 1
(true
), функция масштабирует созвездие до средней степени в один ватт, привязанной к 1 Ом. Когда этот флаг 0
(false
), функция масштабирует созвездие так, чтобы точки созвездия QAM были разделены минимальным расстоянием в два.
'OutputDataType'
- Тип выходных данныхnumerictype
объектВыход данных, заданный как разделенная разделенными запятой парами, состоящая из 'OutputDataType'
и a numerictype
объект.
Для получения дополнительной информации о построении этих объектов см. numerictype
(Fixed-Point Designer). Если вы не задаете 'OutputDataType'
, тип данных double
если вход имеет тип данных double
или встроенное целое число и single
если вход имеет тип данных single
.
'PlotConstellation'
- Опция для построения созвездияfalse
или 0
(по умолчанию) | true
или 1
Опция для построения созвездия, заданная как разделенная запятыми пара, состоящая из 'PlotConstellation'
и числовое или логическое 0
(false
) или 1
(true
) Чтобы построить график созвездия QAM, задайте 'PlotConstellation'
на true
.
y
- Модулированный сигналМодулированный сигнал, возвращенный как комплексный скаляр, вектор, матрица или трехмерный массив числовых значений. Для целочисленных входов выводите y
имеет те же размерности, что и входной сигнал x
. Для битовых входов количество строк в y
количество строк в x
разделенный на лог2 (M
).
Типы данных: double
| single
Gray code, также известная как отраженный двоичный код, является системой, в которой битовые шаблоны в смежных точках созвездия различаются только на один бит.
Ошибки, начинающиеся в R2018b
Начиная с R2018b, вы больше не можете смещать начальную фазу для созвездия QAM, используя qammod
функция.
Вместо этого используйте genqammod
чтобы сместить начальную фазу модулируемых данных, или можно умножить qammod
выход требуемой начальной фазы:
y = qammod(x,M) .* exp(1i*initPhase)
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.