📄 direct_rls.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% RLS Algorithm;
r=wavread('C:\MATLAB\work\Write_In_Paper\Shi_Yan.wav');
r=r(1:2000);
N=length(r);
Hn =[0.8783 -0.5806 0.6537 -0.3223 0.6577 -0.0582 0.2895 -0.2710 0.1278 -0.1508 0.0238 -0.1814 0.2519 -0.0396 0.0423 -0.0152 0.1664 -0.0245 0.1463 -0.0770 0.1304 -0.0148 0.0054 -0.0381 0.0374 -0.0329 0.0313 -0.0253 0.0552 -0.0369 0.0479 -0.0073 0.0305 -0.0138 0.0152 -0.0012 0.0154 -0.0092 0.0177 -0.0161 0.0070 -0.0042 0.0051 -0.0131 0.0059 -0.0041 0.0077 -0.0034 0.0074 -0.0014 0.0025 -0.0056 0.0028 -0.0005 0.0033 -0.0000 0.0022 -0.0032 0.0012 -0.0020 0.0017 -0.0022 0.0004 -0.0011 0 0 ];
Hn=Hn(1:64);
output=conv(r,Hn);
order=64 ; % the order of the filter;
w=zeros(order,1);
I=eye(order,order);
delta=0.001;
P=1/delta*I;
d=output;
lamda=0.85;
error=zeros(N,1);
for i=order:N
u=r(i:-1:i-order+1);
e=d(i)-w'*u;
product=multiply(P,u);
k=(product)/(lamda+u'*(product));
P=1/lamda*(P-k*u'*P);
w=w+k*e;
error(i)=error(i)+e^2;
end;
figure;
semilogy(error(order:N),'r');
Hn =[0.8783 -0.5806 0.6537 -0.3223 0.6577 -0.0582 0.2895 -0.2710 0.1278 -0.1508 0.0238 -0.1814 0.2519 -0.0396 0.0423 -0.0152 0.1664 -0.0245 0.1463 -0.0770 0.1304 -0.0148 0.0054 -0.0381 0.0374 -0.0329 0.0313 -0.0253 0.0552 -0.0369 0.0479 -0.0073 0.0305 -0.0138 0.0152 -0.0012 0.0154 -0.0092 0.0177 -0.0161 0.0070 -0.0042 0.0051 -0.0131 0.0059 -0.0041 0.0077 -0.0034 0.0074 -0.0014 0.0025 -0.0056 0.0028 -0.0005 0.0033 -0.0000 0.0022 -0.0032 0.0012 -0.0020 0.0017 -0.0022 0.0004 -0.0011 0 0 ];
Hn=Hn(1:64);
%读入语音; it is a column vector;
r=wavread('C:\MATLAB\work\Write_In_Paper\Shi_Yan.wav');
r=r(1:2000);
% cut the former 5000 points;
r=r'; r=r+0.2*randn(size(r));% r is the input noisy signal vector;
mu=0.6;
% the output signal vector;
output=conv(r,Hn); N=length(r);
k=length(Hn); % k is the order of the fikter;
win=zeros(1,k); % the filter coeffients vector;
error=zeros(1,N);
for i=k:N
input=r(i:-1:i-k+1); % intercept the input vector;
e=output(i)-win*input';
win=win+mu*e*input;
error(i)=error(i)+e^2;
end;
hold on;
semilogy(error,'b');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -