1

我正在尝试对音频文件执行 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);

你能告诉我我能做些什么来纠正这个问题吗?

4

1 回答 1

1

正如错误消息所说,您正在尝试访问wave不存在的 tat 职位。

看这个例子:

a    = rand(7,1);
step = 4;

1:step:7
ans =
     1     5

v = 5,您将尝试访问位置v:v+step,即 5 到 9,但a最多只能定义 7 个元素。

在您的情况下,wave最多定义为length(wave),但在最后一次迭代中,您将超出 bounds

为了避免这种情况,方法是对结束序列进行采样并减去序列的长度:

pos = (1+w_length:w_length:length(wave))-w_length
for v = pos
% do stuff
end

但是,您将留下一些未处理的部分,作为最后一次迭代,您必须在循环之外执行这些部分。

于 2013-08-11T14:12:04.933 回答