本人前段时间在做地震波分析的时候用到互相关函数的计算,所以做了一些具体的研究和分析。用python实现信号的互相关可以有三种方法:一、直接用时域法。二、用频域法。三、python提供的numpy.correlate函数。现在把这三种方法都用于具体数据计算,并得到了几乎一致的结果。具体python源代码已经上传,可以在CSDN免费下载。
互相关函数pyhton实现的三种方法-Python文档类资源-CSDN下载
互相关函数计算的基本原理:
1、对于信号 ,它们的互相关公式为:
![](https://img-blog.csdnimg.cn/321aa70566724a4f83f5c1b16c436bd5.png)
在时域方法中,我们可以将上面的公式进行离散化,就可以做具体计算。
2、但时域法的计算量比较大,我可以用频域法做计算,它的原理如下:
如果 为 、 互相关函数的傅里叶变换:
![](https://img-blog.csdnimg.cn/83ac41f9872349fba710ab89d3f3ba39.png)
根根据积分交换性质和卷积定理:
![](https://img-blog.csdnimg.cn/368d89bffcde4d2c87cfaa581c681ae3.png)
它的傅里叶逆变换就是我们所需要的互相关函数:
![](https://img-blog.csdnimg.cn/cc003a5b553749ceabad744cb0f55e12.png)
所以只要根据傅里叶变换计算出 ,就可以得到 。那么它的傅里叶逆变换就是两个信号的互相关函数。
3、python的numpy.correlate也提供的具体的计算函数,(很简单,不需要涉及细节)。
具体实现:
现在把各种方法进行的过程,用图像的方法展示一下,可以参考源代码获得更多的处理细节。
程序运行的结果如下:
[xxxxx@localhost corraltion]# ./cmpcor.py
time out Maxvalue: 98449.9225242
fft out Maxvalue: 98449.9225242
two mode max bias between using fft and using Time: 1.45519152284e-10
two mode max bias between using np.correlate and using Time: 0.0
图1 时域法和频域法实现的细节和结果
对比用时域法和python提供的correlate计算结果完全一致,用频域法会有和时域法计算结果有极其
微小的偏差。
版权归原作者 周洪岳 所有, 如有侵权,请联系我们删除。