You are on page 1of 2

% filter coefficients h=0.5.

^[0:4]’;

% generate input signal u=randn(1000,1);

% generate desired signal by filtering d=conv(h,u);

RLS [xi,w]=rls(1,5,u,d,0.005);

function [xi,w]=rls(lambda,M,u,d,delta) % Recursive Least Squares % Call: %


[xi,w]=rls(lambda,M,u,d,delta);

% % Input arguments:

% lambda = forgetting factor, dim 1x1 % M = filter length, dim 1x1 % u = input signal, dim Nx1 % d =
desired signal, dim Nx1 % delta = initial value, P(0)=delta^-1*I, dim 1x1 % % Output arguments: % xi = a
priori estimation error, dim Nx1 % w = final filter coefficients, dim Mx1 % inital values w=zeros(M,1);

P=eye(M)/delta;

u=u(:); d=d(:); % input signal length

N=length(u);

error vector xi=d;

% Loop, RLS

for n=M:N

uvec=u(n:-1:n-M+1);

k=lambda^(-1)*P*uvec/(1+lambda^(-1)*uvec’*P*uvec);

xi(n)=d(n)-w’*uvec; w=w+k*conj(xi(n));

P=lambda^(-1)*P-lambda^(-1)*k*uvec’*P;

end

------------------------------------------------------------
Weiner Filter

function [Jmin,R,p,wo]=wiener(W,sigmav2);

[Jmin,R,p,wo]=wiener(W,sigmav2);

h1=1/2*(1+cos(2*pi/W*(1-2)));

h2=1/2*(1+cos(2*pi/W*(2-2)));

h3=1/2*(1+cos(2*pi/W*(3-2)));

%variance of driving noise

sigmax2=1;

%theoretical autocorrelation matrix R 11x11

R=sigmax2*toeplitz([h1^2+h2^2+h3^2,h1*h2+h2*h3,h1*h3,zeros(1,8)])+sigmav2*eye(11);

%theoretical cross-correlation vector p 11x1

p=sigmax2*[zeros(4,1);h3;h2;h1;zeros(4,1)];

%Wiener filter

wo=R\p;

%Jmin

Jmin=sigmax2-p’*wo;

You might also like