维纳滤波器估计恒定信号

信息处理 过滤器设计 过滤
2022-02-06 15:59:25

我想比较维纳滤波器和卡尔曼滤波器的性能,以使用被白噪声破坏也就是说,我的测量是 的形式 ,其中具有均值和已知方差的正态分布。d

x(n)=d+v(n)
v(n)0σ2

使用卡尔曼滤波器,我可以将其置于状态空间形式 并解决问题。但是我很难设置问题,所以我可以用维纳滤波器解决。我的信号是恒定信号我的过滤器输入是测量值但是我怀疑我是否做错了什么,因为我估计的信号并不是对期望响应的一个很好的估计。我使用了以下matlab代码:

d(n+1)=d(n)
x(n)=d(n)+v(n)
xx

function test()
    n = 0:511;
    d = 10 * ones(1,512);
    v = 0.5*randn(1,512);
    x = d + v;
    w = WienerFIRFilter(x, d, 12);
    y = filter(w', 1, x);

    plot(x)
    hold on
    plot(y, 'r')
end

函数 WienerFIRFilter 定义如下

function w=WienerFIRFilter(u,d,M) 
    aux = xcorr(d,u,'biased'); 
    p = aux(1,(length(aux)+1)/2:((length(aux)+1)/2)+M-1); 
    [U, R] = corrmtx(u,M-1);
    w=inv(R)*p'; 
end

在此处输入图像描述

难道我做错了什么?

1个回答

您可以使用此代码

 function w=WienerFIRFilter(input,desired,M) 
     auto_corr=xcorr(input,M,'unbiased');
     r=auto_corr(M+1:end); % positive lags only
     R=toeplitz(r); %correlation matrix
     cross_corr=xcorr(input,desired,M,'unbiased');
     p=(cross_corr(M+1:end));
     w=inv(R)*p'
 end