2015-06-23 39 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是我的問題。 –