搜索
bottom↓
回复: 55

求一突波检测算法

[复制链接]

出0入0汤圆

发表于 2018-1-3 16:14:15 | 显示全部楼层 |阅读模式
本帖最后由 Junsea 于 2018-1-4 11:40 编辑

信号波形如图,波形上有叠加一些随机的突波(红色箭头位置),信号本身有幅值不大的毛刺,毛刺的幅值远小于突波。
基值是浮动的,假设图中基值x(x取值范围50~1000),x值随机且在检测过程中会随机变化,毛刺为 x±5,而突波为 x+20 以上
采用什么软件算法能够可靠的检出图中突波
求思路,谢谢!!

2018-01-04 补充:
1、图示数据来源是通过AD采集后通过串口送到电脑,然后通过serial chart显示的
2、真实突波信号并非如图那么陡峭,是类似于正弦波的正半波,突波通常持续时长为0.1ms至5ms间,突波的相对幅值范围为+15~+150
3、AD采样频率为20KHz

编辑原因:增加数据描述

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2018-1-3 17:08:24 | 显示全部楼层
硬件滤波。
什么都要软件搞定,那真要累死软件狗了。

出0入0汤圆

发表于 2018-1-3 17:23:25 | 显示全部楼层
楼主确定不是要滤除掉,检测出来有什么实际意义吗???

出10入23汤圆

发表于 2018-1-3 17:26:53 来自手机 | 显示全部楼层
高通滤波不就好了

出0入0汤圆

发表于 2018-1-3 17:29:22 | 显示全部楼层
zouzhichao 发表于 2018-1-3 17:26
高通滤波不就好了

高通滤波????

出10入23汤圆

发表于 2018-1-3 17:31:46 来自手机 | 显示全部楼层
xuzhiping9889 发表于 2018-1-3 17:29
高通滤波????

高通滤波之后再比较

出0入0汤圆

 楼主| 发表于 2018-1-3 17:37:51 | 显示全部楼层
xuzhiping9889 发表于 2018-1-3 17:23
楼主确定不是要滤除掉,检测出来有什么实际意义吗???

有意义,就是要检出这个

出0入55汤圆

发表于 2018-1-3 17:43:58 | 显示全部楼层
zouzhichao 发表于 2018-1-3 17:26
高通滤波不就好了

我也正需要这个算法,请教如果突波时间也可能很短,高通滤波可以吗?

出0入55汤圆

发表于 2018-1-3 17:45:55 | 显示全部楼层
su33691 发表于 2018-1-3 17:08
硬件滤波。
什么都要软件搞定,那真要累死软件狗了。

关键这个波型已经是数字,和硬件无关了

出0入0汤圆

发表于 2018-1-3 18:03:01 来自手机 | 显示全部楼层
这是什么设备上的波形 不能用硬件过滤?

出0入55汤圆

发表于 2018-1-3 18:06:38 | 显示全部楼层
wsh 发表于 2018-1-3 18:03
这是什么设备上的波形 不能用硬件过滤?

不知道楼主的,我的是这个突起是有用信息,不能滤掉,要检测出来

出0入0汤圆

 楼主| 发表于 2018-1-3 18:10:27 | 显示全部楼层
jssd 发表于 2018-1-3 18:06
不知道楼主的,我的是这个突起是有用信息,不能滤掉,要检测出来

一样一样!

出0入0汤圆

发表于 2018-1-3 18:12:53 来自手机 | 显示全部楼层
和模拟电视信号中的场信号很像

出0入8汤圆

发表于 2018-1-3 18:16:40 | 显示全部楼层
当前值减去低通滤波值就是高通滤波!低通滤波会弄吧?最常用的,一阶滤波算法。

出0入0汤圆

发表于 2018-1-3 18:18:51 | 显示全部楼层
软件和硬件原理一样的

都是高通滤波,然后再阀值比较就可以了

出0入0汤圆

发表于 2018-1-3 19:13:52 | 显示全部楼层
jssd 发表于 2018-1-3 18:06
不知道楼主的,我的是这个突起是有用信息,不能滤掉,要检测出来

像这样凸起的信号得用高速AD去采样数据的吧?

出0入0汤圆

发表于 2018-1-3 19:42:26 来自手机 | 显示全部楼层
求斜率找沿可行

出0入0汤圆

发表于 2018-1-3 20:40:42 | 显示全部楼层
简易低通滤波,再加上阀值比较就行了

出0入0汤圆

发表于 2018-1-3 21:32:36 来自手机 | 显示全部楼层
如果是你的图中那样的波形,我也觉得应该用高通滤波器。至于是硬件高通还是软件算法高通,看你的信号频率了。

出0入0汤圆

 楼主| 发表于 2018-1-3 23:11:51 | 显示全部楼层
No.5 发表于 2018-1-3 21:32
如果是你的图中那样的波形,我也觉得应该用高通滤波器。至于是硬件高通还是软件算法高通,看你的信号频率了 ...

信号频率不高

出0入0汤圆

 楼主| 发表于 2018-1-3 23:13:30 | 显示全部楼层

突波持续时长以及幅值都不定

出0入0汤圆

 楼主| 发表于 2018-1-3 23:15:34 | 显示全部楼层
看推荐高通的方案还是比较多,只是这个信号处理真没学好,有没有用C写这个算法通俗易懂的资料,推荐几个研究下?

出0入0汤圆

发表于 2018-1-3 23:32:12 | 显示全部楼层
斜率+最大值

出0入0汤圆

 楼主| 发表于 2018-1-3 23:35:36 | 显示全部楼层

基值是浮动的,所以不知道最大值

出0入0汤圆

发表于 2018-1-3 23:40:06 | 显示全部楼层
su33691 发表于 2018-1-3 17:08
硬件滤波。
什么都要软件搞定,那真要累死软件狗了。

中肯中肯,啥都想让软件搞,CPU效率都没了

出0入0汤圆

发表于 2018-1-3 23:45:25 | 显示全部楼层
FireHe 发表于 2018-1-3 18:18
软件和硬件原理一样的

都是高通滤波,然后再阀值比较就可以了

我是来找茬的,哈哈,阈值,不是军阀的阀

出0入0汤圆

发表于 2018-1-3 23:45:58 | 显示全部楼层
Junsea 发表于 2018-1-3 23:35
基值是浮动的,所以不知道最大值

基值不是小于突波的吗,你的斜率和最大值必须同时满足初始阈值,同时你的阈值也在不停的更新

出0入0汤圆

 楼主| 发表于 2018-1-3 23:53:08 | 显示全部楼层
机器人天空 发表于 2018-1-3 23:45
基值不是小于突波的吗,你的斜率和最大值必须同时满足初始阈值,同时你的阈值也在不停的更新 ...

不停更新的阈值怎么确定?

出0入0汤圆

发表于 2018-1-4 00:04:47 | 显示全部楼层
Junsea 发表于 2018-1-3 23:53
不停更新的阈值怎么确定?

比方说你每检测出一个新的斜率和最大值后。跟你原有的值相加再求平均值,最后取其中的2/3作为你的新阈值。

出0入0汤圆

发表于 2018-1-4 01:38:03 来自手机 | 显示全部楼层
滑动平均可以试下,但是不是检测突波,是将突波平滑掉

出0入309汤圆

发表于 2018-1-4 03:35:12 来自手机 | 显示全部楼层
峰值检测。http://www.billauer.co.il/peakdet.html 别被matlab吓着了,翻到底算法很简单,不调用任何库。

出0入0汤圆

发表于 2018-1-4 09:09:33 | 显示全部楼层
难道不就是CFAR检测? 找尖峰,过门限就取出来,做下一步处理,下面是我写过的一段检测尖峰代码:
        PointTmp = EnergyDataTmp[0];
        for (j = 1; j < CFARDetectStruct.XLocalRange; j++){
                PointMax = Max(PointTmp, EnergyDataTmp[j + 1]);
                PointTmp = EnergyDataTmp[j];
                if (EnergyDataTmp[j] <= PointMax){
                        EnergyDataTmp[j] = 0.0;
                }else{
                        if ((PointTmp > CFARDetectStruct.ThresholdL1) && (pCohesionDataL1->Num < COHESION_DATA_LEN)){
                                        pCohesionDataL1->XLocal[pCohesionDataL1->Num]     = CFARDetectStruct.XLocalOffset + j -1;
                                        pCohesionDataL1->EnergyData[pCohesionDataL1->Num] = PointTmp ;
                                        pCohesionDataL1->Num++;
                        }
            }
        }

出0入0汤圆

发表于 2018-1-4 09:27:42 | 显示全部楼层
看数据觉得求相邻两点的差值,波形会跟明显。

出420入0汤圆

发表于 2018-1-4 10:29:15 | 显示全部楼层
你这个拿高通滤波应该能检测出,需要试验下截止频率

出0入0汤圆

发表于 2018-1-4 10:29:53 | 显示全部楼层
不知道格鲁比斯算法是否对你有用

出0入0汤圆

 楼主| 发表于 2018-1-4 11:29:25 | 显示全部楼层
xsh2005105326 发表于 2018-1-4 10:29
不知道格鲁比斯算法是否对你有用

不知道这东西,搜好像都收不到这个高大上的东西!

出0入0汤圆

 楼主| 发表于 2018-1-4 11:30:00 | 显示全部楼层
lsx007 发表于 2018-1-4 09:09
难道不就是CFAR检测? 找尖峰,过门限就取出来,做下一步处理,下面是我写过的一段检测尖峰代码:
         ...

研究下你的代码,如果代码能有点注释就更好了。

出0入0汤圆

 楼主| 发表于 2018-1-4 11:31:08 | 显示全部楼层
iamseer 发表于 2018-1-4 03:35
峰值检测。http://www.billauer.co.il/peakdet.html 别被matlab吓着了,翻到底算法很简单,不调用任何库。 ...

matlab不会,所以matlab的代码看起来心塞了,不过还是谢谢你提供方向。

出0入0汤圆

 楼主| 发表于 2018-1-4 11:31:48 | 显示全部楼层
1148729990 发表于 2018-1-4 09:27
看数据觉得求相邻两点的差值,波形会跟明显。

突波上升时间和持续时间都不固定的

出0入0汤圆

 楼主| 发表于 2018-1-4 11:32:31 | 显示全部楼层
ztlaputa 发表于 2018-1-4 01:38
滑动平均可以试下,但是不是检测突波,是将突波平滑掉

这个比较简单,但不是我需要的,我需要检出突波!谢谢

出0入55汤圆

发表于 2018-1-4 11:40:57 | 显示全部楼层
lsx007 发表于 2018-1-4 09:09
难道不就是CFAR检测? 找尖峰,过门限就取出来,做下一步处理,下面是我写过的一段检测尖峰代码:
         ...

还有一个条件,就是整体的值可能随着环境变化而上下(缓慢)波动

出0入0汤圆

发表于 2018-1-4 12:47:09 | 显示全部楼层
jssd 发表于 2018-1-4 11:40
还有一个条件,就是整体的值可能随着环境变化而上下(缓慢)波动

做个动门限就可以了

出0入0汤圆

发表于 2018-1-4 13:17:45 来自手机 | 显示全部楼层
看底比较稳,同样的数据做两种滤波,一个傻一点,一个快一点(能滤掉无毛刺就行),两个再比较一个门限就差不多了。

出0入0汤圆

发表于 2018-1-4 18:03:50 | 显示全部楼层
Junsea 发表于 2018-1-4 11:29
不知道这东西,搜好像都收不到这个高大上的东西!

算法在这里
https://www.amobbs.com/thread-5685170-1-1.html

出0入0汤圆

发表于 2018-1-4 18:23:38 来自手机 | 显示全部楼层
Junsea 发表于 2018-1-3 23:11
信号频率不高

频率不高可以试试FIR/IIR数字高通滤波器

出0入0汤圆

发表于 2018-1-6 23:43:20 来自手机 | 显示全部楼层
和我检测心率的方法类似

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2018-1-7 23:33:11 | 显示全部楼层
chenliangliang_ 发表于 2018-1-6 23:43
和我检测心率的方法类似

你这个好像挺牛X,是否可提供思路?

出0入0汤圆

发表于 2018-1-8 08:24:57 来自手机 | 显示全部楼层
Junsea 发表于 2018-1-7 23:33
你这个好像挺牛X,是否可提供思路?

通过检出波峰波谷,确定峰谷的突变窗口

出0入0汤圆

发表于 2018-1-8 09:00:31 | 显示全部楼层
采用动态阈值法,高速采样,逐点比较。

出0入0汤圆

发表于 2018-1-8 20:51:27 来自手机 | 显示全部楼层
中值滤波方法检测此类问题也许更好.....

出0入0汤圆

发表于 2018-1-8 22:11:06 | 显示全部楼层
这个就是找波峰波谷算法:求一阶差分向量之后再求一阶差分,然后阈值判断是可以找到的

出0入399汤圆

发表于 2018-2-13 11:41:57 | 显示全部楼层
我之前也遇见过这种,这种硬件滤不掉的,因为他的频率特性跟有用波是一样的,后来换了种思路,楼主最后解决了么?可靠吗?

出0入0汤圆

发表于 2018-2-15 16:53:42 来自手机 | 显示全部楼层
这个很简单的。低频滤波,差值。设个阀值比较就可以了。

出0入0汤圆

发表于 2018-2-15 22:16:59 来自手机 | 显示全部楼层
希尔伯特滤波后能检出调变而且不受基本直流偏移影响

出0入0汤圆

发表于 2019-8-3 11:36:52 | 显示全部楼层
初步想法,仅供参考
1、用fir低通滤波让波形的“毛刺”变平滑
2、用fir高通滤波让波形“基值”浮动变小(就像很多生物电波形需要去除基线漂移一样,通常高通截止频率几个Hz以下)
3、用类似爬坡算法+阈值判断的方法找到“突波”
用实时滤波算法,对频率不高的信号,可以实时找到“突波”,但是20kHz的采样率,实时性很难保证。

出0入0汤圆

 楼主| 发表于 2019-8-3 11:47:20 | 显示全部楼层
最终解决方案,换了个思路,重点不要放到突波上,而是放到基值上。虽然基值浮动,但是变化相当缓慢,且突波出现时间很短,故可以将基值计算时间拉长,比如10s,取10个采样数据,然后排序去掉最大值和最小值,剩下的8个数据做滑动平均,得出结果作为基值,然后用实时数据和基值比较检出突波。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 23:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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