0

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

4

2 回答 2

0

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

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

ans =

    1.0000
于 2012-11-19T15:34:11.503 回答
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);
于 2012-11-20T08:24:50.643 回答