Исследуйте 16-QAM Используя MATLAB

В этом примере показано, как обработать поток двоичных данных при помощи линии связи, которая состоит из основополосного модулятора, канала и демодулятора. Пример отображает фрагмент случайных данных в диаграмме стебель-листья, отображает переданные и полученные сигналы в схемах созвездия и вычисляет частоту ошибок по битам (BER). Чтобы добавить импульсный формирующий фильтр в линию связи, смотрите, что Импульс Использования Формирует на 16-QAM примере Сигнала. Чтобы добавить прямое исправление ошибок в линию связи с импульсной фильтрацией формы, смотрите Использование Прямое Исправление ошибок на 16-QAM примере Сигнала.

Модулируйте случайный сигнал

Схема модуляции использует 16-QAM основную полосу, и сигнал проходит через канал аддитивного белого Гауссова шума (AWGN). Основные операции симуляции используют их функции MATLAB® и Communications Toolbox™.

  • rng — Управляет генерацией случайных чисел.

  • randi — Генерирует случайный поток двоичных данных.

  • bi2de — Преобразует двоичный сигнал в сигнал с целочисленным знаком.

  • qammod — Модулирует 16-QAM использование.

  • comm.AWGNChannel — Повреждает передаваемые данные с помощью AWGN.

  • scatterplot — Создает схемы созвездия.

  • qamdemod — Демодулирует 16-QAM использование.

  • de2bi — Преобразует сигнал с целочисленным знаком в двоичный сигнал.

  • biterr — Вычисляет системный BER.

Сгенерируйте случайный поток двоичных данных

Обычный формат для представления сигнала в MATLAB является вектором или матрицей. randi функция создает вектор-столбец, содержащий значения потока двоичных данных. Длина потока двоичных данных (то есть, количество строк в вектор-столбце) произвольно установлена в 30 000.

Задайте параметры.

M = 16; % Modulation order (alphabet size or number of points in signal constellation)
k = log2(M); % Number of bits per symbol
n = 30000; % Number of bits to process
sps = 1; % Number of samples per symbol (oversampling factor)

Установите rng функционируйте к его состоянию по умолчанию или любому статическому значению seed, так, чтобы пример привел к повторяемым результатам. Затем используйте randi функция, чтобы сгенерировать случайные двоичные данные.

rng default;
dataIn = randi([0 1],n,1); % Generate vector of binary data

Используйте диаграмму стебель-листья, чтобы показать двоичные значения для первых 40 битов случайного потока двоичных данных. Используйте двоеточие (:) оператор в вызове stem функционируйте, чтобы выбрать фрагмент бинарного вектора.

stem(dataIn(1:40),'filled');
title('Random Bits');
xlabel('Bit Index');
ylabel('Binary Value');

Преобразуйте двоичный сигнал в сигнал с целочисленным знаком

Настройка по умолчанию для qammod функция ожидает, что данные с целочисленным знаком как вводимые символы будут модулировать. В этом примере поток двоичных данных предварительно обрабатывается в целочисленные значения перед использованием qammod функция. В частности, bi2de функция преобразует каждого с 4 кортежами в соответствующее целое число в области значений [0, (M–1)]. Порядок модуляции, M, 16 в этом примере.

Выполните отображение бита к символу первым изменением данных в бинарный k- кортежи, где k количество битов на символ, заданный k=log2(M). Затем используйте bi2de функционируйте, чтобы преобразовать каждого с 4 кортежами в целочисленное значение.

dataInMatrix = reshape(dataIn,length(dataIn)/k,k);
dataSymbolsIn = bi2de(dataInMatrix);

Постройте первые 10 символов в диаграмме стебель-листья.

figure; % Create new figure window.
stem(dataSymbolsIn(1:10));
title('Random Symbols');
xlabel('Symbol Index');
ylabel('Integer Value');

Модулируйте Используя 16-QAM

Используйте qammod функция, чтобы применить 16-QAM модуляцию к dataSymbolsIn вектор-столбец для естественно закодированных и серо-закодированных отображений бита к символу.

dataMod = qammod(dataSymbolsIn,M,'bin'); % Binary coding with phase offset of zero
dataModG = qammod(dataSymbolsIn,M); % Gray coding with phase offset of zero

Операция модуляции выходные параметры объединяет вектор-столбцы, содержащие значения, которые являются элементами 16-QAM сигнального созвездия. Позже в этом созвездии в качестве примера схемы показывают естественное и двоичное отображение символа Грэя.

Для получения дополнительной информации о функциях модуляции смотрите Цифровую Модуляцию. Для примера, который использует Грэя, кодирующего с модуляцией манипулирования сдвига фазы (PSK), смотрите Грэя Закодированный 8-PSK.

Добавьте белый Гауссов шум

Модулируемый сигнал проходит через канал при помощи awgn функция с заданным отношением сигнал-шум (SNR). Преобразуйте отношение энергии на бит к шумовой степени спектральная плотность (Eb/N0) к значению ОСШ для использования awgn функция. sps переменная не является значительной в этом примере, но делает расширение примера, чтобы использовать импульс, формирующий легче. Для получения дополнительной информации смотрите, что Импульс Использования Формирует на 16-QAM примере Сигнала.

Вычислите ОСШ, когда канал будет иметь Eb/N0 из 10 дБ.

EbNo = 10;
snr = EbNo+10*log10(k)-10*log10(sps);

Передайте сигнал через канал AWGN для двоичного файла, и Грэй закодировал отображения символа.

receivedSignal = awgn(dataMod,snr,'measured');
receivedSignalG = awgn(dataModG,snr,'measured');

Создайте схему созвездия

Используйте scatterplot функционируйте, чтобы отобразить синфазные компоненты и квадратурные компоненты модулируемого сигнала, dataMod, и сигнал с шумом, полученный после канала. Эффекты AWGN присутствуют в схеме созвездия.

sPlotFig = scatterplot(receivedSignal,1,0,'g.');
hold on
scatterplot(dataMod,1,0,'k*',sPlotFig)

Демодулируйте 16-QAM

Используйте qamdemod функция, чтобы демодулировать полученные данные и вывести символы данных с целочисленным знаком.

dataSymbolsOut = qamdemod(receivedSignal,M,'bin');
dataSymbolsOutG = qamdemod(receivedSignalG,M);

Преобразуйте сигнал с целочисленным знаком в двоичный сигнал

Используйте de2bi функционируйте, чтобы преобразовать символы данных от демодулятора QAM, dataSymbolsOut, в бинарную матрицу, dataOutMatrix, с размерностями NsymNbits/sym. В матрице, Nsym общее количество символов QAM, и Nbits/sym количество битов на символ. Для 16-QAM, Nbits/sym = 4. Затем преобразуйте матрицу в вектор-столбец длины, равной количеству входных битов, 30,000. Повторите процесс для серо-закодированных символов данных, dataSymbolsOutG.

Инвертируйте отображение бита к символу, выполняемое ранее в этом примере.

dataOutMatrix = de2bi(dataSymbolsOut,k);
dataOut = dataOutMatrix(:); % Return data in column vector
dataOutMatrixG = de2bi(dataSymbolsOutG,k);
dataOutG = dataOutMatrixG(:); % Return data in column vector

Вычислите системный BER

biterr функция вычисляет статистику битовой ошибки от исходного потока двоичных данных, dataIn, и полученные потоки данных, dataOut и dataOutG. Серое кодирование значительно уменьшает BER.

Используйте функцию коэффициента ошибок, чтобы вычислить ошибочную статистику. Используйте fprintf функция, чтобы отобразить результаты.

[numErrors,ber] = biterr(dataIn,dataOut);
fprintf('\nThe binary coding bit error rate is %5.2e, based on %d errors.\n', ...
    ber,numErrors)
The binary coding bit error rate is 2.40e-03, based on 72 errors.
[numErrorsG,berG] = biterr(dataIn,dataOutG);
fprintf('\nThe Gray coding bit error rate is %5.2e, based on %d errors.\n', ...
    berG,numErrorsG)
The Gray coding bit error rate is 1.33e-03, based on 40 errors.

Постройте сигнальные созвездия

Схема созвездия, показанная ранее, построила точки в созвездии QAM, но это не указало на отображение между значениями символа и точками созвездия. В этом разделе схема созвездия указывает на отображения для естественного кодирования и серо-кодирования двоичных данных к точкам созвездия.

Покажите естественное и серое закодированное бинарное отображение символа для 16-QAM созвездия

Примените 16-QAM модуляцию к полным наборам точек созвездия при помощи естественно закодированного бинарного отображения символа и серо-закодированного отображения символа.

M = 16; % Modulation order
x = (0:15); % Integer input
symbin = qammod(x,M,'bin'); % 16-QAM output (natural-coded binary)
symgray = qammod(x,M,'gray'); % 16-QAM output (Gray-coded)

Используйте scatterplot функционируйте, чтобы построить схему созвездия и аннотировать ее естественным (красным) и Грэем (черные) бинарные представления точек созвездия.

scatterplot(symgray,1,0,'b*');
for k = 1:M
    text(real(symgray(k)) - 0.0,imag(symgray(k)) + 0.3,...
        dec2base(x(k),2,4));
     text(real(symgray(k)) - 0.5,imag(symgray(k)) + 0.3,...
         num2str(x(k)));
    
    text(real(symbin(k)) - 0.0,imag(symbin(k)) - 0.3,...
        dec2base(x(k),2,4),'Color',[1 0 0]);
    text(real(symbin(k)) - 0.5,imag(symbin(k)) - 0.3,...
        num2str(x(k)),'Color',[1 0 0]);
end
title('16-QAM Symbol Mapping')
axis([-4 4 -4 4])

Исследуйте графики

Используя серо-закодированный символ отображение улучшает производительность BER, потому что серо-закодированные точки сигнального созвездия отличаются только на один бит от каждой смежной соседней точки. Где как с естественным бинарным отображением символа, некоторые смежные точки созвездия. Например, естественно закодированные двоичные значения для 1 (0 0 0 1) и 2 (0 0 1 0) отличайтесь на два бита (третье и дальше биты).

Похожие темы