我正在用简单的窗口功能在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
。我可以从已有的数据中找到窗口的数量吗?
答案 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;