窗口化以平滑信号

时间:2012-11-19 15:07:03

标签: matlab

对于matlab,我想生成一系列hanning窗口,它们重叠50%以应用于我的输入信号。而对于窗口之间的重叠部分,我想让它取其平均值例如(x + y)/ 2然后仅适用于我的信号。如何生成hanning窗口的序列,它们之间的平均值?谢谢。

2 个答案:

答案 0 :(得分:0)

在Matlab中生成窗口时,可以添加“periodic”选项。 然后,如果你有50%的重叠,两个连续的窗口将重叠等于1。 举个例子,你可以尝试:

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

ans =

    1.0000

答案 1 :(得分:0)

以下脚本添加了重叠50%的Hanning窗口的移位版本。除第一个和最后一个窗口外,所有窗口都缩放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);