找回密码
 注册
Simdroid-非首页
查看: 91|回复: 1

[信号处理] 峰峰值求取小程序分享, 信号处理

[复制链接]
发表于 2009-8-26 11:00:03 | 显示全部楼层 |阅读模式 来自 上海
许多人想测量计算得到信号的峰峰值,并将其和对应的时间的波形和值显示出来,下面是用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如下图所示:


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



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2009-9-15 00:13:07 | 显示全部楼层 来自 上海虹口区
Simdroid开发平台
谢谢了,又学到一个函数xmax的使用
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-6-2 02:49 , Processed in 0.034619 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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