机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
1#
发表于 2008-8-25 11:14:56 | 只看该作者 回帖奖励 | 倒序浏览 | 阅读模式
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
( d4 S+ F7 o# X* d us=zeros(1,5000);' l: O- a. D2 p- z N
s=rand(1,5000);, ]' }, u$ q, ?( t c5 `9 t9 e
n=length(s);: {! t$ U3 p1 y0 t9 n$ s+ e
max=0.0;
) {3 D. ]( M) ~' @' Hindex=0;
& F% A; O1 H: L# k; P, N5 Nfor i=1:n
( C' A9 A! s( h5 E a% g! Tif max5 n9 Z5 I# F! g+ L1 lmax=s(i);
9 O8 @9 |* C hindex=i;9 l" @8 Y( {. Z' P% u, e
else
# z. X* C) i% I8 b) x0 r" S. u Zend{/ U ~6 c: a- k. j9 h" @
end( M \# `* v) u6 e" h. V1 f8 ~
small=100;N0 M$ @. G1 w0 ]
wenergys=sum(s(index-small:index+small).^2);4 v( G4 E/ s* n) L
middle=150;& A+ e) K/ z' ~, z2 { i% L- G
wenergym=sum(s(index-middle:index+middle).^2);& L7 ~" z) U# O; P% G9 \' q
large=200;
2 H: ~/ L6 S! Iwenergyl=sum(s(index-large:index+large).^2);# k9 m6 s) ?7 j6 }" u1 r/ i
energy=sum(s.^2);
( E# ~( c9 C( I6 V3 I# d3 |ratios=wenergys/energy;
! m, a/ ?$ A% V5 Zratiom=wenergym/energy;% Z' X8 r/ K0 \6 X% u: R, P
ratiol=wenergyl/energy;2 M3 ~5 R7 M" q0 a# I
m=max*100000;+ v) G8 u9 U' C9 g
ws=wenergys*100000;
7 f1 ?4 x1 y' h3 @5 v; `( `, f# }wm=wenergym*100000;+ s+ x/ N( j+ }, ~# p: M
wl=wenergyl*100000;( |7 s$ V$ x) C! k& \
e=energy*100000;
+ W: d0 b9 a5 l% K5 {; w, R) D. K3 ta=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
2#
发表于 2008-8-26 13:20:56 | 只看该作者
求一维数组s的最大值和索引位置 max 和index可以求出来呀
" R8 f% K9 s+ Z: d4 t也就是执行了for循环了
" C$ m( M7 Z8 u可能计算机计算速度快 我们感觉不到等待的时间
0 E1 K' i% }8 w如果是5000个数字迭代的话肯能时间很长

评分

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

查看全部评分

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的兼容做的不够好。
4#
发表于 2008-8-29 17:20:28 | 只看该作者
labview还没接触过
! O0 b$ I& q1 o是不是取随机数的时候 最大值的标号正好小于200了 这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
2 |7 K$ h" O2 K6 Q
1 L0 }7 K0 s6 s3 W提示也正好是indices must either be real positive integers or logicals: e% c+ W1 ?: P, Q
你再修改下随即数?
5#
发表于 2008-8-29 17:23:09 | 只看该作者
Subscript indices must either be real positive integers or logicals
, x$ h3 F6 L' x: oR$ P# O9 A3 s- d0 o- L. k( _
中文解释:下标索引必须是正整数类型或者逻辑类型4 `0 }$ ]; A) ^8 C
W7 b# p# ]3 I' k8 m
2 {6 F3 W* Y x3 _9 s; s' H出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始S9 f+ j5 z9 [# `

+ [4 H( z6 Q$ A' I7 ?9 v- X2 u' U' J
这是网上搜到的资料 借鉴下
您需要登录后才可以回帖 登录| 注册会员

本版积分规则

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

GMT+8, 2025-1-9 18:15, Processed in 0.055033 second(s), 15 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

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