📄 adapteq.m
字号:
%
% Basic adaptive equalization using LMS and RLS.
%
% By Andreas Jakobsson, 040306.
clear; close all;
% Initialize parameters.
NoTrials = 200; % Number of independent trials.
var_v = 0.001; % Variance of additive noise.
eqOrder = 11; % Equalizer order.
Delta = 7; % Time-delay.
dataLen = 500; % Number of iterations.
W = 2.9; % Channel distortion.
% Generate filter as a raised cosine.
h = 0.5*( 1 + cos(2*pi/W*((1:3)-2)) );
% Evaluate NoTrials independent trials to enable averaging.
Npred = dataLen-eqOrder-1;
el2 = zeros( Npred, NoTrials ); % Squared estimation error (LMS).
er2 = zeros( Npred, NoTrials ); % Squared estimation error (RLS).
ew2 = zeros( Npred, NoTrials ); % Squared estimation error (Wiener).
Wli = zeros( Npred, eqOrder ); % Estimated equalizer (LMS).
Wri = zeros( Npred, eqOrder ); % Estimated equalizer (RLS).
for iter = 1:NoTrials,
% Generate transmitted and received data.
a = 2*(rand(dataLen,1) > 0.5 )-1; % Transmitted signal.
Xi = conv( a, h );
Xi = Xi( length(h)+1:length(Xi) ); % Channel output prior to noise.
v = sqrt(var_v)*randn(length(Xi),1);
Xi = Xi + v; % Received signal (with noise).
Y = a( (Delta+1):dataLen ); % Delayed transmitted signal.
% Compute the adaptive equalizer.
Wl = zeros( eqOrder,1 ); % LMS equalizer.
Wr = zeros( eqOrder,1 ); % RLS equalizer.
for n=1:Npred,
xn = Xi( n:(eqOrder+n-1) ); % Input data vector.
% Wiener.
% --------- Implement the Wiener solution here -------
%
% ----------------------------------------------------
ew2(n,iter) = abs(ew)^2; % Store squared error (Wiener).
% LMS.
% --------- Implement the LMS algorithm here ---------
% Wl = ....
% ----------------------------------------------------
el2(n,iter) = abs(el)^2; % Store squared error (LMS).
% RLS.
% --------- Implement the RLS algorithm here ---------
% Wr = ....
% ----------------------------------------------------
er2(n,iter) = abs(er)^2; % Store squared error (RLS).
end
Wli(iter,:) = Wl'; % Store estimated equalizer (LMS).
Wri(iter,:) = Wr'; % Store estimated equalizer (RLS).
end
% Compute Jmin as the average estimation error of the Wiener filter.
Jmin = mean( mean( ew2,2 ) );
% Display ensamble-averaged square error and averaged equalizer.
figure
stem([ mean(Wli)' mean(Wri)'] )
legend('LMS','RLS')
title('Average adaptive equalizer')
figure
semilogy( [mean(el2,2) mean(er2,2) Jmin*ones(Npred,1) ] )
legend('LMS','RLS','Jmin')
xlabel('Number of iterations')
ylabel('Ensamble-averaged square error')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -