Channel Equalization with MLSEEqualizer doesn't work with IFFT/FFT blocks.
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (1)
Zeyad Qasem
le 23 Août 2018
Modifié(e) : Zeyad Qasem
le 23 Août 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
Voir également
Catégories
En savoir plus sur Propagation and Channel Models dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!