正弦波自相关不正确
Incorrect autocorrelation of sine wave
我正在生成如下基本正弦波:
import numpy as np
x = np.linspace(-10, 10, 200)
x = np.sin(x)
绘制时看起来正确:
import matplotlib.pyplot as plt
plt.plot(x)
plt.show()
但是当我尝试计算并绘制该信号的归一化自相关时,我得到了一些奇怪的结果:
autocorr = np.correlate(x, x, mode='full')
autocorr /= autocorr[autocorr.argmax()] # Normalize autocorrelation
plt.plot(autocorr)
plt.show()
鉴于正弦波是完全周期性的,我希望自相关值在同相时为 1.0。但是,我的自相关峰随着时间步长的增加而变小
我的自相关计算有误吗?或者我应该使用另一个相关函数吗?
看起来不错。您没有在 1.0 处获得重复峰值的原因是 correlate
将信号视为数据外的零。您可以通过对输入信号进行零填充并查看其相关性来确认这一点,这将与您在上面看到的相匹配。尝试以下操作:它会产生与上面的图相同的自相关。
x0 = np.hstack([np.zeros_like(x), x, np.zeros_like(x)])
ac0 = np.correlate(x0, x0, mode='full')
ac0 /= ac0.max()
plt.plot(ac0)
我正在生成如下基本正弦波:
import numpy as np
x = np.linspace(-10, 10, 200)
x = np.sin(x)
绘制时看起来正确:
import matplotlib.pyplot as plt
plt.plot(x)
plt.show()
但是当我尝试计算并绘制该信号的归一化自相关时,我得到了一些奇怪的结果:
autocorr = np.correlate(x, x, mode='full')
autocorr /= autocorr[autocorr.argmax()] # Normalize autocorrelation
plt.plot(autocorr)
plt.show()
鉴于正弦波是完全周期性的,我希望自相关值在同相时为 1.0。但是,我的自相关峰随着时间步长的增加而变小
我的自相关计算有误吗?或者我应该使用另一个相关函数吗?
看起来不错。您没有在 1.0 处获得重复峰值的原因是 correlate
将信号视为数据外的零。您可以通过对输入信号进行零填充并查看其相关性来确认这一点,这将与您在上面看到的相匹配。尝试以下操作:它会产生与上面的图相同的自相关。
x0 = np.hstack([np.zeros_like(x), x, np.zeros_like(x)])
ac0 = np.correlate(x0, x0, mode='full')
ac0 /= ac0.max()
plt.plot(ac0)