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