互相关python程序_python – 非周期函数与NumPy的互相关

博主正在尝试将两个类似于arctan函数的数据集进行互相关以确定信号偏移量。通过使用numpy的correlate函数,他们期望找到的最大值对应于信号的最佳对齐位置,但结果与预期不符。经过修改,使用自定义的xcorr函数,得到了更准确的2.025,表明信号偏移接近2。问题可能在于填充方式和numpy的相关性计算。博主在考虑是否使用C语言实现更快的算法。
摘要由CSDN通过智能技术生成

我有两个数据集,我试图互相关联.它们看起来类似于arctan函数,所以我一直用它作为模型来研究如何进行信号处理.

x = linspace(-15,15,2**13)

f1 = arctan(x)

f2 = arctan(x + 2)

我需要回答的问题是,我需要移动绿色信号以使其(大部分)与蓝色信号重叠多少?我认为这就像在f1和f2的互相关函数中找到最大值一样简单,我大致遵循这里的建议:How to correlate two time series with gaps and different time bases?.这就是我一直在尝试的

c = correlate(f1,f2,'full')

s = arange(1-2**13,2**13)

dx = 30/2**13

shift = s[c.argmax()]*dx

我希望转变或多或少恰好等于2,但事实上它只有0.234.这对我没有任何意义;我发现互相关的最大x坐标,应该在两个信号最大重叠的地方找到.

关于如何计算这种功能的数量的任何想法?

编辑:我应该补充一点,对于我的真实数据,所有值都将介于0和1之间

编辑编辑:以下功能实际上更像我的真实数据:

x = linspace(-15,400)

f1 = (arctan(-x) + pi/2) / pi

f2 = (arctan(-x + 2) + pi/2) / pi

def xcorr(x,y);

mx = x.mean()

my = y.mean()

sx = x.std()

sy = y.std()

r = zeros(2*len(x))

for d in range(-len(x),len(x)):

csum = 0

for i in range(0,len(x):

yindx = i - d

if i - d < 0:

yval = 1

elif i - d >= len(x):

yval = 0

else:

yval = y[yindx]

csum += (x[i] - mx) * (yval - my)

r[d + len(x)] = csum / (sx * sy)

return r

有了这个功能,我现在可以做到

c = xcorr(f1,f2)

s = arange(-400,400)

dx = 30/400

shift = s[c.argmax()] * dx

这是2.025,这个精度可以达到2.所以看起来Jamie是正确的,问题在于信号的填充如何与numpy相关.

所以,显然我的xcorr功能非常缓慢.现在的问题是,有没有办法让NumPy做类似的事情,或者我应该继续使用ctypes在C中编写我的算法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值