title('hi(n)---hr(n)...');
%维纳滤波器AR模型
L=input('输入样本点个数 '); P=input('输入阶数p= ');
a1=input('输入模型参数a1= '); n=1:L; w=sqrt(1-a1^2)*randn(1,L); s(1)=0; for i=2:L
s(i)=-a1*s(i-1)+w(i); end
v=randn(1,L); x=s+v; ss0=0; ss1=0; for i=1:L-1
ss0=ss0+s(i)*s(i); ss1=ss1+s(i)*s(i+1); end
ss0=ss0+s(L)^2; ss0=ss0/L; ss1=ss1/(L-1); a2=-ss1/ss0; b2=ss0+ss1*a2; b1=1-a1^2;
disp(sprintf('方差=%f',b1)); disp(sprintf('方差估值=%f',b2)); disp(sprintf('a1=%f',a1)); disp(sprintf('a1估值=%f',a2));
⑶%卡尔曼滤波程序 clear
L=100; Rw=1; Rv=1; xe(1)=0; Pe(1)=1e-12; P(1)=100; for i=1:L A(i)=0.95; B(i)=0; W(i)=1; C(i)=1; V(i)=1; u(i)=0; end
r1=randn(1,L); r2=randn(1,L); w=sqrt(Rw)*r1; v=sqrt(Rv)*r2; r=randn(1); x(1)=xe(1)+sqrt(Pe(1)); for k=2:L x(k)=0.95*x(k-1)+w(k-1); end y=x+v; for k=1:L yI(k)=C(k)*x(k); end
I=eye(1,1); t=1:L; figure(1)
plot(t,yI,t,y,':'),xlabel('时间t'),title('量测值yI —— y ...'); for k=2:L Q(k-1)=W(k-1)*W(k-1)'*Rw; R(k)=V(k)*V(k)'*Rv; P1(k)=A(k)*P(k-1)*A(k)'+Q(k-1); H(k)=P1(k)*C(k)'*inv(C(k)*P1(k)*C(k)'+R(k)); P(k)=(I-H(k)*C(k))*P1(k); xe(k)=A(k)*xe(k-1)+H(k)*(y(k)-C(k)*A(k)*xe(k-1))+B(k)*u(k-1); ye(k)=C(k)*xe(k); end
figure(2)
subplot(2,2,1)
plot(t,P); xlabel('时间t'),title('P'); subplot(2,2,2)
plot(t,H); xlabel('时间t'),title('H'); subplot(2,2,3)
plot(t,x,t,xe,':'); xlabel('时间t'),title('纯信号x —— 滤波结果xe ...'); subplot(2,2,4)
plot(t,yI,t,ye,':');xlabel('时间t'),title('量测值yI —— 滤波结果ye ...');
⑷%自适应滤波器 clear
L=input('输入样本点个数 '); a=input('输入w的方差 '); hI=input('输入hI '); u=input('输入步长u '); h0=input('输入初始值h0 '); n=1:L; x=randn(1,L); w=sqrt(a)*x; s=hI*x; y=s+w; subplot(2,2,1)
plot(n,s,n,y,':'); title('曲线s- 曲线y....'); ylabel('幅度'); xlabel('迭代次数n'); hh(1)=0; h(1)=0;%hI+(1-2*u)*(h0-hI); ss(1)=0; sss(1)=0; for i=2:L
hh(i)=hh(i-1)+2*u*(s(i-1)-hh(i-1)*x(i-1))*x(i-1);
ss(i)=hh(i)*x(i); h(i)=hI+((1-2*u)^i)*(h0-hI); sss(i)=h(i)*x(i); end
subplot(2,2,2)
plot(n,h,n,hh,':'); title('曲线h- 曲线hh....'); ylabel('幅度');xlabel('迭代次数n'); subplot(2,2,3)
plot(n,s,n,ss,':'); title('曲线s- 曲线ss....'); ylabel('幅度'); xlabel('迭代次数n'); subplot(2,2,4)
plot(n,s,n,sss,':');title('曲线s- 曲线sss....');ylabel('幅度');xlabel('迭代次数n');
%自适应滤波器的AR模型 clear
M=input('输入估计AR模型的阶数M ');P=input('输入实际AR模型的阶数P '); u=input('输入步长u '); C=input('输入 W的方差'); L=input('输入样本个数 L '); for i=1:P
a(i)=input(sprintf('输入a(%d) ',i)); end
x=randn(1,L+M); w=sqrt(C)*x; y=randn(1,L+M); for i=P+1:L+M for n=1:P
y(i)=y(i)-a(n)*y(i-n); end
y(i)=y(i)+w(i); end
b=zeros(L,M);
for n=1:L yy=0; for i=1:M
yy=yy-b(n,i)*y(n-i+M); end
ee=y(n+M); e(n)=ee-yy; for i=1:M
b(n+1,i)=b(n,i)-2*u*e(n)*y(n-i+M); end end
for i=1:M
subplot(1,2,i); for t=1:L
bb(t)=b(t,i); aa(t)=a(i); end
t=1:L; plot(t,aa,':',t,bb);
title(sprintf('-估计值a%d(n) end
.实际值a%d=%3.2f',i,i,a(i)));
相关推荐: