Используйте формирование импульса на 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')

Вычислите системный 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);

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

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

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

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

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

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

Похожие темы