给定长度的重叠窗口数

时间:2018-12-15 19:28:14

标签: matlab signal-processing 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);

窗口重叠是通过时间偏移而不是其长度的百分比值给出的(因此,每隔10ms,我就会有一个窗口在40ms之后结束。

如何计算信号中的窗口数?

我找到了这个solution,但是我没有重叠的r。我可以从已有的数据中找到窗口的数量吗?

2 个答案:

答案 0 :(得分:1)

我认为您可以将r视为:

  

frame_dur-frame_stride

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

  

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

答案 1 :(得分:0)

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

n=numel(s_a);

明智地(在每个窗口中)处理数据帧时,您将进行以下操作

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

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

end

因此,您可以看到适合数据的窗口数量可以通过以下方式计算:

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

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

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