📄 eflrls3.m
字号:
%EFLRLS3 Problem 2.2
%
% 'ifile.mat' - input file containing:
% K - iterations
% H - FIR channel
% Neq - equalizer order
% sigman - standard deviation of noise at channel output
% epsilon - small auxiliary constant
% lambda - forgetting factor
%
% 'ofile.mat' - output file containing:
% ind - sample indexes
% kappabeq, kappafeq, Veq - equalizer coefficients
clear all % clear memory
load ifile; % read input variables
LH=length(H); % channel length
NH=LH-1; % channel order
Leq=Neq+1; % equalizer length
ND=round((Neq+NH)/2); % delayer order
LD=ND+1; % delayer length (>LH by hipothesis)
D=zeros(LD,1); % initial delayer memory
t=sign(randn(K,1)); % training signal
n=randn(K,1)*sigman; % noise at channel output
%
% initial parameters
kappabeq=zeros(Leq,1);
kappafeq=zeros(Leq,1);
Veq=zeros(Leq,1);
delta=zeros(1,Leq);
oldgamma=ones(1,Leq+1);
oldeb=zeros(1,Leq);
oldoldxibmin=epsilon*ones(1,Leq);
oldxibmin=epsilon*ones(1,Leq);
oldxifmin=epsilon*ones(1,Leq);
for k=1:K, % iterations
D=[t(k)
D(1:ND)]; % new delay vector
d=D(LD); % desired signal sample
x=H'*D(1:LH)+n(k); % input sample
%
% initialization
gamma(1)=1;
eb(1)=x;
ebq(1)=eb(1);
ef=x;
xibmin(1)=x^2+lambda*oldxifmin(1);
xifmin(1)=xibmin(1);
e=d;
ep=e;
for j=1:Leq,
%
% auxiliary parameters
delta(j)=lambda*delta(j)+oldeb(j)*ef/oldgamma(j);
gamma(j+1)=gamma(j)-(eb(j))^2/xibmin(j);
aux=oldeb(j)*ef/oldgamma(j)/lambda;
%
% reflection coefficients
kappabeq(j)=gamma(j+1)/oldgamma(j)*(kappabeq(j)+aux/oldxifmin(j));
kappafeq(j)=oldgamma(j+1)/oldgamma(j)*(kappafeq(j)+aux/oldoldxibmin(j));
%
% prediction errors
eb(j+1)=oldeb(j)-kappabeq(j)*ef;
ebp(j+1)=eb(j+1)/gamma(j+1);
ef=ef-kappafeq(j)*oldeb(j);
%
% minimum least-squares solutions
aux=(delta(j))^2;
xibmin(j+1)=oldxibmin(j)-aux/xifmin(j);
xifmin(j+1)=xifmin(j)-aux/oldxibmin(j);
%
% feedforward filtering
ep=ep-Veq(j)*ebp(j);
Veq(j)=gamma(j+1)/gamma(j)*(Veq(j)+e*eb(j)/(gamma(j)*lambda*oldxibmin(j)));
e=e-Veq(j)*eb(j);
end
%
% updated parameters
olddgamma=gamma;
oldeb=eb;
oldoldxibmin=oldxibmin;
oldxibmin=xibmin;
oldxifmin=xifmin;
end
ind=0:Neq; % sample indexes
save ofile ind kappabeq kappafeq Veq; % write output variables
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -