MLSE equalized multipath channel doesn't work under high SNR values

3 ビュー (過去 30 日間)
Tuncay Eren
Tuncay Eren 2018 年 8 月 24 日
Hello,
I am trying to simulate the BER performance of the following code but come across a problem that the system is not working under awgn noise environment. The signal is given through the multipath channel and then Gaaussian noise is addedd to the channel output. At different SNR values I am getting worse BER results even I tried it at high SNR values.
%%%CODE:1
clear all;
close all;
qpskMod = comm.QPSKModulator(0,'SymbolMapping','Binary');
qpskDemod = comm.QPSKDemodulator(0,'SymbolMapping','Binary');
% Channel coefficients
chCoeffs = [.986; .845; .237; .12345+.31i];
N=512; % Modulated signal length
mleq = comm.MLSEEqualizer('TracebackDepth',10,...
'Channel',chCoeffs, 'Constellation',[1 1i -1 -1i]);
snr=10;
numiteration=10;
for n = 1:numiteration
data= randi([0 3],N,1);
dataIn(:,n)=data;
% Modulate the data and convert it to time domain.
modSignalx = step(qpskMod, data);
modSignal=sqrt(N)*ifft(modSignalx);
% Introduce channel distortion
chanOutputx = filter(chCoeffs,1,modSignal);
%%%Add awgn noise
chanOutput=awgn(chanOutputx,snr,'measured');
% Equalize the channel output and demodulate
eqSignalx = step(mleq, chanOutput);
eqSignal=(1/sqrt(N))*fft(eqSignalx);
demodData = step(qpskDemod, eqSignal);
demodDataOut(:,n)=demodData;
% Compute BER
end
a = biterr(dataIn(:), demodDataOut(:));
b=a/(N*numiteration)
b = 0.410 %%BER result at SNR 10 which is not correct
However, if we consider the awgn channel and ignoring the multipath and equlization blocks in the code
the BER results are as expeccted, for example at SNR 10 it gives 0.0017 error rate.
%%CODE:2
clear all;
close all;
qpskMod = comm.QPSKModulator(0,'SymbolMapping','Binary');
qpskDemod = comm.QPSKDemodulator(0,'SymbolMapping','Binary');
% Channel coefficients
chCoeffs = [.986; .845; .237; .12345+.31i];
N=512; % Modulated signal length
mleq = comm.MLSEEqualizer('TracebackDepth',10,...
'Channel',chCoeffs, 'Constellation',[1 1i -1 -1i]);
% Create an error rate calculator
ber = comm.ErrorRate;
snr=10;
numiteration=10;
for n = 1:numiteration
data= randi([0 3],N,1);
dataIn(:,n)=data;
% Modulate the data and convert it to time domain.
modSignalx = step(qpskMod, data);
modSignal=sqrt(N)*ifft(modSignalx);
% Introduce channel distortion
% chanOutputx = filter(chCoeffs,1,modSignal);
%%%Add awgn noise
chanOutput=awgn(modSignal,snr,'measured');
% Equalize the channel output and demodulate
%eqSignalx = step(mleq, chanOutput);
eqSignal=(1/sqrt(N))*fft(chanOutput);
demodData = step(qpskDemod, eqSignal);
demodDataOut(:,n)=demodData;
% Compute BER
end
a = biterr(dataIn(:), demodDataOut(:));
b=a/(N*numiteration);
b=0.00175
end
I would be happy if you could help me to understand the failure in the first Code above.
Many thanks!!!

回答 (0 件)

カテゴリ

Help Center および File ExchangePropagation and Channel Models についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by