找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4449|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
1 e7 v  w, q' R, H. cs=zeros(1,5000);
' N/ L* q1 C. U2 k* w) _! m/ V) Ms=rand(1,5000);
% v4 E7 \1 H6 K" r, e% ~4 }4 un=length(s);, Y" j! I! W( }- m1 f, l' F( j
max=0.0;% ^+ ?: [7 R! B& a: o
index=0;
( ?% ^- e/ y; J5 o& hfor i=1:n- o5 U7 ?  s- d3 p6 u7 A2 Y- I
if  max<s(i)
3 h0 u7 k. g3 a. a+ j" ~9 ]# d! o2 U) C     max=s(i);8 A* H$ a) O4 C, s4 Z
     index=i;
3 r- p( j& C6 p2 H" ?; V  else
2 e  ]! c: |2 L9 T# h  end
* }4 X+ k- \2 l: G, k5 `end   $ Q2 r5 V  q; I3 b& Z( V4 @4 Q
small=100;8 d" E: ?9 _6 L& G7 v, ]
wenergys=sum(s(index-small:index+small).^2);
+ A  {" m/ \4 F6 e& D* Lmiddle=150;! C2 a! Z% K8 a; S* B4 M
wenergym=sum(s(index-middle:index+middle).^2);) J6 x1 Q% ]' u) _: h
large=200;/ k" b- @, f& T$ `) M
wenergyl=sum(s(index-large:index+large).^2);
% U* }8 F) |% |3 _6 {( _energy=sum(s.^2);, V: ~1 [0 Z9 |8 z  H# l$ M
ratios=wenergys/energy;/ F& Q! r$ B! M& y5 p# N& z
ratiom=wenergym/energy;! h9 }* r  {) G$ z9 F7 N( x
ratiol=wenergyl/energy;
) L4 a5 ~+ s6 ~% S/ C9 l! Im=max*100000;7 P# ~+ y) S7 E9 H* w' [1 r# w
ws=wenergys*100000;) l, K0 K/ p* e5 G* Q8 P# G
wm=wenergym*100000;
1 w: `4 W2 V2 ]: n4 xwl=wenergyl*100000;
- D( Y( m6 A' A& Be=energy*100000;
7 I: v  W/ k& d) W% c) c, _# z+ Oa=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀
' E" |# j1 |  E也就是执行了for循环了3 E. f( S3 X% C
可能计算机计算速度快  我们感觉不到等待的时间   
2 N% B- M& B3 B如果是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还没接触过9 ]. }0 z% t. s
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?8 n0 z' m: F2 y4 D- [& E) D

( I# a& L) K0 \" V& _. U8 l提示也正好是indices must either be real positive integers or logicals$ W/ v0 l/ s9 r  C9 U* s
你再修改下随即数?
发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals
' J6 `8 g3 U. Q5 M, GR$ P# O9 A3 s4 B  T) y8 D' U8 v- O+ Q
中文解释:下标索引必须是正整数类型或者逻辑类型
, x% b, z2 P( _$ V( g. kW7 b# p# ]3 I' k8 m
' J9 M3 n5 V; l1 T$ B. w; @0 f- u% P出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始( O! T0 G! i5 m  g

5 A6 C7 c* X+ \5 Y4 ], M% b8 k0 X8 m- I6 j0 h+ S
这是网上搜到的资料   借鉴下
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-10-16 10:28 , Processed in 0.057658 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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