我使用的是python,但这是一个一般性的问题(与算法等更相关),因此我跳过了一些步骤来了解问题的要点:
我生成如下的正弦信号:
import math as m
signal = [m.sin(2*m.pi*1*(t/n-d)) for t in range(n)]
一个正弦信号,标准化,频率为1,时间从0到1秒(基本上是一个简单的正弦波周期)。还有一个延迟项d,用于延迟信号(导致相移)。n只是样本数
我还创建了另一个信号,带有另一个延迟。假设我对第一个信号使用延迟0,对第二个信号使用延迟x(为了清楚起见,我将前面的缩写为):
signal1 = signal(delay=0)
signal2 = signal(delay=x)
然后我做一个关联:
from scipy import signal as sgn
corr11 = sgn.correlate(signal1, signal1, mode = 'full')
corr12 = sgn.correlate(signal1, signal2, mode = 'full')
我也知道信号延迟与相关点的最大值相关,所以我取两点:
import numpy as np
a1 = np.argmax(corr11)
a2 = np.argmax(corr12)
<> P>因此,发现信号与自身的相关性在相关阵列(或图/函数)的中间具有最大峰值。但另一个高峰很奇怪:所以问题是,在相关信号之后,延迟d如何与峰值位置相关
似乎延迟大约等于
(a1 - a2) / n
。然而,我认为答案有点扭曲,因为a)你只使用单周期正弦波,b)你使用有限数量的数据点(显然)。对于单周期正弦波的情况,要得到更准确的答案,您可能需要获得相关性的数学定义,并使用正确的限值进行必要的积分(但我不确定在积分方面寻求帮助的正确位置是否正确)这是一个自足的脚本,它描绘了信号和相关性,希望能提供更多的直觉。注:当你重复正弦波的周期数时,我上面给出的近似值似乎变得更精确。例如,对于100个周期和100000个数据点,上面的近似值(此处修改为
n_repeats * (a1 - a2) / n
)似乎变得更加精确剧本
带有
n = 1000, n_repeats = 1
的控制台输出带有
n = 100000, n_repeats = 100
的控制台输出使用
n = 1000, n_repeats = 1
输出图像相关问题 更多 >
编程相关推荐