Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-08-25
年龄: 37
帖子: 1
声望力: 0 ![]() |
![]()
我在LABVIEW中插入MATLAB脚本对信号进行分析。但是出现错误(subscript indices must either be real positive integers or logicals)。我不清楚怎么修改。下面是我编的M文件的程序,主要是求一维数组s的最大值和索引位置,然后加不同宽度的窗,求出窗里信号能量后与总能量求比值。我编的程序中s是小波包分析的高频信号,为了简化程序段,我用5000个随机数来代替。编译的时候for循环好像根本就没有执行,index的值好像一直都是0.不知道是为什么。这两天老师还催着要实验数据。请前辈们帮忙看看,不胜感激!
s=zeros(1,5000); s=rand(1,5000); n=length(s); max=0.0; index=0; for i=1:n if max<s(i) max=s(i); index=i; else end end small=100; wenergys=sum(s(index-small:index+small).^2); middle=150; wenergym=sum(s(index-middle:index+middle).^2); large=200; wenergyl=sum(s(index-large:index+large).^2); energy=sum(s.^2); ratios=wenergys/energy; ratiom=wenergym/energy; ratiol=wenergyl/energy; m=max*100000; ws=wenergys*100000; wm=wenergym*100000; wl=wenergyl*100000; e=energy*100000; a=[m,index,e,ws,wm,wl,ratios,ratiom,ratiol]; |
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2008-12-20
年龄: 41
帖子: 5
声望力: 0 ![]() |
![]()
因为Matlab中求最大值的函数是max,你最好不要在程序中与函数名相同名称的作为赋值变量,所以你最好把你程序中的max等用别的字母替换,T、G什么的都可以。
其实你要求矩阵s的最大值,只要max(s)就得到了,不要循环这么麻烦:smile: |
![]() |
![]() |
![]() |
#3 |
初级会员
注册日期: 2008-12-20
年龄: 41
帖子: 5
声望力: 0 ![]() |
![]()
你的错误与LabVIEW没关系,是MatLab自身编译出错,最好先对m文件在Matlab中运行,验证正确后再放到LabVIEW中
|
![]() |
![]() |
![]() |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[紧急求助]应该是一个简单的问题,但是折磨我很久~涉及到字符串表达的一个问题 | yanxuan | MATLAB论坛 | 7 | 2008-11-18 01:44 |
[讨论]MATLAB在土木工程中能用得着么 | cyxsky | MATLAB论坛 | 4 | 2008-11-17 08:13 |
[求助]S_function矩阵变量的保存与更新 | 凉茶悠悠 | MATLAB论坛 | 0 | 2008-11-15 20:36 |
[求助]请教前辈如何实现SIMULINK下对数据库(比如说Mysql)的连接? | flying__sky | MATLAB论坛 | 0 | 2008-11-10 00:28 |
自适应滤波lms算法中输入信号的自相关矩阵R | 蓝山咖啡7258 | MATLAB论坛 | 0 | 2008-11-06 19:40 |