【问题标题】:Matlab error: Index exceeds matrix dimensionsMatlab 错误:索引超出矩阵维度
【发布时间】:2013-08-11 22:18:32
【问题描述】:

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

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

【问题讨论】:

    标签: matlab


    【解决方案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),但在最后一次迭代中,您将超出范围

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

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

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

    【讨论】:

    • 好的,谢谢。你说用这种方法会有一些未加工的部分。我读到了零填充。如果我对信号进行零填充以使其长度为 1024 的倍数怎么办?这样能解决问题吗??
    • 那我试试。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多