经典法谱估计(2)自相关法MATLAB及Python实现

原理

对于确定性信号,可以用FFT做频域分析,得到其频域特性。对于平稳随机信号,因为是无限能量的信号,故其傅里叶变换不存在(在Z平面不满足绝对可和条件)。如果是截取随机序列的一段用FFT做频域分析,那么不同段求出的频谱必然是不同的,可见这种分析并无意义。而自相关序列是一个能量有限的确定性序列,故能满足傅里叶变换条件,且由维纳辛钦定理可知,其傅里叶变换就是原序列的功率谱,因此我们采用下面这种方法,也叫BT法。
平稳随机信号的自相关函数的定义为:
在这里插入图片描述
式中,x(n)和y(n)都是平稳随机信号,“*”代表取共轭。如果x(n)和y(n)都是实随机序列,则上面两式成为
在这里插入图片描述
再由维纳辛钦定理知,随机信号自相关函数的傅里叶变换是信号的功率谱密度,则有
在这里插入图片描述
与上面相同,我们需要将其进行离散化N点取样:
在这里插入图片描述
至此,我们可以画出随机信号的功率谱密度。

程序和结果

(出于维护版权原因,此处只放截图)
MATLAB
程序:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
Python
程序:
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述

分析

由上图可见,我给程序输入的N为512,此时我们可以从功率谱图中看到四个峰,呈现对称分布,信号中f1=0.1,f2=0.13,在图中我们可以看到对应的位置出现了峰值,由于给定幅度大小不同,故峰值大小有很大差别。且由于输入的x(n)为一个实序列,从而其自相关函数 是实偶函数,根据“实偶虚奇”,它所对应的DFT为偶对称,这也就是为什么会出现左右对称的四个峰。然后我利用了寻峰函数来得出峰值对应的横坐标(Python中是自己写了一个寻峰估计频率的方法)
程序中将所有的峰值及其索引分别放入到两个数组中,且根据峰值大小降序排列,之所以采用降序排列,有借鉴过网上的经验,同时经过自己思考,认为是在噪声功率远小于信号功率的情况下,在很接近信号频率的附近,噪声产生的扰动应该较小,几乎可以忽略,所以在信号频率附近的峰值应该可以说几乎是纯信号的峰值,而没有噪声引起的小峰,可想而知,纯信号的两个峰应该是最大的两个,而在远离信号频率的位置上,噪声的扰动是相对较大的,所以我们可以通过降序排列,确定最大的两个峰值和其索引位置。

(因原博客是以word形式写的,CSDN不支持Mathtype公式,故部分地方直接采用了截图形式)

猜你喜欢

转载自blog.csdn.net/qq_44628230/article/details/107002799