Этот пример показывает, как обработать поток двоичных данных с помощью ссылки связи, которая состоит из модулятора основной полосы частот, канала и демодулятора. Пример отображает фрагмент случайных данных в диаграмму лист-ствол, отображает переданные и принятые сигналы в сигналах созвездия и вычисляет вероятность битовой ошибки (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');
Значение по умолчанию для строения qammod
функция ожидает, что целочисленные данные будут модулироваться как входные символы. В этом примере поток двоичных данных предварительно обрабатывается в целочисленные значения перед использованием qammod
функция. В частности, bi2de
функция преобразует каждый 4-кортеж в соответствующее целое число в области значений [0, (M–
1)]. Порядок модуляции, M
, является 16 в этом примере.
Выполните отображение бит в символ, сначала перестроив данные в двоичные k
-кортежи, где k
- количество бит на символ, определяемое как . Затем используйте 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');
Используйте 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
функция с заданным отношением сигнал/шум (ОСШ). Преобразуйте отношение энергии на бит к спектральной плотности степени шума () к значению ОСШ для использования awgn
функция. The sps
переменная не является значительной в этом примере, но делает расширение примера, чтобы использовать импульсное формирование легче. Для получения дополнительной информации смотрите пример Использования Формирования Импульса на 16-QAM Signal.
Вычислите ОСШ, когда канал имеет 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)
Используйте qamdemod
функция для демодуляции принятых данных и вывода целочисленных символов данных.
dataSymbolsOut = qamdemod(receivedSignal,M,'bin');
dataSymbolsOutG = qamdemod(receivedSignalG,M);
Используйте de2bi
функция для преобразования символов данных из демодулятора QAM, dataSymbolsOut
, в двоичную матрицу, dataOutMatrix
, с размерностями около. В матрице, - общее количество символов QAM, и - количество бит на символ. Для 16-QAM, = 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
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 модуляцию к полным наборам точек созвездия с помощью природно-кодированного двоичного отображения символов и Грея-кодированного отображения символов.
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
) отличаются двумя битами (третий и четвертый биты).