PDA

查看完整版本 : [求助]关于在LABVIEW中插入的MATLAB脚本问题--------急!


yuanhao
2008-08-25, 11:37
我在LABVIEW中插入MATLAB脚本对信号进行分析。但是出现错误(subscript indices must either be real positive integers or logicals)。我不清楚怎么修改。下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,index的值好像一直都是0.不知道是为什么。这两天老师还催着要实验数据。请前辈们帮忙看看,不胜感激!
s=zeros(1,5000);
s=rand(1,5000);
n=length(s);
max=0.0;
index=0;
for i=1:n
if max<s(i)
max=s(i);
index=i;
else
end
end
small=100;
wenergys=sum(s(index-small:index+small).^2);
middle=150;
wenergym=sum(s(index-middle:index+middle).^2);
large=200;
wenergyl=sum(s(index-large:index+large).^2);
energy=sum(s.^2);
ratios=wenergys/energy;
ratiom=wenergym/energy;
ratiol=wenergyl/energy;
m=max*100000;
ws=wenergys*100000;
wm=wenergym*100000;
wl=wenergyl*100000;
e=energy*100000;
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];

abcxx414
2008-12-20, 14:59
因为Matlab中求最大值的函数是max,你最好不要在程序中与函数名相同名称的作为赋值变量,所以你最好把你程序中的max等用别的字母替换,T、G什么的都可以。
其实你要求矩阵s的最大值,只要max(s)就得到了,不要循环这么麻烦:smile:

abcxx414
2008-12-20, 15:02
你的错误与LabVIEW没关系,是MatLab自身编译出错,最好先对m文件在Matlab中运行,验证正确后再放到LabVIEW中