2012-11-19 40 views
0

對於matlab,我想生成一個hanning窗口序列,它們重疊50%以應用於我的輸入信號。對於窗口之間的重疊部分,我想讓它取平均值,例如(x + y)/ 2,然後只應用於我的信號。如何生成hanning窗口的平均值之間的平均值?謝謝。使信號平滑的窗口

+2

'help hanning;幫助movavg;幫助意味着; –

+0

您確定要取平均重疊部分嗎?這將在第一個和最後一個窗口的中間產生不連續性。 – Deve

+0

是的,是否可以這樣做?或者我可以將信號分別乘以漢寧窗,並在乘以後得到平均值,但是如何將它們與平均值放在一個數組中。 – Thy

回答

0

下面的腳本增加了轉向重疊50%的漢寧的Windows版本。除了第一個和最後一個窗口以外,所有窗口都按0.5縮放。第一個窗口的後半部分按0.5縮放,最後一個窗口的上半部分按0.5縮放。

% Length of input sequence 
N = 600; 
% Length of one Hanning window 
L = 50; 
% can be periodic or symmetric 
sampling_flag = 'periodic'; 

all_windows = zeros(N, 1); 
figure; hold all; 
for k = 0:floor(2*(N-L)/L) 
    current_window = hann(L, sampling_flag); 
    if k == 0   
     current_window(L/2 + 1 : end) = current_window(L/2 + 1 : end) * 0.5;   
    elseif k == floor(2*(N-L)/L) 
     current_window(1 : L/2) = current_window(1 : L/2) * 0.5; 
    else 
     current_window = current_window * 0.5; 
    end 
    all_windows = all_windows + [zeros(k*L/2, 1); current_window; zeros(N - L - k*L/2, 1)]; 
    plot([zeros(k*L/2, 1); hann(L); zeros(N - L - k*L/2, 1)]); 
end 
hold off; 
figure; 
plot(all_windows); 
+0

我認爲這是我想要的。謝謝 – Thy

0

在Matlab中生成窗口時,可以添加'periodic'選項。 然後,如果你有50%的重疊,兩個連續的窗口將有他們的重疊等於1。 舉個例子,你可以嘗試:

w=hanning(100,'periodic'); 
x=w(1:50)+w(51:100); 
unique(x) 

ans = 

    1.0000 
+0

你是否建議'periodic'選項產生窗口的週期性重複? – Deve

+0

但是我想重複漢寧窗,每個重疊的部分可以加上2點併除以2,這樣就不會有重疊,我可以乘以我的信號.x只能得到全部1的值。 – Thy

+0

「定期」選項不會重複該窗口。但是如果在應用Fourrier變換之前使用這個窗口,最好使用「periodic」。 – Castim