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?
回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Pulse and Transition Metrics についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!