讨论一个类似正弦波波峰个数单片机统计算法!!!!!!
本帖最后由 guxingganyue 于 2013-4-11 14:23 编辑这个波峰统计的帖子上次我已经发过了:http://www.amobbs.com/forum.php?mod=viewthread&tid=5512859
但上次是要用硬件电路来实现,折腾了好久效果都不是很好,现在改为了用单片机AD采集后分析波形,再得出波峰个数。
单片机:msp430f5438a
系统频率:使用外部20M晶振
AD参数:5M频率,200ksps,12位模式
参考电压:用AVCC=3.3v(注:输入AD的最大电压不会超过3V)
简单描述:某按键按下后ad开始采样(在定时器中以N毫秒(时间待定)为间隔连续采样),按键松开后ad停止采样。按键松开后在很短的时间(1秒内)内显示出ad采样的数据中波峰的个数。
ad采样后的数据直接存到数组buffer0和buffer1中,buffer0存满后就存到buffer1中,如果数据分析比较慢的话,ad有可能把上次的数据覆盖,这个问题暂时不考虑。
下面是我得到的一些数据和把该数据导入到excel中生成的波形,哪位有好的算法能正确的统计出波峰的个数。
我的思路:先存一次数据到数组中,后面采集的数据和上一次存储的数据做比较,如果一样则丢掉本次的数据,不一样的话把本次的数据存到数组中的下一个数据(如buffer0),当数组中存满1024个数据后我再分析:
如果buffer0>buffer0,则把buffer0中的数据放到一个变量max中,再把buffer0和max相比较,如果buffer>max则把buffer中的数据存到max中;如果buffer比max小,则把buffer放到一个变量min中;再把buffer和min做比较,如果buffer比min小则把buffer放到min中,如果buffer比min大,则把buffer放大max中,波峰个数加1。依次类推直到比较完这1024个数据。这里再加一个去出毛刺的判断,即max中的数据比min中的数据大于K(这个值可以调整)后才算是一个波形。
1、比较好的波形1和数据(10进制格式)
2、比较好的波形2和数据(10进制格式)
3、波形很差、数据(10进制格式)
沙发自己做 降低采样频率(滤波)! 在来点波形
有奇点的情况不行吧。所以还得判断波峰波谷之间的采样点数。
最好先做一个低通滤波。 你先得说说 峰值要满足什么条件,比如间隔,幅度值,频率啥的。 asma 发表于 2013-4-12 10:16 static/image/common/back.gif
你先得说说 峰值要满足什么条件,比如间隔,幅度值,频率啥的。
看1楼、4楼的图片即可。大的波峰肯定算,但小的波峰有的算,有的不算。 先做简单低通滤波,然后前后两点相减做差分,找负向过零点个数? {:titter:}有偿提供代码 hhxb 发表于 2013-4-13 23:23 static/image/common/back.gif
有偿提供代码
呵呵,可以先发你几个波形试试 先滤波,整理出大体与采样数据趋势一致,变化平滑,然后再数 上升&下降的个数就可以了。 对的,先滤波。 图3那种情况好像是需要信号放大 TANK99 发表于 2013-4-14 21:17 static/image/common/back.gif
先滤波,整理出大体与采样数据趋势一致,变化平滑,然后再数 上升&下降的个数就可以了。 ...
不是很灵
有的可以,有的不可以啊 不管软件硬件,首先要有一个明确的界定条件。“小的波峰有的算,有的不算”,你打算用个随机程序来做选择?另外大的小的也是相对说法,这样的要求没法做成可靠的软硬件,只能做成“模糊”控制的{:lol:}
最大值定义,可以参考高数里面导数部分的极值的内容,有明确的定义,很容易转换成程序或者硬件 比如你4楼的图,3和4之间有个小波峰,2比他大不了多少,凭什么2就算,3、4之间那个就不算?程序如何判定? 这个貎似在数节拍。 滑动平均+Peak Search Peac Search 做个过过零检测做保证 波形有点像线性ccd。。是不是啊? lyz1900 发表于 2013-4-17 13:50 static/image/common/back.gif
波形有点像线性ccd。。是不是啊?
一种光学传感器上出来的,没有放大等
zhangsusu 发表于 2013-4-17 09:50 static/image/common/back.gif
滑动平均+Peak Search Peac Search 做个过过零检测做保证
多谢,我试试 我怎么感觉像是医疗检测设备上的数细胞。
个人感觉用比较高的采样率(需根据实际情况定)。每次采样得到的数据相同的丢弃。计算当前点斜率。。斜率的每次过零 就是一个波谷或波峰。至于这两个怎么分别 温习下高中功课。 guxingganyue 发表于 2013-4-17 19:34 static/image/common/back.gif
多谢,我试试
处理前先求平均值 把直流分量滤掉 处理起来效果好些 lixin91985 发表于 2013-4-17 20:31 static/image/common/back.gif
我怎么感觉像是医疗检测设备上的数细胞。
个人感觉用比较高的采样率(需根据实际情况定)。每次采样得到的 ...
嗯,现在大概就是这么数的
但不是很准确,有的小波峰多数或少数了 guxingganyue 发表于 2013-4-18 09:22 static/image/common/back.gif
嗯,现在大概就是这么数的
但不是很准确,有的小波峰多数或少数了
那就设置一个斜率的连续两个波峰之间的最小变化量。 lixin91985 发表于 2013-4-18 09:36 static/image/common/back.gif
那就设置一个斜率的连续两个波峰之间的最小变化量。
我现在判断极值点左右两个点的大小 这个需要峰值点的数据有平滑度,否则简单的比较可能会受数据小扰动的干扰,一定是先滤成一个平滑的波。 TANK99 发表于 2013-4-18 20:46 static/image/common/back.gif
这个需要峰值点的数据有平滑度,否则简单的比较可能会受数据小扰动的干扰,一定是先滤成一个平滑的波。 ...
其实不滤波也行,关键是要有一个波峰的趋势就行 sf
yige ......... 楼主问题解决了 ? 分享下解决经验啊!感谢了 ak5136728 发表于 2013-8-14 10:28 static/image/common/back.gif
楼主问题解决了 ? 分享下解决经验啊!感谢了
还没有呢,还在研究中
你怎么也对这个敢兴趣? 可以考虑小波分析或傅立叶变换。 先做包络线 再算就方便了 guxingganyue 发表于 2013-8-14 11:27 static/image/common/back.gif
还没有呢,还在研究中
你怎么也对这个敢兴趣?
嗯 ,感兴趣,最近有个项目也要测这个,很麻烦 我有方案,有偿代码,QQ,1763509044。 ren0214 发表于 2013-8-14 13:02 static/image/common/back.gif
可以考虑小波分析或傅立叶变换。
数据要实时的采集,分析。
我现在用的单片机是430,5438A。想把数据存下来后分析,没那么大地方
换其他单片机也可以,但要考虑功耗,毕竟是一个手势设备。
这个单片机做这些分析估计来不及吧 清雨影 发表于 2013-8-14 16:53 static/image/common/back.gif
我有方案,有偿代码,QQ,1763509044。
算法复杂吗?
非常复杂的话就行了 ak5136728 发表于 2013-8-14 16:26 static/image/common/back.gif
嗯 ,感兴趣,最近有个项目也要测这个,很麻烦
那可以一起研究研究 这个应该不难,再次提供个思路仅供参考:
1. 对输入信号做快速傅里叶变换(FFT), 找出峰值频率f0
2. 以f0为中心频率,对输入信号进行带通滤波
3. 滤波后的信号在时域里求差分,数出差分信号的过零点个数,即可求解 本帖最后由 hhxb 于 2013-8-15 00:20 编辑
看了一些数据
我个人觉得,很明显楼主的方案或者说传感器有问题,人都不一定能数准,更何况机器 hendry 发表于 2013-8-14 21:58 static/image/common/back.gif
这个应该不难,再次提供个思路仅供参考:
1. 对输入信号做快速傅里叶变换(FFT), 找出峰值频率f0
关键是这个波形的带宽不是一定的,它有的宽点,有的窄。没有一个合适的范围 guxingganyue 发表于 2013-8-15 09:17 static/image/common/back.gif
关键是这个波形的带宽不是一定的,它有的宽点,有的窄。没有一个合适的范围 ...
你说的 "关键是这个波形的带宽不是一定的,它有的宽点,有的窄", 意思是说这个波形的宽度(即周期)是变化的吧,这正是要进行 FFT 的原因啊,
如果是固定的,这步骤就可以省了,直接从步骤2开始即可。
步骤1的作用就是求取周期波形的宽度(即周期)
回复以后,我大概理解楼主的意思了:”关键是这个波形的带宽不是一定的,它有的宽点,有的窄“
楼主的意思是说,在一次计算中,波形的宽度不是恒定的,是吧。
波形宽度变化范围,实际反映的是带宽滤波器的通带带宽,滤波时,可以将带宽适当设宽点。 hendry 发表于 2013-8-15 11:54 static/image/common/back.gif
回复以后,我大概理解楼主的意思了:”关键是这个波形的带宽不是一定的,它有的宽点,有的窄“
楼主的意思 ...
宽了以后噪声如何剔除呢?
比如说下面的波形:
guxingganyue 发表于 2013-8-15 12:43 static/image/common/back.gif
宽了以后噪声如何剔除呢?
楼主可以将本图中的原始数据发上来,我按照我发布的思路处理一下,然后将处理结果公布出来。
俗话说,百闻不如一见,是否可行一试便知。
楼主应该模拟数字结合起来做, 先用带通滤波,把想要的特征峰搞明显,再A/D,再数字处理。
特征频率如果不确定,就要FFT,很费劲了。
条条大路通罗马, 感觉楼主还要多加把劲,博采众长才行。 hendry 发表于 2013-8-14 21:58 static/image/common/back.gif
这个应该不难,再次提供个思路仅供参考:
1. 对输入信号做快速傅里叶变换(FFT), 找出峰值频率f0
数学算法 大家都应该都能想的出来
关键是如果用单片机去算这些量的话估计不现实,计算量太大了点。 楼主怎么样啦! 求经验分享 楼主,你先把你的界定条件所清楚,我告诉你方法。
页:
[1]