机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3737|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
% t% C9 B  N) A0 F, c1 }s=zeros(1,5000);( Y5 Z& Q. l$ O
s=rand(1,5000);( L) D9 N5 c( O; Y" ^
n=length(s);1 M" Q* p, c4 k( Y& Y1 F/ W
max=0.0;
4 J- N5 F- [0 A/ V8 M: r  ?( Vindex=0;
& H  U; O( N8 ]7 m$ u  ]+ Jfor i=1:n
  u1 S/ i' f( K% A if  max<s(i); S% R4 ?( a% W/ M# ~7 K
     max=s(i);5 w9 X7 A) O: `4 b6 i
     index=i; 0 L1 ~0 d' Y2 \% y
  else+ q. c6 v! T$ ~9 u( D$ t" W
  end4 \+ O7 d* f$ u, z: d
end   # p6 q# n% I4 B) B' A
small=100;( N+ q8 k" a* ~& r9 E7 O- j
wenergys=sum(s(index-small:index+small).^2);- \: N7 Y8 ^& F* e' w
middle=150;+ L# q1 h/ p4 N) q3 R- C8 ~, X
wenergym=sum(s(index-middle:index+middle).^2);& x7 Y9 |9 |4 @9 w" f* k
large=200;
' R; n' Y/ t; K# K. U1 Owenergyl=sum(s(index-large:index+large).^2);2 n. p8 m; }4 A' }# d; J7 M7 w. J
energy=sum(s.^2);
; \4 {# O" z; ^' k+ `ratios=wenergys/energy;
2 |, V% n1 d* r1 x. w" ~2 }2 ]ratiom=wenergym/energy;% g5 h$ c+ k$ s5 N
ratiol=wenergyl/energy;2 K' Q/ k( b! b: S. {3 f
m=max*100000;
* |# a$ v" E7 Iws=wenergys*100000;
3 Z1 o, w& z/ o% e; \5 ?wm=wenergym*100000;! o" Z8 f+ l# {! J" f4 p
wl=wenergyl*100000;5 ]0 k% v% E4 w- G$ q7 E# u" H
e=energy*100000;1 H7 X6 f" y% D
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀1 K5 t, F& x# \: V1 n
也就是执行了for循环了1 D+ Z( o0 v' J( ~& C
可能计算机计算速度快  我们感觉不到等待的时间    2 o& t; c0 t2 w! Q) B: j' x
如果是5000个数字迭代的话肯能时间很长

评分

参与人数 1威望 +10 收起 理由
老鹰 + 10

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-28 16:09:39 | 显示全部楼层

回复 2# 小土匪 的帖子

其实我的这个程序是插在labview里的脚本。我一开始用的就是[max,index]=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还没接触过
3 P; H* S- a5 j* `) v( k( j是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?, j! Z( M2 m& U

8 ?9 _- k/ |- _7 f提示也正好是indices must either be real positive integers or logicals
, ?: }9 {& F' n3 r9 |( c你再修改下随即数?
回复 支持 反对

使用道具 举报

发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals
4 N/ v. @+ e( d- O# Z4 U" d$ HR$ P# O9 A3 s2 M9 B: d5 s: \4 d! P
中文解释:下标索引必须是正整数类型或者逻辑类型
) n$ g0 _" K" X4 U6 wW7 b# p# ]3 I' k8 m
0 h8 e" t, b5 z1 s2 g出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始
4 j% J( ~5 \& ]2 N1 Y' t& B9 w& H9 M. }, z0 G* U
5 [$ t, Q+ {) D; W
这是网上搜到的资料   借鉴下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-12-23 11:45 , Processed in 0.053189 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表