Matlab程序问题(高分求解决)
来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/18 04:29:06
Matlab程序问题(高分求解决)
Attempted to access speak1(12001); index out of bounds because numel(speak1)=12000.
这是matlab的报错,下面是程序
%AAW
clear;close all;clc;
M=10
Q=16
N=80;
p=1500;
speak1=wavread('01.wav');
speak2=wavread('02.wav');
speak3=wavread('03.wav');
speak4=wavread('04.wav');
speak5=wavread('05.wav');
speak6=wavread('06.wav');
speak7=wavread('07.wav');
speak8=wavread('08.wav');
speak9=wavread('09.wav');
speak10=wavread('10.wav');
for j=1:p
for i=1:N
speak(i+80.*(j-1))=(speak1(i+80.*(j-1))+speak2(i+80.*(j-1))+speak3(i+80.*(j-1))+speak4(i+80.*(j-1))+speak5(i+80.*(j-1))+speak6(i+80.*(j-1))+speak7(i+80.*(j-1))+speak8(i+80.*(j-1))+speak9(i+80.*(j-1))+speak10(i+80.*(j-1)))./M;
end
end
wavwrite(speak,'AAW')
声音文件读入没有问题,for后面的公式是出错的地方,
Attempted to access speak1(12001); index out of bounds because numel(speak1)=12000.
这是matlab的报错,下面是程序
%AAW
clear;close all;clc;
M=10
Q=16
N=80;
p=1500;
speak1=wavread('01.wav');
speak2=wavread('02.wav');
speak3=wavread('03.wav');
speak4=wavread('04.wav');
speak5=wavread('05.wav');
speak6=wavread('06.wav');
speak7=wavread('07.wav');
speak8=wavread('08.wav');
speak9=wavread('09.wav');
speak10=wavread('10.wav');
for j=1:p
for i=1:N
speak(i+80.*(j-1))=(speak1(i+80.*(j-1))+speak2(i+80.*(j-1))+speak3(i+80.*(j-1))+speak4(i+80.*(j-1))+speak5(i+80.*(j-1))+speak6(i+80.*(j-1))+speak7(i+80.*(j-1))+speak8(i+80.*(j-1))+speak9(i+80.*(j-1))+speak10(i+80.*(j-1)))./M;
end
end
wavwrite(speak,'AAW')
声音文件读入没有问题,for后面的公式是出错的地方,
![Matlab程序问题(高分求解决)](/uploads/image/z/15300679-31-9.jpg?t=Matlab%E7%A8%8B%E5%BA%8F%E9%97%AE%E9%A2%98%EF%BC%88%E9%AB%98%E5%88%86%E6%B1%82%E8%A7%A3%E5%86%B3%EF%BC%89)
一个问题一个问题解决
你先在for循环前定义一下矩阵:
speak=zeros(1,N+80.*(p-1));
但肯定还有问题
因为首先的你维数就不对
你length(speak1)一下,应该才12000维,而你的(N+80.*(p-1))数超过了这个数,肯定会有问题
建议你length一下speak1到10,看看他们的维数是多少
再问: 先谢谢你的回答,我按你说的做了一下 在for前面定义了一下数组,还是一样的报错,speak1——10是我用cooledit录制的音频,每一段都是8000Hz采样,16比特量化,帧长10ms,1500帧,我也按你说的length了一下,结果都是12000 我不太明白(N+80.*(p-1))不就是80+80*1499么?不是正好12000么?matlab怎么会给我算出来12001个数呢?
再答: ==,下班,回去看看
再问: 谢谢,一定帮帮我哈,不然我就死定了。。。
再答: 好吧,,我们两个都一时僵掉了 1500*80=120000后面四个0 你看看speak1多少维?,如果是4个0那就没问题,如果是3个0就有问题了 我模拟了一下,,OK了 把1500改为150就行了 我们都没仔细算啊,呵呵,,,
再问: 这。。好吧,我2了,竟然是这么低级的错误,不过还是谢谢你哈
你先在for循环前定义一下矩阵:
speak=zeros(1,N+80.*(p-1));
但肯定还有问题
因为首先的你维数就不对
你length(speak1)一下,应该才12000维,而你的(N+80.*(p-1))数超过了这个数,肯定会有问题
建议你length一下speak1到10,看看他们的维数是多少
再问: 先谢谢你的回答,我按你说的做了一下 在for前面定义了一下数组,还是一样的报错,speak1——10是我用cooledit录制的音频,每一段都是8000Hz采样,16比特量化,帧长10ms,1500帧,我也按你说的length了一下,结果都是12000 我不太明白(N+80.*(p-1))不就是80+80*1499么?不是正好12000么?matlab怎么会给我算出来12001个数呢?
再答: ==,下班,回去看看
再问: 谢谢,一定帮帮我哈,不然我就死定了。。。
再答: 好吧,,我们两个都一时僵掉了 1500*80=120000后面四个0 你看看speak1多少维?,如果是4个0那就没问题,如果是3个0就有问题了 我模拟了一下,,OK了 把1500改为150就行了 我们都没仔细算啊,呵呵,,,
再问: 这。。好吧,我2了,竟然是这么低级的错误,不过还是谢谢你哈