mouseyuanhao发表于 2008-8-25 11:14:56

这段程序出错,不清楚怎么改

下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
s=zeros(1,5000);
s=rand(1,5000);
n=length(s);
max=0.0;
index=0;
for i=1:n
ifmaxmax=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=;

小土匪发表于 2008-8-26 13:20:56

求一维数组s的最大值和索引位置 max 和index可以求出来呀
也就是执行了for循环了
可能计算机计算速度快我们感觉不到等待的时间 :handshake
如果是5000个数字迭代的话肯能时间很长

mouseyuanhao发表于 2008-8-28 16:09:39

回复 2# 小土匪 的帖子

其实我的这个程序是插在labview里的脚本。我一开始用的就是=max(s);但是我是把程序作为脚本插入在labview程序里,labview提示出错:subscript indices must either be real positive integers or logicals. 然后就不给我执行了,改成for循环也一样。5000个数字迭代时间并不长,我在MATLAB里面试过,瞬间出结果,但是在labview里编译就是通不过。我现在怀疑是不是labview和MATLAB的兼容做的不够好。

小土匪发表于 2008-8-29 17:20:28

labview还没接触过
是不是取随机数的时候最大值的标号正好小于200了这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?

提示也正好是indices must either be real positive integers or logicals
你再修改下随即数?:victory:

小土匪发表于 2008-8-29 17:23:09

Subscript indices must either be real positive integers or logicals
R$ P# O9 A3 s
中文解释:下标索引必须是正整数类型或者逻辑类型
W7 b# p# ]3 I' k8 m
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始


这是网上搜到的资料 借鉴下
页: [1]
查看完整版本: 这段程序出错,不清楚怎么改