Channel Equalization with MLSEEqualizer doesn't work with IFFT/FFT blocks.
조회 수: 3 (최근 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!