声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1864|回复: 2

[其他] 关于求取峰峰值的小程序

[复制链接]
发表于 2009-8-26 10:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
许多人想测量计算得到信号的峰峰值,并将其和对应的时间的波形和值显示出来,下面是用Famos程序实现的。首先生成一个虚拟的原始信号testdata,处理后的结果名为PeakToPeak图,源程序为:
; Create Test data
;产生一个从0开始,间隔为0.1,总共3000个点的时间序列
_t = ramp(0,0.1, 30000)
;产生一虚拟信号,其中PI2=2*PI
_a1 = sqrt(2)*2*sin ( _t *(0.3*PI2)*(_t/400+1) )*(_t/1000+1),
xdelta _a1 0.001;改变间隔为0.001
;通过带通滤波,并附加一个谐波和直流分量20,创建原始数据testdata
testdata = 5 *filtbp(_a1,0,0,2,150,200) + 0.9*sin ( _t*(0.7*PI2) ) + 20
;删除中间变量
delete _t;
delete _a1
;定义单位
yunit testdata N
xunit testdata s
testdata[1000] = 12
testdata[2000] = -10
testdata[3000] = 13
testdata[3001] = -7
;光滑处理,利用hysteresis滤波器
testdata = hyst ( testdata, 0.5 )

; calculate peak to peak values:

_MinPos = xMax(-testdata,-1e35);最小峰值点所在坐标
_MaxPos = xMax(testdata,-1e35);最大峰值点所在坐标
_size = min ( join ( leng?(_MaxPos), leng?(_MinPos) ));取最大值点数和最小值点数的最小者
_MinPos = leng ( _MinPos, _size )
_MaxPos = leng ( _MaxPos, _size )
_MinAmp = value ( testdata, _MinPos );求取各最小值
_MaxAmp = value ( testdata, _MaxPos );求取各最小值
PeakToPeak = xyof ( _MaxPos, _MaxAmp - _MinAmp );绘制峰峰值时域图
;

; clean-up

delete _MaxPos
delete _MinPos
delete _MinAmp
delete _MaxAmp
delete _size

将源程序copyfamossequence栏,运行即可。
原始数据为testdata如下图所示:

原始数据.JPG


处理后的结果名为PeakToPeak,如下图所示:

结果p2p.JPG

欢迎大家一起探讨该问题。

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2009-8-26 16:39 | 显示全部楼层
很好的东西哦,我看了看你的程序,好像实现的语句很简单哦,不像是用通用语言C 什么的实现的吧,后来仔细看了一下,好像是用一个famos的软件实现的吧,以前用过那个famos软件,很不错的软件,应该是德国IMC的后分析处理软件实现的吧,楼主是专门做数据分析处理的,他们的硬件产品怎么样,听说用的很好的,就是没有用过,有机会给介绍一下imc的硬件哦,我也是听我的同事说的,因为我只做后分析处理用了,前面的数据采集,都是他们拿着德国imc的数据采集设备去用的,他们说很不错的数据采集设备,携带方便并且不重,用起来很方便,
发表于 2015-4-14 18:27 | 显示全部楼层
學習了!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-16 09:45 , Processed in 0.097918 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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