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