机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3434|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
9 I" v+ l4 C3 X+ U) Ps=zeros(1,5000);' c, J* _' I6 i7 E  M! F1 f, K) o9 W
s=rand(1,5000);
2 l2 n0 ], F1 B, S) N# a4 Hn=length(s);3 M+ M3 v6 e! k; b' R
max=0.0;. ]' ?  p7 E( j- H5 E
index=0;
" p; {. _( A( t: z$ Lfor i=1:n
4 k$ R9 |4 y& ~" O if  max<s(i)
4 H' T4 G3 K9 N. T     max=s(i);
% O/ i$ o% m. \2 w4 \     index=i; & H! A% l; Z& K! H1 b) x& _
  else; F2 b; n- S- H  U0 S
  end
5 \  n7 U% |( X0 Z4 Q: p2 _end   & R* K$ v7 A/ e5 c( s
small=100;
% T# G1 [' M6 ywenergys=sum(s(index-small:index+small).^2);2 ~! B1 Y" n$ E- \/ `5 b
middle=150;" {5 `4 {/ `+ O5 [8 I* g: K
wenergym=sum(s(index-middle:index+middle).^2);+ ^* o: ?1 E- T5 A7 L& @! O
large=200;
# D( |0 J9 W8 q: E4 j3 x4 ?* J4 Lwenergyl=sum(s(index-large:index+large).^2);
, r8 d( N( l" m" w8 T! t. E8 ]+ ^' nenergy=sum(s.^2);
7 J1 ]" ]0 S' |% q; [# Z# i: Qratios=wenergys/energy;) |* O8 s2 E0 p# t, A4 _( |3 g- w
ratiom=wenergym/energy;3 T9 X1 l; U% a
ratiol=wenergyl/energy;
* C7 ?/ `7 P2 {: ?: h: K9 w. d: `m=max*100000;0 X3 u- l4 U+ p
ws=wenergys*100000;, w5 `6 w( y2 M% @1 Q) l7 }" I
wm=wenergym*100000;# X, Q# q0 {+ R: ?: W" d
wl=wenergyl*100000;; U" j: y+ [. u9 H0 O
e=energy*100000;+ Q% Q6 K! z8 g9 K% @3 v* V0 l
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀: ]; T5 M8 {1 z6 _& m
也就是执行了for循环了5 M7 P' j( \$ E; W
可能计算机计算速度快  我们感觉不到等待的时间   
; ~7 j2 {- d- y  ?% H: r. }  N如果是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还没接触过* d  b) a  a  X  l7 m
是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
% n1 A- g. b* k( M- \. @* ~+ i9 K5 D0 e
提示也正好是indices must either be real positive integers or logicals
/ _$ k4 E3 |9 t0 U6 N4 K, `你再修改下随即数?
回复 支持 反对

使用道具 举报

发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals
% F) v$ b2 c' C: c) X4 ]R$ P# O9 A3 s
3 E7 `5 J; i( s# U. |- u中文解释:下标索引必须是正整数类型或者逻辑类型1 L- k3 u: J! o
W7 b# p# ]3 I' k8 m" `9 r# T1 M0 }8 R1 |- p) n8 o
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始7 J% ?% [  M' d* K9 v+ F
6 S; f2 H$ w( S
: X# A" F6 P! d$ V
这是网上搜到的资料   借鉴下
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 00:29 , Processed in 0.052347 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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