wuqiong 发表于 2009-8-14 11:09

过零点检测

我现在处理的是带有噪声的类似于正弦波的信号,需要检测过零点的个数,不要求非常精确,但是个数的识别率要在99%以上。如果做个这方面工作的话帮我给推荐一些文章或者介绍一下算法。不胜感激:)

wuqiong_cea 发表于 2010-8-26 15:53

我们的处理方法是首先选择一个阈值,将绝对值大于这个阈值的点设为某个固定值。然后选择两个已知固定值之间的数据段进行分析,如果这段数据的两端点符号相反,则可以认定有一次过零。具体过零的时间可以这样处理,对出现过零点的数据段两个端点之间的数据进行插值,寻找最接近零的插值曲线上的点对应的时间就是过零点的时刻。
但是我们的数据量很大,每条记录有100兆,这种算法在处理速度上有点慢,有没有更好的办法,希望跟帖。

songjianjiang 发表于 2010-8-30 08:21

在计算机上,任何数值的正负都是标志在某一位是0或者1,比如如果你的数据类型是short,那么判断相邻两个数的第一位是否相同,如果不同那么即存在一个穿零点;单精度双精度类似处理。由于只是简单的位处理,速度应该很快。

impulse 发表于 2010-9-30 14:46

是个好方法,不过不是对每种编程语言都适用。

songzy41 发表于 2010-10-1 15:14

songjianjiang 发表于 2010-8-30 08:21 static/image/common/back.gif
在计算机上,任何数值的正负都是标志在某一位是0或者1,比如如果你的数据类型是short,那么判断相邻两个数的 ...

这是利用数据在计算机中的符号位,所以如同impulse所述,不是所有语言都可以适用的。实际上songjianjiang给的思路是对的,但可以把相邻两个数相乘,再判断,若乘积小于零,则在这两个数之间必然有个零点。

songjianjiang 发表于 2010-10-1 18:39

实际上我就是用乘积来计算穿零点的,但是毕竟位运算比乘积运算速度上快的多得多,而且楼主的数据有100M之多。不过并不是所有环境下都支持底层的数据位运算,这也是该方法的实际应用中的不足。
页: [1]
查看完整版本: 过零点检测