exponenta event banner

Проверка 16-QAM с помощью MATLAB

В этом примере показано, как обрабатывать двоичный поток данных с использованием линии связи, которая состоит из модулятора основной полосы частот, канала и демодулятора. Пример отображает часть случайных данных на графике основы, отображает переданные и принятые сигналы на диаграммах созвездий и вычисляет частоту битовых ошибок (BER). Чтобы добавить фильтр формирования импульсов в канал связи, см. пример использования формирования импульсов в 16-QAM Signal. Чтобы добавить прямую коррекцию ошибок в канал связи с фильтрацией формы импульсов, см. пример использования прямой коррекции ошибок в 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 является вектор или матрица. randi создает вектор столбца, содержащий значения двоичного потока данных. Длина двоичного потока данных (то есть количество строк в векторе столбца) произвольно устанавливается равной 30000.

Определите параметры.

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 вектор столбца для преобразования двоичных битов в символы с естественным кодированием и с кодированием Греем.

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 функция с заданным отношением сигнал/шум (SNR). Преобразование отношения энергии на бит к спектральной плотности мощности шума (Eb/N0) в значение SNR для использования awgn функция. sps переменная не является значимой в этом примере, но облегчает расширение примера для использования формирования импульсов. Дополнительные сведения см. в примере «Использование формирования импульсов для 16-QAM сигнала».

Вычислите SNR, если 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 функция преобразования символов данных из демодулятора КАМ, dataSymbolsOut, в двоичную матрицу, dataOutMatrix, с размерами Nsym-by-Nbits/sym. В матрице Nsym - общее количество символов QAM, а Nbits/sym - количество битов на символ. Для 16-QAM Nbits/sym = 4. Затем преобразуйте матрицу в вектор столбца длиной, равной числу входных битов, 30000. Повторите процесс для символов данных, кодированных серым цветом, 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.

Группировка сигналов графика

Показанная диаграмма созвездия ранее отображала точки в созвездии КАМ, но она не указывала отображение между значениями символов и точками созвездия. В этом разделе диаграмма созвездия показывает отображения для естественного кодирования и серого кодирования двоичных данных в точки созвездия.

Показать отображение натуральных и серых двоичных символов для 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) отличаются на два бита (третий и четвертый биты).

Связанные темы