C 阵列和matlab编码器的问题
我一直在用Matlab编码器创建c代码。我有一个名为melfunction的函数,它为下面代码的第20行提供了一个错误C 阵列和matlab编码器的问题,c,arrays,matlab-coder,C,Arrays,Matlab Coder,我一直在用Matlab编码器创建c代码。我有一个名为melfunction的函数,它为下面代码的第20行提供了一个错误 function [ c ] = melfunction( x ) bank=melbankm(24,256,8000,0,0.4,'t'); bank=full(bank); %full() convert sparse matrix to full matrix bank=bank/max(bank(:)); w=1+6*sin(pi*[1:12]./12);
function [ c ] = melfunction( x )
bank=melbankm(24,256,8000,0,0.4,'t');
bank=full(bank); %full() convert sparse matrix to full matrix
bank=bank/max(bank(:));
w=1+6*sin(pi*[1:12]./12);
w=w/max(w);
xx=double(x);
xx=filter([1-0.9375],1,xx);
xx=enframe(xx,256,80)
p = zeros(1,256); < --------------------- SOLUTION CHANGE TO p = zeros(256)
m = zeros(1,12); < --------------------- SOLUTION CHANGE TO p = zeros(12)
for i=1:size(xx,1)
y=xx(i,:);
s=y'.*hamming(256);
t=abs(fft(s));
t=t.^2;
p(i,:) = t; < --------------------------- ERROR HERE
c1=dctcoef*log(bank*t(1:129));
c2=c1.*w';
m(i,:)=c2;
end
函数[c]=melfunction(x)
bank=melbankm(242568000,0,0.4,'t');
银行=满(银行);%full()将稀疏矩阵转换为完整矩阵
银行=银行/最大(银行(:);
w=1+6*sin(π*[1:12]./12);
w=w/最大值(w);
xx=双(x);
xx=过滤器([1-0.9375],1,xx);
xx=enframe(xx,256,80)
p=0(1256);<------------解决方案更改为p=0(256)
m=零(1,12);<------------溶液更改为p=0(12)
对于i=1:尺寸(xx,1)
y=xx(i,:);
s=y'.*汉明(256);
t=abs(fft(s));
t=t.^2;
p(i,:)=t;<------------------------------------这里出错
c1=dctcoef*log(组*t(1:129));
c2=c1.*w';
m(i,:)=c2;
结束
错误消息如下所示
使用MEL函数时出错(第20行)
索引超过数组维度。索引值2超出数组p的有效范围[1-1]。
测试输入错误(第2行)
d0=功能(x)
如果我想出一个答案,我会在找到答案后发布。好的,所以我把它弄乱了一点,发现我认为我不知道如何正确初始化p和m。为了给Matlab编码器的另一部分添加这些代码行,我错误地初始化了p和m变量。这是最初的初始化
p=0(1256);
m=零(1,12)代码>
这也是我改变的
p = zeros(256);
m = zeros(12);
该行不会导致该错误。请看:我已经更新了完整的代码。我没有添加实际发生故障的部分,只是变量。。。。。。我所指的代码行也是我认为我必须改变的地方。。。。。。很抱歉造成混淆关于数据大小和形状的一个或多个假设是错误的。您已经将p
初始化为行向量,然后尝试在第二次循环迭代中寻址它没有的行2
。因此,您的索引超出了数组维度。@excaza您知道有什么方法可以解决这个问题吗。