|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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
将源程序copy至famos的sequence栏,运行即可。
原始数据为testdata如下图所示:
处理后的结果名为PeakToPeak,如下图所示:
欢迎大家一起探讨该问题。
|
|