机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3770|回复: 4
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2008-8-25 11:14:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!8 F3 V- t# r' q! i
s=zeros(1,5000);- h+ e* Q4 {2 x! h
s=rand(1,5000);
6 d$ p: ~1 |3 B% |; u% en=length(s);
" a' O0 R; Q7 Umax=0.0;3 s) X# T1 l2 }
index=0;
4 q' b9 o/ C% b2 H! E4 Ofor i=1:n
# ~, f: g, D+ S; b: n, E if  max<s(i)) F  S$ M: `& T0 y- c
     max=s(i);& R6 X  M# R! R! c
     index=i;
2 ]# i0 s# o! N8 J, [  else! W* y3 p: F' n$ A2 g. l
  end# J0 H! p5 K7 a& ]- e% l1 S( _) I$ X
end   
7 c2 r: z: q: [3 A: Ismall=100;
' [" c" K6 r5 }5 i- }, A4 b7 cwenergys=sum(s(index-small:index+small).^2);
. T8 _7 Q6 }) Q  S& v9 Wmiddle=150;; X* E: B) k/ ]3 |
wenergym=sum(s(index-middle:index+middle).^2);. Y( ]' c1 H2 R- U9 @: v9 G% b
large=200;
3 H/ H: M. X2 ?8 M# _6 x1 e/ wwenergyl=sum(s(index-large:index+large).^2);
0 m! P" }  c/ F* oenergy=sum(s.^2);4 g2 K9 p, L6 \
ratios=wenergys/energy;
3 ^7 Z$ _1 Z; A4 \ratiom=wenergym/energy;
9 j- `( U2 J  p: [3 F7 P; rratiol=wenergyl/energy;
5 ~/ n4 h0 M/ A! k- N" w% lm=max*100000;
' E$ s6 a( r; M* S: iws=wenergys*100000;  q0 F- v3 q9 v! I. a, I
wm=wenergym*100000;  c6 h4 K" B/ B  i5 u: \& p  ~
wl=wenergyl*100000;
7 x2 B, Q$ D* X% Ze=energy*100000;
3 q  Y' _$ n* }/ a8 N- ka=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

2#
发表于 2008-8-26 13:20:56 | 只看该作者
求一维数组s的最大值和索引位置 max 和index可以求出来呀2 H0 f  ^- T% n) i9 g! ^) d
也就是执行了for循环了6 c" U  c* E( L# p% f5 Y4 k
可能计算机计算速度快  我们感觉不到等待的时间   
$ m8 {) d0 i9 c5 L7 C如果是5000个数字迭代的话肯能时间很长

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 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的兼容做的不够好。
回复 支持 反对

使用道具 举报

4#
发表于 2008-8-29 17:20:28 | 只看该作者
labview还没接触过
% d+ v9 V, w7 l2 A) {5 J, ]5 r6 O  r是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
; ]- ?0 H4 j$ R! s6 }/ h
' Y4 g% q/ S8 n提示也正好是indices must either be real positive integers or logicals, s: U8 K! J+ H* ^1 d' ]
你再修改下随即数?
回复 支持 反对

使用道具 举报

5#
发表于 2008-8-29 17:23:09 | 只看该作者
Subscript indices must either be real positive integers or logicals
$ \# T- R1 A" @( e* A! |R$ P# O9 A3 s/ }+ ?9 Q6 {$ Y1 Y
中文解释:下标索引必须是正整数类型或者逻辑类型/ n, v* \$ X; m* d2 W6 l& f
W7 b# p# ]3 I' k8 m: e5 d( k) u( c, _1 }
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始$ K& H( r& Y# y/ O! r0 S
) M, _: p" W- E
4 {( _1 @2 ~0 D+ F* m, G/ Z
这是网上搜到的资料   借鉴下
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-1-8 11:07 , Processed in 0.056235 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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