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