python - 使用 fft 返回向后输出来计算互相关

标签 python numpy fft cross-correlation

我正在尝试对两组数据进行交叉关联,方法是对两组数据进行傅里叶变换,并将第一个 fft 的共轭与第二个 fft 相乘,然后再转换回时间空间。为了测试我的代码,我将输出与 numpy.correlate 的输出进行比较。然而,当我绘制代码时(仅限于某个窗口),似乎两个信号的方向相反/镜像为零。

这就是我的输出

My output

我的代码:

import numpy as np
import pyplot as plt

phl_data = np.sin(np.arange(0, 10, 0.1))
mlac_data = np.cos(np.arange(0, 10, 0.1))
N = phl_data.size
zeroes = np.zeros(N-1)
phl_data = np.append(phl_data, zeroes)
mlac_data = np.append(mlac_data, zeroes)

# cross-correlate x = phl_data, y = mlac_data:
# take FFTs:
phl_fft = np.fft.fft(phl_data)
mlac_fft = np.fft.fft(mlac_data)
# fft of cross-correlation
Cw = np.conj(phl_fft)*mlac_fft
#Cw = np.fft.fftshift(Cw)
# transform back to time space:
Cxy = np.fft.fftshift(np.fft.ifft(Cw))
times = np.append(np.arange(-N+1, 0, dt),np.arange(0, N, dt))

plt.plot(times, Cxy)
plt.xlim(-250, 250)

# test against convolving:
c = np.correlate(phl_data, mlac_data, mode='same')
plt.plot(times, c)
plt.show()

(两个数据集都已用 N-1 个零填充)

最佳答案

documentation to numpy.correlate解释一下:

This function computes the correlation as generally defined in signal processing texts:

c_{av}[k] = sum_n a[n+k] * conj(v[n])

和:

Notes

The definition of correlation above is not unique and sometimes correlation may be defined differently. Another common definition is:

c'_{av}[k] = sum_n a[n] conj(v[n+k])

which is related to c_{av}[k] by c'_{av}[k] = c_{av}[-k].

因此,不存在唯一的定义,两个通用定义会导致输出相反。

关于python - 使用 fft 返回向后输出来计算互相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55427576/

相关文章:

python - K 重 CV 的变体,其中 size(test_set) > N/K

python - 无法在 crontab 中运行 python 脚本

python - 如何在不同标题的python中加入时间序列数据?

MATLAB:如何正确应用 ifft 将 "filtered"信号带回时间域?

c++ - OpenCV/C++ - 将图像转换为 double vector 以进行 FFT(快速傅里叶变换)

python - 从超像素段获取box2d

python - 对 scipy.sparse.csr_matrix 中的行求和

python - 用 Pandas 中的 NaN 比较两列并得到差异

jpeg - PIL 无法将模式 F 写入 jpeg

python - Robot Framework 测试脚本因 SSLError 而失败