给定长度的重叠数 windows

Number of overlapping windows of a given length

我正在使用简单的 windowing 函数在 Matlab 中编写代码,以便应用简单的重叠并将算法添加到我的输入信号。

到目前为止,这是我写的:

[s_a,Fs] = audioread('a.wav');
frame_dur = 0.04; %length of my window in time
frame_stride = 0.01; %shift of every single window in time

frame_len = round(frame_dur * Fs); 
frame_step = round(frame_stride*Fs);

win = hamming(frame_len);

window 重叠由时间偏移而不是其长度的百分比值给出(因此每 10 毫秒我有一个 window 在 40 毫秒后结束。

如何计算信号中 windows 的数量?

我找到了这个 solution 但我没有重叠 r。我可以从我拥有的数据中找到我的windows个数吗?

我认为你可以将 r 视为:

frame_dur - frame_stride

并使用您发布的公式计算 windows 的数量(取决于信号相对于步幅的长度):

m = (n-r)/(k-r)

让我们假设 n 是您的音频文件中的样本数:

n=numel(s_a);

当明智地处理你的数据帧时(每个window)你会做以下事情

for frame=1:frame_step:(n-(frame_len-1))

    Tmp=s_a(frame:frame+frame_len-1).*win;
    %do something with tmp

end

因此您可以看到适合您的数据的 windows 的数量可以按以下方式计算:

num_win=numel(1:frame_step:(n-(frame_len-1)));

假设最坏情况下 n 不是 frame_len 的倍数,您可以这样计算:

num_win=floor((n-(frame_len))/frame_step)+1;