Channel Equalization with MLSEEqualizer doesn't work with IFFT/FFT blocks.

2 views (last 30 days)
Hello
I am trying to understand the performance of the Maximum Likelihood Sequence Estimation Equalizer (MLSEE) by using the MLSEEqualizer MATLAB object as simulated in the following example from Mathworks.
The MLSEEqualizer works fine in the example and equalize the QPSK modulated signal which is transmitted throught the multipath channel.
% Original Code: % Equalize a QPSK signal transmitted through a dispersive channel % using MLSE
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;
for n = 1:10
data= randi([0 3],N,1);
modSignal = qpskMod(data);
% Introduce channel distortion.
chanOutput = filter(chCoeffs,1,modSignal);
% Equalize the channel output and demodulate
eqSignal = mleq(chanOutput);
demodData = qpskDemod(eqSignal);
% Compute BER
a = ber(data, demodData);
b=a(1)
end
But I have a problem in the following example. By using the same example; I have modified the signal before the transmission as follows: The QPSK modulated signal (modSignal) is first transformed into time domain representation by applying N-point IFFT and then it is given into the channel. At the receiver side, the same equalization (MLSEEqualizer )is applied on the received time domain signal and then it is converted into the frequency domain.
The problem in the code is that after demodulating the signal the BER performance is getting worse and unable to get the same BER results as in the original code.
It seems that there is a problem in the code when applying IFFT(at Tx) and FFT (at Rx), others are the same as in the original code.
% Modified Code: % Equalize a QPSK signal transmitted through a dispersive channel % using MLSE
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;
for n = 1:10
data= randi([0 3],N,1);
% Modulate the data and convert it to time domain.
modSignalx = qpskMod(data);
modSignal=sqrt(N)*ifft(modSignalx);
% Introduce channel distortion
chanOutput = filter(chCoeffs,1,modSignal);
% Equalize the channel output and demodulate
eqSignalx = mleq(chanOutput);
eqSignal=(1/sqrt(N))*fft(eqSignalx);
demodData = qpskDemod(eqSignal);
% Compute BER
a = ber(data, demodData);
b(n)=a(1)
end
Could you please help me understanding where the problem is in the modified code?

Answers (1)

Zeyad Qasem
Zeyad Qasem on 23 Aug 2018
Edited: Zeyad Qasem on 23 Aug 2018
Hello .. Now is OK :
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;
for n = 1:10
data= randi([0 3],N,1);
% Modulate the data and convert it to time domain.
modSignalx = step(qpskMod, data);
modSignal=sqrt(N)*ifft(modSignalx);
% Introduce channel distortion
chanOutput = filter(chCoeffs,1,modSignal);
% Equalize the channel output and demodulate
eqSignalx = step(mleq, chanOutput);
eqSignal=(1/sqrt(N))*fft(eqSignalx);
demodData = step(qpskDemod, eqSignal);
% Compute BER
a = biterr(data(n), demodData(n));
b(n)=a(1);
end
enjoy
  1 Comment
Tuncay Eren
Tuncay Eren on 23 Aug 2018
Thank you so much Zeyad. It works now and I can see the perfect BER results after the channel equalization. But there is another problem here, when I add an awgn noise with different SNR values to the signal after the channel the BER results are always zero regardless the of the SNR value. Perhabs there is a problem with the usage of awgn function in the code but I couldn't find where it is. I would be happy if you could look into the SNR issue in the code below.
Many thanks again!
% Modified Code: IFFT and FFT blocks are used but the system shows worse BER results.
% Equalize a QPSK signal transmitted through a dispersive channel using MLSE
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=0;
for n = 1:10
data= randi([0 3],N,1);
% 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);
% Compute BER
a = biterr(data(n), demodData(n));
b(n)=a(1);
end

Sign in to comment.

Categories

Find more on Propagation and Channel Models in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!