Используйте формирование импульса на 16-QAM сигнале

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

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

Установите среду симуляции

Задайте параметры симуляции для 16-QAM схемы модуляции с повышенной фильтрацией косинуса и канал AWGN.

M = 16; % Modulation order
k = log2(M); % Number of bits per symbol
numBits = 3e5; % Number of bits to process
sps = 4; % Number of samples per symbol (oversampling factor)

Создайте фильтр RRC

Установите параметры фильтра RRC.

filtlen = 10; % Filter length in symbols
rolloff = 0.25; % Filter rolloff factor

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

rrcFilter = rcosdesign(rolloff,filtlen,sps);

Используйте FVTool, чтобы отобразить импульсную характеристику фильтра RRC.

fvtool(rrcFilter,'Analysis','Impulse')

Figure Filter Visualization Tool - Impulse Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Impulse Response contains an object of type stem.

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

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

rng default; % Use default random number generator
dataIn = randi([0 1],numBits,1); % Generate vector of binary data

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

dataInMatrix = reshape(dataIn,length(dataIn)/k,k); % Reshape data into binary 4-tuples
dataSymbolsIn = bi2de(dataInMatrix); % Convert to integers

Примените 16-QAM модуляцию с помощью qammod функция.

dataMod = qammod(dataSymbolsIn,M);

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

txFiltSignal = upfirdn(dataMod,rrcFilter,sps,1);

Используя количество битов на символ (k) и количество выборок на символ (sps), преобразуйте отношение энергии на бит к шумовой степени спектральная плотность (EbNo) к значению ОСШ для использования awgn функция.

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

Передайте пропущенный сигнал через канал AWGN.

rxSignal = awgn(txFiltSignal,snr,'measured');

Используйте upfirdn функция на полученном сигнале проредить и отфильтровать сигнал. Downsample при помощи того же фактора сверхдискретизации запросил повышающую дискретизацию переданного сигнала. Фильтр при помощи того же фильтра RRC применился к переданному сигналу.

Каждая операция фильтрации задерживает сигнал половиной длины фильтра в символах, filtlen/2. Так, общая задержка от передачи и получает фильтрацию, равняется длине фильтра, filtlen. Для расчета BER должны быть одного размера переданные и полученные сигналы, и необходимо объяснить задержку между переданным и полученным сигналом. Удалите первый filtlen символы в подкошенном сигнале с учетом совокупной задержки передачи и получают операции фильтрации. Удалите последний filtlen символы в подкошенном сигнале гарантировать количество выборок в демодуляторе выход совпадают с количеством выборок во входе модулятора.

rxFiltSignal = upfirdn(rxSignal,rrcFilter,1,sps); % Downsample and filter
rxFiltSignal = rxFiltSignal(filtlen + 1:end - filtlen); % Account for delay

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

dataSymbolsOut = qamdemod(rxFiltSignal,M);

Преобразуйте восстановленные целочисленные символы в двоичные данные при помощи de2bi функция.

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

Определите количество ошибок и связанного BER при помощи biterr функция.

[numErrors,ber] = biterr(dataIn,dataOut);
fprintf('\nFor an EbNo setting of %3.1f dB, the bit error rate is %5.2e, based on %d errors.\n', ...
    EbNo,ber,numErrors)
For an EbNo setting of 10.0 dB, the bit error rate is 1.83e-03, based on 550 errors.

Визуализируйте эффекты фильтра

Чтобы визуализировать эффекты фильтра в глазковой диаграмме, уменьшайте Eb/N0 установка и регенерирует полученные данные. Визуализирование высокого ОСШ сигнализирует без других многопутевых эффектов, можно использовать глазковые диаграммы, чтобы подсветить интерференцию межсимвола (ISI) сокращение при выходе для пары импульса, формирующего фильтры RRC. Фильтр RRC не имеет нулевого ISI, пока это не соединяется со вторым фильтром RRC, чтобы сформировать в каскаде фильтр приподнятого косинуса.

EbNo = 20;
snr = EbNo + 10*log10(k) - 10*log10(sps);
rxSignal = awgn(txFiltSignal,snr,'measured');
rxFiltSignal = upfirdn(rxSignal,rrcFilter,1,sps); % Downsample and filter
rxFiltSignal = rxFiltSignal(filtlen + 1:end - filtlen); % Account for delay

Создайте глазковую диаграмму для фрагмента отфильтрованного бесшумного сигнала визуализировать эффект импульсного формирования. Переданный сигнал имеет фильтрацию RRC и показывает ISI сужением открытия глаза.

eyediagram(txFiltSignal(1:2000),sps*2);

Figure Eye Diagram contains 2 axes. Axes 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.

При отображении глазковой диаграммы для сигнала после того, как шум канала показывает сигнал с фильтрацией RRC и шумом. Уровень шума вызывает дальнейшее сужение открытия глаза глазковой диаграммы.

eyediagram(rxSignal(1:2000),sps*2);

Figure Eye Diagram contains 2 axes. Axes 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.

При отображении глазковой диаграммы для сигнала после того, как применяется получить фильтрация, показывает сигнал с повышенной фильтрацией косинуса. Более широкие открытия глаза глазковой диаграммы, сигнал имеет меньше ISI с повышенной фильтрацией косинуса по сравнению с сигналом с фильтрацией RRC.

eyediagram(rxFiltSignal(1:2000),2);

Figure Eye Diagram contains 2 axes. Axes 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.

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

scatplot = scatterplot(sqrt(sps)*...
    rxSignal(1:sps*5e3),...
    sps,0);
hold on;
scatterplot(rxFiltSignal(1:5e3),1,0,'bx',scatplot);
title('Received Signal, Before and After Filtering');
legend('Before Filtering','After Filtering');
axis([-5 5 -5 5]); % Set axis ranges
hold off;

Figure Scatter Plot contains an axes. The axes with title Received Signal, Before and After Filtering contains 2 objects of type line. These objects represent Before Filtering, After Filtering.

Похожие темы