Исследуйте 16-QAM с помощью MATLAB

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

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

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

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

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

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

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

  • comm.AWGNChannel - Ухудшает передаваемые данные с помощью AWGN.

  • scatterplot - Создает сигнальные диаграммы.

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

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

  • biterr - Вычисляет BER системы.

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

Обычный формат представления сигнала в MATLAB является вектором или матрицей. The 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 функция в состоянии по умолчанию или любое статическое начальное значение, так что пример дает повторяемые результаты. Затем используйте 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');

Figure contains an axes. The axes with title Random Bits contains an object of type stem.

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

Значение по умолчанию для строения 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');

Figure contains an axes. The axes with title Random Symbols contains an object of type stem.

Модулируйте с использованием 16-QAM

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

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), см. «Двоичное упорядоченное расположение с серым кодом».

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

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

Вычислите ОСШ, когда канал имеет 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)

Figure Scatter Plot contains an axes. The axes with title Scatter plot contains 2 objects of type line. This object represents Channel 1.

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

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

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

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

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

Противоположное отображение бит/символ, выполненное ранее в этом примере.

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

Вычислительная система BER

The 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])

Figure Scatter Plot contains an axes. The axes with title 16-QAM Symbol Mapping contains 65 objects of type line, text. This object represents Channel 1.

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

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

Похожие темы