Matlab错误:索引超出矩阵维度

时间:2013-08-11 14:03:42

标签: matlab

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

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

1 个答案:

答案 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

但是,您将留下一些未经处理的部分,您必须在循环之外进行上一次迭代。