给定长度的重叠数 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;
我正在使用简单的 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;