我正在尝试对音频文件执行STFT。我需要获得每个窗口的fft。
我使用了以下代码。
[wave,fs] = wavread('40.wav');
w_length = 1024;
for v = 1:w_length:length(wave)
data_sub = wave(v:v+w_length);
subsection_fft = fft(data_sub);
figure(1)
plot(subsection_fft)
end
但我收到以下错误。
??? Index exceeds matrix dimensions.
Error in ==> chk at 7
data_sub = wave(v:v+w_length);
你能告诉我我能做些什么来纠正这个问题。
答案 0 :(得分:1)
正如错误消息所示,您正试图访问wave
中不存在的位置。
见这个例子:
a = rand(7,1);
step = 4;
1:step:7
ans =
1 5
v = 5
时,您将尝试访问位置v:v+step
,即5到9,但a
最多只能定义7个元素。
在您的情况下,wave
最多定义为length(wave)
,但在最后一次迭代中,您将越界。
为避免这种情况,接近方法是对结束序列进行采样并减去序列的长度:
pos = (1+w_length:w_length:length(wave))-w_length
for v = pos
% do stuff
end
但是,您将留下一些未经处理的部分,您必须在循环之外进行上一次迭代。