Фильтрация 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);
Постройте график глаз первых 1000 образцов.
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