找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4300|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!" ^9 g5 E$ i+ B( f
s=zeros(1,5000);
8 q( Z2 S+ A- X9 B, ^s=rand(1,5000);
0 n9 K% L/ V' V7 ?+ [- y# r5 t/ dn=length(s);9 R0 b6 Q& h& H9 ^
max=0.0;
* H2 Q+ T! t3 b2 u& j! p9 Lindex=0;
$ [# ]$ {0 X, c/ Bfor i=1:n
- [) k: z0 ]% k- n if  max<s(i)* x+ g& G( m9 J8 Q' _2 j1 y
     max=s(i);( V2 e" h4 f- s& l/ F
     index=i;
- @: `6 U' }1 r- ^+ l" q! s  else( z9 Q7 m: U5 x: n0 t
  end+ \( T& B+ T3 d' C% D1 d, F5 A
end   $ d4 _0 B# ?9 J* \5 e/ [# j1 T
small=100;6 x# U4 \& [. B7 z
wenergys=sum(s(index-small:index+small).^2);
* G# y" B0 X  smiddle=150;
' a' w  E" @( l* Kwenergym=sum(s(index-middle:index+middle).^2);/ T" f3 P2 w" m% d- y8 N
large=200;
4 O( ]' |- c6 F* Z# Ywenergyl=sum(s(index-large:index+large).^2);
2 R1 N5 s3 y1 d2 W% Y5 j$ S1 menergy=sum(s.^2);9 U  J( L4 w: P9 ~! h0 ?
ratios=wenergys/energy;' G( L/ y' O( y4 t. u8 ^+ }" W4 q; i# G
ratiom=wenergym/energy;% S: _1 T; W) j! S2 @! y0 H( E
ratiol=wenergyl/energy;9 R; d4 L& X0 F3 F
m=max*100000;
6 X: M* r2 r; \5 Wws=wenergys*100000;8 A6 i, h  M: u7 z' b) X, O
wm=wenergym*100000;
$ {7 w: y: o2 _. nwl=wenergyl*100000;6 O& Q' T$ _3 |; A4 \7 O* d4 J& U
e=energy*100000;  s: t4 B3 R$ ?  @4 N
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀! ~. T/ O; J' e# c6 {3 P& s
也就是执行了for循环了
* q+ G! |- e' P3 G5 O+ n! Z' ^可能计算机计算速度快  我们感觉不到等待的时间   
9 i4 S  l" Z# V7 b5 P7 Z0 I如果是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还没接触过0 [+ a+ D! u, U/ w+ i, P% e
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
: s7 C1 ]- Z  S* I' r/ z/ u! z, }- q7 n4 f* c
提示也正好是indices must either be real positive integers or logicals) v* a. }( u- S' S/ a; t6 b
你再修改下随即数?
发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals: |7 V$ y2 f+ d: ]
R$ P# O9 A3 s, p  M) z9 A3 s' W7 A3 ?, C9 \
中文解释:下标索引必须是正整数类型或者逻辑类型
6 E) N' N1 m$ Y: s, `5 G  [: DW7 b# p# ]3 I' k8 m
& S: F, Y, ?& z, I/ B) g9 h) n5 W出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始
) D$ X' z" ~, P+ Q5 X: A
" x3 f) l1 h* h6 v3 L7 [# e& \( K' e. V" s+ X1 _: F4 o8 J+ Q
这是网上搜到的资料   借鉴下
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-13 18:14 , Processed in 0.058561 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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