Пропустите сигнал 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)
Вычислите отношение сигнал/шум (ОСШ) в дБ по данным 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