📄 weinafilter_2.m
字号:
%自适应滤波器
clear;
v=1; %信号方差
l=100; %样本个数
u=0.1; %步长
hi=-0.8; %hi
h=zeros(l,1);
h(1)=0; %h(0)
mp=0; %平均超调量
ct=1; %统计次数
for count=1:ct
x=randn(1,l);
meanx=sum(x)/l;
covx=sum((x-meanx)*(x-meanx)')/l;
x=0.5*(x-meanx)/sqrt(covx);
w=randn(1,l);
meanw=sum(w)/l;
covw=sum((w-meanw)*(w-meanw)')/l;
w=sqrt(v)*(w-meanw)/sqrt(covw);
s=hi*x;
y=s+w;
t=0:1:l-1;
%plot(t,s,t,y);
cstep=l; %converge step
r=x*x'/l;
for i=2:l
h(i)=hi+((1-2*u*r)^(i-1))*(h(1)-hi); %理论
if abs((h(i)-hi)/hi)<=0.05 cstep=i;break,end %收敛速度
end
for i=cstep+1:l
h(i)=hi+((1-2*u*r)^(i-1))*(h(1)-hi); %理论
end
hm=zeros(1,l);
sm=zeros(1,l);
hm(1)=h(1);
em=0;
for i=1:l-1
sm(i)=hm(i)*x(i);
hm(i+1)=hm(i)+2*u*(y(i)-hm(i)*x(i))*x(i);
if i>=cstep em=em+(y(i)-sm(i))^2;end
end
sm(l)=hm(l)*x(l);
em=em/(l-1-cstep);
m=(em-v)/v;
mp=mp+m;
end
mp=mp/ct
plot(t+1,h,':b',t+1,hm,'r');
legend('理论值','估计值',0);
title('h(n)的理论值和估计值');
xlabel('n');
figure;
plot(t+1,s,':b',t+1,sm,'r');
legend('s(n)','估计值',0);
title('s(n)及其估计值');
xlabel('n');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -