Формирование импульса Используя повышенный фильтр косинуса

Отфильтруйте 16-QAM сигнал с помощью пары повышенных согласованных фильтров косинуса квадратного корня. Постройте глазковую диаграмму и график рассеивания сигнала. После передачи сигнала через канал AWGN вычислите количество битовых ошибок.

Установите параметры симуляции.

M = 16; % Modulation order
k = log2(M); % Bits/symbol
n = 20000; % Transmitted bits
nSamp = 4; % Samples per symbol
EbNo = 10; % Eb/No (dB)

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

span = 10; % Filter span in symbols
rolloff = 0.25; % Rolloff factor

Создайте повышенную передачу косинуса и получите фильтры с помощью ранее заданных параметров.

txfilter = comm.RaisedCosineTransmitFilter('RolloffFactor',rolloff, ...
    'FilterSpanInSymbols',span,'OutputSamplesPerSymbol',nSamp);

rxfilter = comm.RaisedCosineReceiveFilter('RolloffFactor',rolloff, ...
    'FilterSpanInSymbols',span,'InputSamplesPerSymbol',nSamp, ...
    'DecimationFactor',nSamp);

Постройте импульсную характеристику hTxFilter.

fvtool(txfilter,'impulse')

Вычислите задержку через согласованные фильтры. Групповая задержка является половиной промежутка фильтра через один фильтр и, поэтому, равна промежутку фильтра для обоих фильтров. Умножьтесь количеством битов на символ, чтобы получить задержку битов.

filtDelay = k*span;

Создайте Системный объект счетчика коэффициента ошибок. Установите ReceiveDelay свойство с учетом задержки через согласованные фильтры.

errorRate = comm.ErrorRate('ReceiveDelay',filtDelay);

Сгенерируйте двоичные данные.

x = randi([0 1],n,1);

Модулируйте данные.

modSig = qammod(x,M,'InputType','bit');

Отфильтруйте модулируемый сигнал.

txSig = txfilter(modSig);

Постройте глазковую диаграмму для первых 1 000 выборок.

eyediagram(txSig(1:1000),nSamp)

Вычислите отношение сигнал-шум (SNR) в дБ, данном EbNo. Передайте переданный сигнал через канал AWGN с помощью awgn функция.

SNR = EbNo + 10*log10(k) - 10*log10(nSamp);
noisySig = awgn(txSig,SNR,'measured');

Отфильтруйте сигнал с шумом и отобразите его график рассеивания.

rxSig = rxfilter(noisySig);
scatterplot(rxSig)

Демодулируйте отфильтрованный сигнал и вычислите ошибочную статистику. Задержка через фильтры составляется ReceiveDelay свойство в errorRate .

z = qamdemod(rxSig,M,'OutputType','bit');

errStat = errorRate(x,z);
fprintf('\nBER = %5.2e\nBit Errors = %d\nBits Transmitted = %d\n',...
    errStat)
BER = 1.85e-03
Bit Errors = 37
Bits Transmitted = 19960