Отфильтруйте 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