2015-06-23 110 views
0

我想在Matlab中设计一个Wiener滤波器来解卷积问题,但是我遇到了很多问题。我有一个方差为1.2的高斯白噪声过程和一个长度为2的脉冲响应。它的值是g(0)= 5和g(1)= 4。稍后在这个过程中,我尝试确定Rxx(m)。为此,我需要计算g(m)* g(-m)(卷积),并建议在Matlab中使用xcorr函数,但我的结果没有意义。任何人都可以通过这个xcorr函数来帮助我,并提供关于如何使用这个脉冲响应的建议吗?我曾尝试过g的fourrier变换,但这一直没有帮助。带有脉冲响应的xcorr函数

+0

Rxx(0)位于中间('ceil(M/2)') – patrik

+0

请提供您已经尝试使用的代码。任何我们需要更多关于上下文的细节。像输入信号一样,脉冲响应是什么,以及计算conv(m,-m)的位置/原因。 – Matt

+0

我没有输入信号,只是它是一个白噪声过程,方差为1.2,通过FIR滤波器g(n)。知道这是一个FIR滤波器,差分方程变为_r(n)= sum g(k)y(n-k)_。但是信号r(n)被方差为0.2的噪声过程d(n)所污染。为此,我有x(n)= r(n)+ d(n)。 –

回答

0

下面的代码只实现了我可以在描述中看到的一部分内容。它会产生噪音过程并执行第一部分所述的内容。自相关不是用滤波器系数计算的,而是用实际信号计算的。

% generate noise process y 
y = randn(1,N) * sqrt(1.2); 

% filter y with the fir-filter g 
g = [2, 0.6]; 
r = filter(g,1,y); 

% generate noise process d 
d = randn(1,N) * sqrt(0.2); 

% x is the sum of r and d 
x = r + d; 

% autocorrelation of x 
[Rxx,lagRxx] = xcorr(x); 

% plot autocorrelation 
figure; grid on; 
plot(lagRxx,Rxx); 
title('Biased Autocorrelation of Signal x'); 
xlabel('Lag'); 

% cross correlation between x and y 
[Rxy,lagRxy] = xcorr(x,y); 

% plot crosscorrelation 
figure; grid on; 
plot(lagRxy,Rxy); 
title('Biased Crosscorrelation of Signal x and y'); 
xlabel('Lag'); 
+0

是的,谢谢,我使用的xcorr函数完全错误。我的最后一个问题是,Rxx确定后,我想确定维纳滤波器,为此我需要_Ryx_。现在从前面的方程我确定_Rxy = g(m)* Ryy = sy g(m)。现在_Ryx_应该是_g(-m)* Ryy_对吗?我尝试使用_Ryy = xcorr(y)_然后使用conv()函数,但是我的结果没有意义。 –

+0

@Dann Wabeke:我编辑了代码来计算互相关。 – Matt

+0

但是如果我想采用不同的方式,不使用_r(n)_和_y(n)_的随机信号,我可以像我一样通过数学推导公式的方式避开未知信号。所以我有:_Rxx = sy g(m)* g(-m)+ sd delta(m)_ _Rxy = Rry = g(m)* Ryy = sy g(m)_ _Ryx = sy g(-m) _计算这些没有Y和R是我的问题。 –