机械必威体育网址
标题:
这段程序出错,不清楚怎么改
[打印本页]
作者:
mouseyuanhao
时间:
2008-8-25 11:14
标题:
这段程序出错,不清楚怎么改
下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,不知道是为什么。请前辈们帮忙看看,不胜感激!
2 g2 B* X0 ]7 ]7 S
s=zeros(1,5000);
2 u6 X9 X& f8 T4 l
s=rand(1,5000);
! k2 u; X2 m# n: V a
n=length(s);
& Z5 j. @7 v9 M6 `$ y" f
max=0.0;
5 [$ T: A8 [ ~* ]2 Z/ L& W
index=0;
( E1 \% K _+ p/ A4 w
for i=1:n
6 ^$ A; }' B4 ?
if max<s(i)
0 c$ p7 O3 {8 d8 e
max=s(i);
4 }4 L9 d" L" t; i+ H! q/ \' k
index=i;
4 Z4 i8 j" {0 ^7 r5 i `% _
else
! w) b3 {% o3 l# x. K E3 x, K
end
+ G+ g4 J/ P, m9 L2 Z
end
% f$ Q) J1 V2 |" p
small=100;
" F/ L/ H! w6 ?, \* G u$ C
wenergys=sum(s(index-small:index+small).^2);
% }6 }, \" j$ v7 |# w
middle=150;
4 O2 B- i3 s1 Z4 P
wenergym=sum(s(index-middle:index+middle).^2);
; b5 B8 d) Y, B0 c3 V8 B9 ]
large=200;
( b8 p" z% S' a
wenergyl=sum(s(index-large:index+large).^2);
z' m' V0 [2 w7 r/ p& m
energy=sum(s.^2);
4 D$ ~9 z( Y: }( L/ l6 C. f9 U
ratios=wenergys/energy;
" J/ h9 l& L( G* U$ T
ratiom=wenergym/energy;
$ \) f b- Q9 ^) r
ratiol=wenergyl/energy;
, r% }' V7 p5 @
m=max*100000;
) H. P3 k8 n4 P% b! \& [
ws=wenergys*100000;
; `- c+ J3 v7 X+ R& k( A, w
wm=wenergym*100000;
3 C+ g! Z0 G0 I$ O r
wl=wenergyl*100000;
. G% b# i1 f0 k3 Q% n
e=energy*100000;
! w) @6 E8 A, W3 k. U& U9 l- _1 g( @
a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol];
作者:
小土匪
时间:
2008-8-26 13:20
求一维数组s的最大值和索引位置 max 和index可以求出来呀
% n/ ?8 @" }* G, X3 K- `
也就是执行了for循环了
6 H5 q3 s" H0 o9 ?4 Y5 L
可能计算机计算速度快 我们感觉不到等待的时间
' b2 B( v& a) ~
如果是5000个数字迭代的话肯能时间很长
作者:
mouseyuanhao
时间:
2008-8-28 16:09
标题:
回复 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
labview还没接触过
; S) p7 \' N% o( b8 U# @2 X+ Z% i
是不是取随机数的时候 最大值的标号正好小于200了 这样的话wenergyl=sum(s(index-large:index+large).^2)这步是不是会出错?
" ~# C* n; c- Z8 n! [& ]' P
+ Q) f4 O; a, w8 B) B4 Q
提示也正好是indices must either be real positive integers or logicals
) u; t& f1 X' c8 y* Q# [) U5 o
你再修改下随即数?
作者:
小土匪
时间:
2008-8-29 17:23
Subscript indices must either be real positive integers or logicals
! C( s* G9 r4 h0 X7 U {7 j$ d
R$ P# O9 A3 s
# r6 |# N3 D' E: Q* u- Y) P$ d. V
中文解释:下标索引必须是正整数类型或者逻辑类型
: c) a3 q' M- ^' q5 b% D3 P. g, j
W7 b# p# ]3 I' k8 m
6 {2 i7 V" x, g2 x0 a
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab 的语法规定矩阵的索引从 1 开始
! V0 I4 P" Y$ B9 Y! _
* a: D& G9 k! i! p9 }
i$ B% W3 q# K, q6 L
这是网上搜到的资料 借鉴下
欢迎光临 机械必威体育网址 (//www.szfco.com/)
Powered by Discuz! X3.4