Channel Equalization with MLSEEqualizer doesn't work with IFFT/FFT blocks.
2 views (last 30 days)
Show older comments
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?
0 Comments
Answers (1)
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
See Also
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!