找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4267|回复: 4

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

[复制链接]
发表于 2008-8-25 11:14:56 | 显示全部楼层 |阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!: w3 z5 ^/ K9 G3 D! h% T
s=zeros(1,5000);2 C/ }1 a1 R  W2 \: G/ \
s=rand(1,5000);
! [* P  X2 Z: E, E5 _* o8 wn=length(s);
7 V! [  v3 X) nmax=0.0;4 ~) K" K4 S4 Q8 [
index=0;
- j  _8 k3 C  wfor i=1:n; w- a9 o6 X  _+ V
if  max<s(i)
( b4 r! h* z* l9 ~     max=s(i);
, I1 m! Q: S) ^9 K     index=i;
# p! A6 o* n# j5 }$ {4 H  else) F" k" M6 m1 q7 \2 ^
  end9 r2 L2 _' P9 Y# \
end   ! c6 h5 i7 l9 q6 S! I
small=100;& }) B  {' N. s4 C# k$ l
wenergys=sum(s(index-small:index+small).^2);
0 o. I1 [$ h, F2 Amiddle=150;
5 s) o3 u& m. J# Z$ r: gwenergym=sum(s(index-middle:index+middle).^2);5 x  m4 ~3 y. f# x9 Q; w' L8 @
large=200;
( h- g6 T  {8 A) Kwenergyl=sum(s(index-large:index+large).^2);9 s  C4 y  Z1 c6 B. s, e7 B1 J
energy=sum(s.^2);
$ k* _4 _+ o3 Yratios=wenergys/energy;1 |" N8 C) j# W5 m8 d5 d3 I- l
ratiom=wenergym/energy;1 Z6 x, Y. X) M  q5 J! P
ratiol=wenergyl/energy;
8 f7 P6 `! w  J  {4 Jm=max*100000;
0 B+ ^- d( y' c: a0 v0 aws=wenergys*100000;
, q  i& @; d) Ywm=wenergym*100000;
' Y0 N3 j7 T$ N" ^6 e* v4 k$ _wl=wenergyl*100000;
- x: |1 e; k9 k9 W' M$ f1 fe=energy*100000;3 y  B% ^+ L: c6 T3 k
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
回复

使用道具 举报

发表于 2008-8-26 13:20:56 | 显示全部楼层
求一维数组s的最大值和索引位置 max 和index可以求出来呀
, }/ K; r' A' a  s* T2 Y也就是执行了for循环了
2 c# {2 r( x; m可能计算机计算速度快  我们感觉不到等待的时间   
% R  Q1 ^6 @+ v4 z% S. a如果是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还没接触过
! I- }: _1 |' P& `: r! j是不是取随机数的时候  最大值的标号正好小于200了  这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
! R( u1 ~: }* F  O; q- d8 ?% d, t+ B# s' E! z4 o
提示也正好是indices must either be real positive integers or logicals
( c5 h/ x5 _3 P9 C$ z' @) O$ x你再修改下随即数?
发表于 2008-8-29 17:23:09 | 显示全部楼层
Subscript indices must either be real positive integers or logicals. F4 v- y2 R9 `
R$ P# O9 A3 s
* ?0 b/ x; ^3 L' j- c; w# F中文解释:下标索引必须是正整数类型或者逻辑类型6 X% `- O* |: c1 H; x' F5 o6 n
W7 b# p# ]3 I' k8 m
) s, t1 j) }# c" Y! n5 ]出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始
2 T; F1 j; ^8 m* O+ V. j- ?: J5 o$ L5 Y- f1 u
6 y+ r+ N1 Y: ]& [- h) \* Z1 \% D* v
这是网上搜到的资料   借鉴下
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-6-16 21:38 , Processed in 0.087491 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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