⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wiener.m

📁 matlab编程
💻 M
字号:
function wiener(a,db,L,N)%db是信噪比,N是AR模型阶数,L是信号长度
bs=10^(db/10);%信号与噪声的比值
w=randn(1,L);%产生均值为0的随机信号
s=zeros(1,L);
x=zeros(1,L);
r_ss=zeros(1,L);% r_ss是s的相关函数,r_ss(1)其实是r_ss(0),是方差
r_vv=zeros(1,L);
r_xx=zeros(1,L);
r_xs=zeros(1,L);
s(1)=w(1);%s(0)=0
for i=2:L
    s(i)=a*s(i-1)+w(i);
end
for i=1:L
    r_ss(1)=r_ss(1)+s(i)*s(i);
end
r_ss(1)=r_ss(1)/L;
r_vv(1)=r_ss(1)/bs;% r_vv(1)是白噪声信号的方差
v=sqrt(r_vv(1))*randn(1,L);%要产生均值为0且方差等于r_vv(0)的白噪声
x(1:L)=s(1:L)+v(1:L)% x(n)是观测数据也是输入数组
r_xx(1)=r_ss(1)+r_vv(1);% r_xx是x(n)的自相关函数
r_xs(1)=r_ss(1);% r_xs是x(n)与s(n)的互相关函数
for i=2:N
    %r_ss(i)=a^(1-i)*r_ss(1);
     r_ss(i)=a^(i-1)*r_ss(1);
    r_vv(i)=0;
    r_xx(i)=r_ss(i)+r_vv(i);
    r_xs(i)=r_ss(i);
end
R_xs=zeros(N,1);
R_xx=zeros(N,N);
for i=1:N
    k=1;
    for j=i:N
        R_xx(i,j)=r_xx(k);
        k=k+1;
    end
   if i>1
       k=2;
      for j=i-1:1
          R_xx(i,j)=r_xx(k);
          k=k+1;
      end
  end
  R_xs(i)=r_xs(i);
end
hopt=zeros(N,1);
hopt=inv(R_xx)*R_xs
%E=r_ss(1)-(conj(R_xs))'*hopt
Emin=abs(r_ss(1)-(conj(R_xs))'*hopt)

y=conv(hopt',x);
n=1:L;
plot(n,s,'-bo');
hold on;
plot(y,'-r');
hold off;
%xlabel('n'),ylabel('观测数据x(n)');
%grid on;
%title('观测数据x的波形');




        
        
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -