机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
1#
发表于 2008-8-25 11:14:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!5 Q4 p2 m; F; M; g& Z9 ?( }; }) Y
s=zeros(1,5000);
* H2 v6 P  P! i4 I/ r$ _$ ys=rand(1,5000);
" Y  q" G' w- l% J% i2 d. bn=length(s);
0 H: `2 ~6 n( S* s3 r' {) Emax=0.0;0 {* k- y7 m. B0 W, T1 e
index=0;
7 Q; u4 o) T) Q6 c3 o& sfor i=1:n
- t9 Z& G9 S* P( _1 d if  max<s(i)& T5 h0 E" g0 G3 h: g/ ]  V, U
     max=s(i);+ U% e% `0 S- A8 u# b
     index=i;
1 z! D! {( i- E2 R8 Z* |; }$ q% v  else
* Y/ ]" X5 k/ b  end
4 k1 {, a- g/ N3 h% Tend   
0 y, j/ }9 r, a: W- {small=100;
& k7 `2 R/ u7 C+ dwenergys=sum(s(index-small:index+small).^2);
. l" t6 l/ f8 o& ?middle=150;
- [5 \5 q* F* h2 Fwenergym=sum(s(index-middle:index+middle).^2);
& S( _. r9 N+ R" A* l2 u* slarge=200;+ a  U, s6 l, V7 ?' o2 g
wenergyl=sum(s(index-large:index+large).^2);2 j" j* Z. a7 F
energy=sum(s.^2);
' }" o' o! n" i9 N0 O$ i3 ?ratios=wenergys/energy;2 D+ j6 \! i& T
ratiom=wenergym/energy;! y9 L! s# x9 h  A6 x9 ^
ratiol=wenergyl/energy;
. l2 ?; l  _2 w+ Y! }: Im=max*100000;
% j1 [& e' P$ E3 `; d& t1 ows=wenergys*100000;
- ~5 D: K. T0 pwm=wenergym*100000;
3 \/ ]2 E$ Q, q. O/ _2 ], X) kwl=wenergyl*100000;
. B$ j/ n! B. H3 r  xe=energy*100000;
* ?2 N2 X2 d6 j- Aa=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

5#
发表于 2008-8-29 17:23:09 | 只看该作者
Subscript indices must either be real positive integers or logicals. [3 d1 d1 [/ C
R$ P# O9 A3 s0 |. N6 c. ]% p, \( M* ?& i: _( h
中文解释:下标索引必须是正整数类型或者逻辑类型
! A9 Q5 E. e  h3 g$ N/ qW7 b# p# ]3 I' k8 m
! I# m! s* U( w& E出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始- ~& s$ i/ R" P# j

& z; d( X( M7 N* u* v' |/ Y& }3 O+ C9 J# J7 ?! O  W% e
这是网上搜到的资料   借鉴下
回复 支持 反对

使用道具 举报

4#
发表于 2008-8-29 17:20:28 | 只看该作者
labview还没接触过! T  A9 o( T) H" V, ?; S7 f( o
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
8 e* M% m" D# A, ]; W; o' e( B& R& E& e
提示也正好是indices must either be real positive integers or logicals1 t  S6 w# j+ n5 j+ w! s' F
你再修改下随即数?
回复 支持 反对

使用道具 举报

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的兼容做的不够好。
回复 支持 反对

使用道具 举报

2#
发表于 2008-8-26 13:20:56 | 只看该作者
求一维数组s的最大值和索引位置 max 和index可以求出来呀9 R% |' ^! i7 {+ }! _
也就是执行了for循环了
2 ^6 E4 v; M4 a; a7 ]8 ~可能计算机计算速度快  我们感觉不到等待的时间   
3 R, ^: T8 w: T4 ^* \& _% ^5 L: H如果是5000个数字迭代的话肯能时间很长

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-9 03:45 , Processed in 0.052665 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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