自相关函数学习思考

自相关(Autocorrelation),也叫序列相关,是一个信号与其自身在不同时间点的互相关。非正式地来说,自相关是对同一信号在不同时间的两次观察,通过对比来评判两者的相似程度。自相关函数就是信号自相关公式pacf python 自相关的公式_傅立叶分析和它的时移信号自相关公式pacf python 自相关的公式_傅里叶级数_02的乘积平均值。它是时移变量τ的函数。

也就是说一个函数自相关公式pacf python 自相关的公式_自相关公式pacf python_03的自相关函数为::
自相关公式pacf python 自相关的公式_傅里叶级数_04
假设自相关公式pacf python 自相关的公式_自相关公式pacf python_03是周期自相关公式pacf python 自相关的公式_傅里叶级数_06无穷大的周期函数,那么自相关公式pacf python 自相关的公式_自相关公式pacf python_07可以写成周期积分:

自相关公式pacf python 自相关的公式_自相关公式pacf python_08

根据傅里叶级数的原理,自相关公式pacf python 自相关的公式_自相关公式pacf python_03可以写成傅里叶级数的形式:
自相关公式pacf python 自相关的公式_傅立叶分析_10
自相关公式pacf python 自相关的公式_傅立叶分析_11则可以写成
自相关公式pacf python 自相关的公式_傅里叶级数_12

因此自相关公式pacf python 自相关的公式_傅立叶分析_13,可以分解成从(1)和(2)式中任意抽取两个项相乘后积分再求和,有下面四种情况:

  • 两个抽取都是直流项
    自相关公式pacf python 自相关的公式_自相关公式pacf python_14
  • 一个抽取是直流项,另一个抽取是交流项
    自相关公式pacf python 自相关的公式_傅里叶级数_15
    自相关公式pacf python 自相关的公式_自相关公式pacf python_16
  • 两个抽取都是交流项,但n不相同
    自相关公式pacf python 自相关的公式_自相关公式pacf python_17

自相关公式pacf python 自相关的公式_自相关公式pacf python_18

  • 两个抽取都是交流项,但n相同
    自相关公式pacf python 自相关的公式_傅立叶分析_19
    综合四种情况可知:
    自相关公式pacf python 自相关的公式_傅立叶分析_20
    由(3)式可知,在自相关公式pacf python 自相关的公式_自相关公式pacf python_21时,自相关函数自相关公式pacf python 自相关的公式_傅里叶级数_22有最大值自相关公式pacf python 自相关的公式_傅里叶级数_23

如果自相关公式pacf python 自相关的公式_自相关公式pacf python_03是只包含交流分量的函数,在频域上是一条幅值为自相关公式pacf python 自相关的公式_自相关公式pacf python_25的直线(从自相关公式pacf python 自相关的公式_自相关公式pacf python_26自相关公式pacf python 自相关的公式_自相关公式pacf python_27),那么这样的自相关公式pacf python 自相关的公式_自相关公式pacf python_03自相关函数可以进一步进行化简:
自相关公式pacf python 自相关的公式_傅里叶级数_29

观察(4)式可以发现,自相关公式pacf python 自相关的公式_自相关公式pacf python_30振动速度比自相关公式pacf python 自相关的公式_傅里叶级数_31要快,
而且自相关公式pacf python 自相关的公式_傅里叶级数_32是除着自相关公式pacf python 自相关的公式_傅立叶分析_33增大,按自相关公式pacf python 自相关的公式_傅立叶分析_34倒数衰减的正弦波形。
所以,自相关公式pacf python 自相关的公式_自相关公式pacf python_07在原函数是宽带频率函数时,其波形是衰减的较慢正弦波形乘以一个比较快的余弦波。

用ipython进行验证:

import numpy as np
import matplotlib.pyplot as plt
import math

%matplotlib inline

N = 512
spectral = [0j] * N

na=100
nb=120

for i in range(N):
    if na<=i<=nb:
        spectral[i] = (1+0j) * N / 2 #由于 ifft是用X(k)=N * Amp N倍幅值计算的 所以要乘以N 除以2是正负频各分一半幅值
    if N - nb <=i<= N - na:
        spectral[i] = (1+0j) * N / 2

inputwave = np.fft.ifft(spectral)
inputwave = np.real(inputwave)

R_wave = [0]*N

for tau in range(N):
    sumt = 0
    for i in range(N):
        temp = i - tau
        sumt = sumt + inputwave[i] * inputwave[temp] #自相关函数
    R_wave[tau] = sumt 
    
approxR_wave = [0]*N    #近似计算的自相关波形
nc = (na+nb)/2
dn = (nb-na)/2
amp = N * (nb-na) * 1**2 / 2
for i in range(1,N):
    tau = i
    if i > N/2:
        tau = N - i  #相移不能大于半周期,大于相当于是负相移
    psi =  nc * tau * 2 * math.pi / N
    cositem = math.cos(psi)
    psi =  dn * tau * 2 * math.pi / N
    sinitem = math.sin(psi)
    approxR_wave[i] = amp * cositem * sinitem / psi
    
approxR_wave[0] = amp
    
plt.figure(figsize=(15,10))
plt.plot(R_wave)
plt.plot(approxR_wave)

自相关公式pacf python 自相关的公式_傅里叶级数_36


如果自相关公式pacf python 自相关的公式_自相关公式pacf python_03是频域正态分布的宽带信号呢?
用ipython进行试验,看看波形

sigma = 5 #标准差 
mu = (na + nb) / 2  #期望(均数)

for i in range(N):
    if na<=i<=nb:
        temp = (i-mu)/sigma
        temp = temp ** 2
        temp = temp / 2
        temp = math.exp(-temp)
        temp = temp/(math.sqrt(2 * math.pi)*sigma)
        spectral[i] = temp * (1+0j) * N / 2 #由于 ifft是用X(k)=N * Amp N倍幅值计算的 所以要乘以N 除以2是正负频各分一半幅值
    if N - nb <=i<= N - na:
        temp = (i- N +mu)/sigma
        temp = temp ** 2
        temp = temp / 2
        temp = math.exp(-temp)
        temp = temp/(math.sqrt(2 * math.pi)*sigma)
        spectral[i] = temp*(1+0j) * N / 2

inputwave = np.fft.ifft(spectral)
inputwave = np.real(inputwave)

R_wave1 = [0]*N

for tau in range(N):
    sumt = 0
    for i in range(N):
        temp = i - tau
        sumt = sumt + inputwave[i] * inputwave[temp] #自相关函数
    R_wave1[tau] = sumt

plt.figure(figsize=(15,10))
plt.plot(np.abs(spectral))
plt.figure(figsize=(15,10))
plt.plot(R_wave)
plt.figure(figsize=(15,10))
plt.plot(R_wave1)

有正态分布的宽带频域

自相关公式pacf python 自相关的公式_傅里叶级数_38

直线分布的宽带频域自相关时域波形

自相关公式pacf python 自相关的公式_自相关公式pacf python_39

正态分布的宽带频域自相关时域波形

自相关公式pacf python 自相关的公式_傅里叶级数_40

对比可以看到,正态分布的自相关函数波形中间杂波小得多,而且振动的频率分量更少一些(向中心频率靠,相当于做了滤波)