Problem with LMS Linear Equalization Algorithm

Hello,
I am trying to equalize a pseudorandom binary sequence (PRBS) signal passed through a band limited channel with the LMS algorithm for Linear structure but it doesn´t equalize my signal. I have tried to equalize it with the RLS algorithm and it worked, I don´t know if I am missing something when creating the equalizer object. The code is the following:
% Initialize system parameters
Fs = 5e11; % Sample rate
Rs = 5e9; % Symbol rate (Sps)
sps = Fs/(Rs); % Number of samples per symbol
SNR = 110; % Signal to noise ratio (dB)
Trise = 0.2/(Rs); % Rise time of the NRZ signal
Tfall = 0.2/(Rs); % Fall time of the NRZ signal
frameLen = 500; % Number of symbols in a frame
%% NRZ signal generation
%************************************************************************%
% Set up the pattern generator
src = commsrc.pattern('SamplingFrequency', Fs, ...
'SamplesPerSymbol', sps, ...
'RiseTime', Trise, ...
'FallTime', Tfall) %#ok
% Generate NRZ signal
signal = generate(src, frameLen);
%% Band limited channel generation
%************************************************************************%
fc=2
fs=1000
order=2
w = 0:pi/1000:pi;
wn1= fc/(fs/2); % Relative frequency (0-1 range)
[n1,d1]=butter(order,wn1); % Filter coefficients
freqz(n1,d1,w); % Frequency response
%% RxSignal
%************************************************************************%
rxsignal = filter(n1,d1,signal);
So I am working in a channel attenuation of -27.97 dB.
Now I use a Linear LMS equalizer with the signal as train signal to obtain the coefficients for the taps. With those coefficients I create my own filter to equalize the signal.
%% Linear LMS
%************************************************************************%
x = [-1, 1];
eqlinear_lms_signal = comm.LinearEqualizer('Algorithm','LMS','NumTaps',4,...
'ReferenceTap',2,'StepSize',0.2,...
'Constellation',x);
[signal_eq_lms , err_l_lms_signal, w_l_lms_signal] = eqlinear_lms_signal(rxsignal, signal);
fir = dfilt.dffir(w_l_lms_signal);
rxsignal_eq_llms = filter(fir, rxsignal);
With this code the signal equalized remains like this with some zoom (it is not represented in time domain, in time domain it will be t = 1/Fs:1/Fs:length(signal)/Fs which would be a signal of 10^(-7) seconds):
While equalizing with a Linear RLS equalizer my signal its completely equalized:
%Linear RLS
%************************************************************************%
x = [min(rxsignal), max(rxsignal)];
eqlinear_rls_signal = comm.LinearEqualizer('Algorithm','RLS','NumTaps',4,...
'ReferenceTap',2,'TrainingFlagInputPort',true,'ForgettingFactor',0.99,'Constellation',x);
[signal_eq_rls, err_l_rls_signal, w_l_rls_signal] = eqlinear_rls_signal(rxsignal, signal, true);
eq_lrls_signal = dfilt.dffir(w_l_rls_signal);
rxsignal_eq_lrls = filter(eq_lrls_signal, rxsignal);
I have read that RLS algorithm converges faster than LMS. But I have also tried with larger signals but still LMS algorithm cannot equalize the signal. Does anyone know which can be the problem?

Antworten (0)

Gefragt:

am 14 Mai 2019

Bearbeitet:

am 19 Mai 2019

Community Treasure Hunt

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

Start Hunting!

Translated by