Общая квадратурная амплитудная модуляция (QAM)
Передайте и получите данные с помощью непрямоугольного 16-ary созвездия в присутствии Гауссова шума. Покажите график рассеивания шумного созвездия и оцените коэффициент ошибок символа (SER) для двух различных отношений сигнал-шум.
Создайте 16-QAM созвездие на основе стандарта V.29 для модемов телефонной линии.
c = [-5 -5i 5 5i -3 -3-3i -3i 3-3i 3 3+3i 3i -3+3i -1 -1i 1 1i]; M = length(c);
Сгенерируйте случайные символы.
data = randi([0 M-1],2000,1);
Модулируйте данные при помощи genqammod
функция. Общая модуляция QAM необходима, потому что пользовательское созвездие не является прямоугольным.
modData = genqammod(data,c);
Передайте сигнал через канал AWGN, имеющий отношение сигнал-шум (SNR) на 20 дБ.
rxSig = awgn(modData,20,'measured');
Отобразите график рассеивания полученного сигнала и ссылочного созвездия, c
.
h = scatterplot(rxSig); hold on scatterplot(c,[],[],'r*',h) grid hold off
Демодулируйте полученный сигнал при помощи genqamdemod
функция. Определите количество ошибок символа и ошибочного отношения символа.
demodData = genqamdemod(rxSig,c); [numErrors,ser] = symerr(data,demodData)
numErrors = 1
ser = 5.0000e-04
Повторите передачу и процесс демодуляции с каналом AWGN, имеющим ОСШ на 10 дБ. Определите коэффициент ошибок символа для уменьшаемого ОСШ. Как ожидалось эффективность ухудшается, когда ОСШ уменьшен.
rxSig = awgn(modData,10,'measured');
demodData = genqamdemod(rxSig,c);
[numErrors,ser] = symerr(data,demodData)
numErrors = 462
ser = 0.2310
Создайте точки, которые описывают шестиугольное созвездие.
inphase = [1/2 1 1 1/2 1/2 2 2 5/2]; quadr = [0 1 -1 2 -2 1 -1 0]; inphase = [inphase;-inphase]; inphase = inphase(:); quadr = [quadr;quadr]; quadr = quadr(:); const = inphase + 1i*quadr;
Постройте созвездие.
h = scatterplot(const);
Сгенерируйте символы входных данных. Модулируйте символы с помощью этого созвездия.
x = [3 8 5 10 7]; y = genqammod(x,const);
Демодулируйте модулируемый сигнал, y
.
z = genqamdemod(y,const);
Постройте модулируемый сигнал на том же рисунке.
hold on; scatterplot(y,1,0,'ro',h); legend('Constellation','Modulated signal');
Определите количество ошибок символа между демодулируемыми данными к исходной последовательности.
numErrs = symerr(x,z)
numErrs = 0
x
— Сигнал сообщенияСигнал сообщения в виде скаляра, вектора, матрицы или трехмерного массива числовых значений. Сигнал сообщения должен состоять из целых чисел от 0 и length
(const
) –1. Если x
матрица с несколькими строками, функциональные процессы столбцы независимо.
Типы данных: double |
single
| fi
| int8
| int16
| uint8
| uint16
const
— Отображение сигналаОтображение сигнала в виде комплексного вектора.
Типы данных: double |
single
| fi
| int8
| int16
| uint8
| uint16
Поддержка комплексного числа: Да
y
— Комплексный конвертКомплексный конверт, возвращенный как скаляр, вектор, матрица или трехмерный массив числовых значений. Длина y
совпадает с длиной входа x
.
Типы данных: double |
single
| fi
| int8
| int16
| uint8
| uint16
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.