python - 正弦波自相关不正确

标签 python numpy signal-processing correlation

我正在生成一个基本的正弦波,如下所示:

import numpy as np
x = np.linspace(-10, 10, 200)
x = np.sin(x)

绘制时看起来正确:

import matplotlib.pyplot as plt    
plt.plot(x)
plt.show()

enter image description here

但是当我尝试计算并绘制该信号的归一化自相关时,我得到了一些奇怪的结果:

autocorr = np.correlate(x, x, mode='full')    
autocorr /= autocorr[autocorr.argmax()]  # Normalize autocorrelation

plt.plot(autocorr)
plt.show()

enter image description here

鉴于正弦波是完全周期性的,我预计同相时的自相关值为 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)

关于python - 正弦波自相关不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43646974/

相关文章:

matlab - 为什么我的低通滤波器会放大信号?

python - 如何使用 python 在 Facebook 上给自己发送消息?

python - 如果您要求整数但没有得到整数,是否存在异常?

Python:从字典中具有最大值的键列表中随机选择

python - Pandas:使用分位数过滤组内后 10% 和前 25% 数据的最佳方法

python - 避免 numpy 为重载运算符分发操作

c++ - 发送和接收采样缓冲区后,如何测量带衰减的嘈杂延迟线的延迟?

java - Java 中的快速内存操作?

python - 如何在 API 响应中隐藏密码?

python - 使用python抓取jsp网页内容