代码之家  ›  专栏  ›  技术社区  ›  Mattia Surricchio

给定长度的重叠窗口数

  •  0
  • Mattia Surricchio  · 技术社区  · 6 年前

    我正在用一个简单的窗口函数在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);
    

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

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

    我发现了这个 solution 但我没有重叠 r . 我能从我的数据中找到我的窗口数吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Irreducible    6 年前

    让我们假设一下 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;
    
        2
  •  0
  •   enrico_ay    6 年前

    我认为你可以认为R是:

    框架-框架-跨步

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

    M=(N-R)/(K-R)