[英]Matlab error: Index exceeds matrix dimensions
我正在嘗試對音頻文件執行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);
你能告訴我我可以做些什么來糾正這個問題。
如錯誤消息所述,您正在嘗試訪問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
但是,您將剩下一些未處理的部分,您將不得不在循環之外做最后的迭代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.