找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4466|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!) Z" q$ b# Z4 D; F4 b4 E- b' X
s=zeros(1,5000);
4 {- e5 t  g% }% J6 o( {/ |9 E/ Ys=rand(1,5000);# e) o& K, u" d8 ]. n
n=length(s);
& q+ M) O! b! N. s: t2 a, {max=0.0;
3 x6 b1 `+ ^$ z3 eindex=0;& J, p+ m0 \( }, |$ n. q/ O8 Q
for i=1:n+ o, c. b, ~$ v: q' B. k
if  max<s(i)
5 v$ I6 k6 e2 J& s     max=s(i);
/ p5 V3 U+ u0 A5 B* Y+ x: r     index=i; 6 N! H$ ^) U9 U/ n7 ^
  else
& a5 e. S. k5 n9 P  end
1 C3 z5 t! c. K& r7 k8 @/ u7 |, ]end   
' d6 W7 ^$ l6 [% X5 E) D2 v( Z2 wsmall=100;9 q2 h& b6 e" b0 c$ z" Y" O
wenergys=sum(s(index-small:index+small).^2);
# S, U" k0 F& }7 p4 amiddle=150;
) i+ G0 w# J1 M1 t1 \wenergym=sum(s(index-middle:index+middle).^2);* b8 k* j: `' @4 @% G% n; c' A
large=200;
+ M6 Z! l7 U+ Q0 t9 I" V) uwenergyl=sum(s(index-large:index+large).^2);
3 `' a" G8 x% Renergy=sum(s.^2);, U. Z( D2 N/ D" X  s4 o" Y) Q
ratios=wenergys/energy;9 O/ N5 y- O) I" y
ratiom=wenergym/energy;% \! `. w) \9 |7 R5 j: n( _- i9 j
ratiol=wenergyl/energy;
  ~  }: f$ M+ `8 M1 I* k* R, p+ p5 z. ym=max*100000;+ F5 k6 l6 m( u% D6 i6 [
ws=wenergys*100000;
6 W4 ^5 B2 ]1 T- o3 uwm=wenergym*100000;
8 d: a% e: C) iwl=wenergyl*100000;' q' `& Y2 B9 T8 _$ C: U
e=energy*100000;
. K/ [  m+ c% W+ Z# F& Da=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀
1 v1 z  |& ]0 ]: N$ C4 @+ X" C$ {也就是执行了for循环了1 u& ?. |+ `3 a5 ~
可能计算机计算速度快  我们感觉不到等待的时间    ( B5 ?6 @& x9 s/ a0 w% k
如果是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还没接触过4 m1 O' T. o  x9 B9 [
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
" c- s( ^, I4 Q# m
4 @) l$ P6 S- [" k8 U提示也正好是indices must either be real positive integers or logicals) C# r, O' a. g4 {7 |& A
你再修改下随即数?
发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals
5 z( v- `3 H. f4 jR$ P# O9 A3 s
0 z$ J) `- S  f1 ]中文解释:下标索引必须是正整数类型或者逻辑类型& w, d3 }6 T8 G0 [
W7 b# p# ]3 I' k8 m
" `% }! F# E, U% }5 H" N出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始
; n* Z; N9 _* N4 _- x+ G8 ^
- p5 i5 Q! [3 b* ^& d2 }1 p- c  N
! N% V, x7 X1 i0 m' Z7 x  s" c这是网上搜到的资料   借鉴下
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-10-24 17:57 , Processed in 0.069549 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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