Channel Equalization with MLSEEqualizer doesn't work with IFFT/FFT blocks.
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(1 个)
Zeyad Qasem
2018-8-23
编辑:Zeyad Qasem
2018-8-23
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
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Propagation and Channel Models 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!