还在按部就班的算自相关?FFT让你体验飞一般的感觉!

本文同步发布在我的个人博客,希望大家可以到我的个人博客玩耍。http://www.weekreport.cn/archives/212

自相关函数

自相关(Autocorrelation),也叫序列相关,是一个信号于其自身在不同时间点的互相关。非正式地来说,它就是两次观察之间的相似度对它们之间的时间差的函数。它是找出重复模式(如被噪声掩盖的周期信号),或识别隐含在信号谐波频率中消失的基频的数学工具。它常用于信号处理中,用来分析函数或一系列值,如时域信号。–百度百科

自相关函数在随机信号处理领域非常重要,一般用下式计算一个随机信号的自相关。
R(s,t)=E[X(s)x(t)]R(s,t) = E[X(s)x(t)]\quad
如果该随机信号是均方遍历的,则可以使用一个足够长样本函数的时间自相关去估计真实的自相关函数。
还在按部就班的算自相关?FFT让你体验飞一般的感觉!
如果m和N都比较大,上式运算量很大,如何减小运算量,实现自相关函数的快速计算?

使用FFTFFT算法实现自相关函数的快速计算

对时间自相关函数两边求傅立叶变换并整理得下式:
还在按部就班的算自相关?FFT让你体验飞一般的感觉!
Un(w)U_n(w)是样本信号的傅立叶变换,上式说明r^(m)\hat{r}(m)un(n)u_n(n)的功率谱是一对傅里叶变换,既然是傅立叶变换,自然可以用FFTFFT算法实现快速计算。

算法步骤

  1. un(n)u_{n}\left ( n \right )NN个0,得u2n(n)u_{2n}\left ( n \right ),对u2n(n)u_{2n}\left ( n \right)做快速傅立叶变换得U2n(k) k=0,1,2...2N1U_{2n}\left ( k \right )\quad\ k=0,1,2...2N-1
  2. U2n(k)U_{2n}\left ( k \right )的幅度平方,然后除以NN,得到1NU2n(k)2\frac{1}{N}\left | U_{2n}\left ( k \right ) \right |^{2}
  3. 1NU2n(k)2\frac{1}{N}\left | U_{2n}\left ( k \right ) \right |^{2}进行IFFT,得到r0^(m)\hat{r_{0}}(m)\quadm=0,1,...,2N1m=0,1,...,2N-1r0^(m)\hat{r_{0}}(m)r^(m)\hat{r}(m)的关系为:r^(m)={r0^(m)0mN1r0^(m+2N)N+1m1\hat{r}\left ( m \right )= \left\{\begin{matrix} \hat{r_{0}}\left ( m \right )& 0\leq m\leq N-1 \\ \hat{r_{0}}\left ( m + 2N \right )& -N+1\leq m\leq -1 \end{matrix}\right.

使用MatlabMatlab实现上述算法

仿真条件

随机信号u(n)u\left ( n \right )的观测样本由一段零均值、方差为σ2\sigma^{2}的复高斯白噪声序列v(n)v\left ( n \right )叠加3个归一化频率分别为f1=0.15,f2=0.17,f3=0.26f_{1}=0.15,f_{2}=0.17,f_{3}=0.26,信噪比分别为30dB,30dB,27dB30dB,30dB,27dB的复正弦信号构成。

仿真结果

令信号观测样本长度N=32N=32,基于FFTFFT的自相关函数快速算法估计出的自相关函数r0^(m)\hat{r_0}\left( m \right),并与由信号观测样本直接计算得到的自相关函数进行比较,结果如下,r1r_1代表基于FFTFFT的自相关函数快速算法估计出的自相关函数,r0r_0代表由信号观测样本直接计算得到的自相关函数,可以看到,二者结果是一样的。
还在按部就班的算自相关?FFT让你体验飞一般的感觉!
既然是快速算法,它到底比利用样本函数直接计算自相关函数快了多少?

利用MatlabMatlab中的tic,toctic,toc函数,得到两种方法的运行时间,可以看到基于FFTFFT的自相关函数快速算法要比由信号观测样本直接计算自相关函数快一个数量级左右,这是很大的提升,特别是在样本点数NN很大时。
还在按部就班的算自相关?FFT让你体验飞一般的感觉!
感兴趣的同学可以关注公众号 “工科南” 并回复 “fftcorrfftcorr” 获取相关的MatlabMatlab代码。
还在按部就班的算自相关?FFT让你体验飞一般的感觉!