机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4134|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
3 A% T+ C  [3 ?' R5 Ts=zeros(1,5000);
9 B; q* [5 G: Z, t0 Y- [9 j. ]3 h: ss=rand(1,5000);
- D$ k, V* l3 S4 nn=length(s);6 k. [# n  N- x* q
max=0.0;
8 Q/ f/ B& M' W3 d  ]& }index=0;
8 U: R( I# J1 p0 g7 xfor i=1:n
  D7 F5 d5 c; n+ X% g& @  C if  max<s(i)- H! x7 I. D7 \+ n0 R# C% Q' N* \
     max=s(i);( P5 p) V9 X8 x- D8 o2 M' T7 z' M3 s
     index=i; + ^" h$ y9 K$ g8 e' q
  else
7 \* I! ]8 q7 z  a3 e, h1 K  end0 u" p/ f4 l) H/ ]2 d
end   8 h$ H# H) x/ I) ?2 U4 b' y9 R2 i
small=100;) Q8 W& ?: q8 B" M* L4 c! x
wenergys=sum(s(index-small:index+small).^2);
6 `6 j, u3 e, ~4 E/ W! R; [middle=150;" P) S' x1 ~- d- Z4 G( C3 W* Q
wenergym=sum(s(index-middle:index+middle).^2);7 r5 F0 E. b4 g$ V( W
large=200;# _% T, a* J$ ~( g
wenergyl=sum(s(index-large:index+large).^2);
% N: e' X; i& L+ X6 Zenergy=sum(s.^2);
2 [  ~" e1 E5 o: ?$ o6 Mratios=wenergys/energy;
7 a! F1 q0 q1 Z% d! qratiom=wenergym/energy;
) G7 I1 g/ Z( n% _% o- A, oratiol=wenergyl/energy;
* b2 t! m& \5 p+ a* r5 N( pm=max*100000;* [) ~/ t  N) t; a& l" t
ws=wenergys*100000;4 \9 q! ^+ g# ~+ D- y8 B
wm=wenergym*100000;
+ G: {1 F8 z' O! `! o% n, swl=wenergyl*100000;5 X/ B' e4 j  M1 l( g
e=energy*100000;
8 F7 @7 a% R3 [a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀+ c# b6 y' |* d% z4 g+ c, d  L$ ^
也就是执行了for循环了! `; w  J$ K0 W4 i  H5 N! x8 I* X
可能计算机计算速度快  我们感觉不到等待的时间    : @" i* ^3 f' h  X( ~6 h
如果是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还没接触过5 f; |/ s2 `  L2 b& e. I
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
  A0 b/ `# u1 H6 L$ w2 B2 d! z3 h* `5 u
提示也正好是indices must either be real positive integers or logicals( }* F. w/ y2 g1 V1 ~% l; {* ~! m
你再修改下随即数?
回复 支持 反对

使用道具 举报

发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals2 R8 Q( w1 W6 W% c, L( k0 V
R$ P# O9 A3 s
5 g9 m7 a' v$ ^3 Y/ q, M; K中文解释:下标索引必须是正整数类型或者逻辑类型
1 c( t( c5 s$ H; yW7 b# p# ]3 I' k8 m- }+ [4 `; f$ W* ^# l4 B, r
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始9 F& n! b( O# T2 K

# c. B/ c, t( Z5 f
2 K$ u) ]5 q$ j! K这是网上搜到的资料   借鉴下
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-1 12:19 , Processed in 0.079297 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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