exponenta event banner

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

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

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

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) к значению SNR для использования awgn функция.

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

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

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

Используйте upfirdn функция на принятом сигнале для понижения дискретизации и фильтрации сигнала. Понижение дискретизации с использованием того же коэффициента избыточной дискретизации, который применяется для повышения дискретизации передаваемого сигнала. Фильтрация с использованием того же фильтра 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 и восстановите полученные данные. Визуализируя сигнал с высоким SNR без других эффектов многолучевого распространения, можно использовать диаграммы глаз для выделения уменьшения межсимвольных помех (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.

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