Matlab错误:索引超过矩阵维数
我正在尝试对音频文件执行STFT。我需要得到每个窗口的fft 我使用了下面的代码Matlab错误:索引超过矩阵维数,matlab,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 但是我得到了以下错误 ??
[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);
你能告诉我我能做些什么来纠正这个问题吗。正如错误消息所说,你正在尝试访问
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)
,但在上一次迭代中,您将越界
为了避免这种情况,最常用的方法是对末端序列进行采样并减去序列的长度:
pos = (1+w_length:w_length:length(wave))-w_length
for v = pos
% do stuff
end
但是,您将留下一些未处理的部分,作为最后一次迭代,您将不得不在循环之外执行。正如错误消息所述,您正在尝试访问
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)
,但在上一次迭代中,您将越界
为了避免这种情况,最常用的方法是对末端序列进行采样并减去序列的长度:
pos = (1+w_length:w_length:length(wave))-w_length
for v = pos
% do stuff
end
但是,您将留下一些未处理的部分,作为最后一次迭代,您必须在循环之外进行。好的,谢谢。你说用这种方法会有一些未加工的部分。我读过关于零填充的文章。如果我将信号归零,使其长度为1024的倍数会怎么样??这能解决问题吗?我只需在循环之外,在间隔
波(v+w_length+1:end)
上最后一次重复你的代码,因为在循环之后v=pos(end)
。那么我就试试看。谢谢。好的,谢谢。你说用这种方法会有一些未加工的部分。我读过关于零填充的文章。如果我将信号归零,使其长度为1024的倍数会怎么样??这能解决问题吗?我只需在循环之外,在间隔波(v+w_length+1:end)
上最后一次重复你的代码,因为在循环之后v=pos(end)
。那么我就试试看。非常感谢。