数组和 matlab 编码器的问题
Posted
技术标签:
【中文标题】数组和 matlab 编码器的问题【英文标题】:Issues with arrays and matlab coder 【发布时间】:2018-04-12 16:14:56 【问题描述】:我一直致力于使用 Matlab-coder 创建 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);
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
错误信息如下所示
使用 melfunction 时出错(第 20 行) 索引超出数组维度。索引值 2 超出数组 p 的有效范围 [1-1]。
TESTINPUTS 中的错误(第 2 行) d0=melfunction(x)
如果我想出答案,我会在找到答案后发布。
【问题讨论】:
该行不会导致该错误。请看:minimal reproducible example 我已经更新了完整的代码。我没有添加它只是变量变坏的实际部分......我指向的代码行也是我认为我必须改变一些东西的地方......抱歉造成混乱跨度> 关于数据大小和形状的一个或多个假设是错误的。您已将p
初始化为行向量,然后在第二次循环迭代中尝试处理它没有的行@987654324@。因此,您的索引超出了数组维度。
@excaza 是否有任何您知道的方法可以解决此问题。
【参考方案1】:
好的,所以我弄乱了一点,发现我相信我不知道如何正确初始化 p 和 m 。为了尝试为 Matlab-Coder 的另一部分添加这些代码行,我错误地初始化了 p 和 m 变量。这是最初的初始化。
p = zeros(1,256);
m = zeros(1,12);
这也是我改变的。
p = zeros(256);
m = zeros(12);
【讨论】:
以上是关于数组和 matlab 编码器的问题的主要内容,如果未能解决你的问题,请参考以下文章
将 C 字符数组转换为 Matlab 字符串 [Matlab 编码器]