网址:https://ww2.mathworks.cn/help/signal/ug/cross-correlation-of-delayed-signal-in-noise.html
描述:本案例由1个示例构成
-
针对以上案例,采用Python语言实现。
-
输出序列是具有加法白高斯噪声的输入序列的延迟版本。创建两个序列。一个序列是另一个序列的延迟版本。延迟为 3 个样本。延迟信号的白噪声。使用样本互相关序列来检测滞后。
创建并绘制信号。将随机数生成器设置为默认设置,以获得可重现的结果。
python
import matplotlib.pyplot as plt
import numpy as np
python
xx = np.zeros([20,1])
x = np.arange(0.05,1,0.1)
x = np.r_[x,x[::-1]]
xx[:,0] = x
xx.shape
(20, 1)
python
y = np.zeros([3,1])
y.shape
y = np.r_[y,xx]
y = y+0.3*np.random.randn(len(x)+3,1)
python
plt.subplot(2,1,1)
plt.stem(x)
plt.subplot(2,1,2)
plt.stem(y)
<StemContainer object of 3 artists>
python
def xcorr(x,y,timelaggy):
x = x.flatten()
y = y.flatten()
out = np.correlate(x,y,'full')
midIndex = int(len(out)/2)
mid = out[midIndex]
autocor = out/mid
if timelaggy>len(out)/2:
autocor = autocor
lags = np.linspace(-len(out)/2,len(out)/2,2*len(out)+1 )
else :
autocor = autocor[midIndex-timelaggy:midIndex+timelaggy]
lags = np.arange(-timelaggy,timelaggy,1)
return autocor,lags
获取样本互相关序列,并使用最大绝对值来估计滞后。绘制样本互相关序列。正如预期的那样,最大互相关序列值出现在滞后 3 处。
python
xc,lags = xcorr(y,x,21)
I = np.argmax(np.abs(xc))
lags[I]
1
python
plt.stem(lags,xc)
plt.plot([lags[I],lags[I]],[xc[I],0],'r')
[<matplotlib.lines.Line2D at 0x20dfcb01f98>]
python
I = np.argmax(np.abs(xc))
lags[I]
1