标签: cross-correlation

在时间戳数组上使用互相关是否有意义?

我想找到两个时间戳数组之间的偏移量.它们可以代表两个音轨中的哔哔声.

注意:两个轨道中可能有额外或缺少的开始.

我找到了一些关于互相关的信息(例如https://dsp.stackexchange.com/questions/736/how-do-i-implement-cross-correlation-to-prove-two-audio-files-are-similar)看起来很有希望.

我假设每个音轨的持续时间为10秒,并将哔哔声表示为"方波"的峰值,采样率为44.1 kHz:

import numpy as np

rfft = np.fft.rfft
irfft = np.fft.irfft

track_1 = np.array([..., 5.2, 5.5, 7.0, ...])
# The onset in track_2 at 8.0 is "extra," it has no
# corresponding onset in track_1
track_2 = np.array([..., 7.2, 7.45, 8.0, 9.0, ...])
frequency = 44100
num_samples = 10 * frequency
wave_1 = np.zeros(num_samples)
wave_1[(track_1 * frequency).astype(int)] = 1
wave_2 = np.zeros(num_samples)
wave_2[(track_2 * frequency).astype(int)] = 1
xcor = irfft(rfft(wave_1) * np.conj(rfft(wave_2)))
offset …
Run Code Online (Sandbox Code Playgroud)

python waveform fft cross-correlation

8
推荐指数
1
解决办法
449
查看次数

使用Apple Accelerate Framework中的vDSP_conv执行自相关

我需要执行数组(向量)的自相关,但我找不到正确的方法.我相信我需要Accelerate Framework中的方法"vDSP_conv",但我无法按照如何成功设置它.最让我失望的是需要2个输入.也许我有错误的功能,但我找不到一个在单个矢量上运行的功能.

文档可以在这里找到

从网站复制

vDSP_conv

对两个向量执行相关或卷积; 单精度.

void vDSP_conv(const float __vDSP_signal [],vDSP_Stride __vDSP_signalStride,const float __vDSP_filter [],vDSP_Stride __vDSP_strideFilter,float __vDSP_result [],vDSP_Stride __vDSP_strideResult,vDSP_Length __vDSP_lenResult,vDSP_Length __vDSP_lenFilter);

参数

__vDSP_signal

Input vector A. The length of this vector must be at least __vDSP_lenResult + __vDSP_lenFilter - 1.
Run Code Online (Sandbox Code Playgroud)

__vDSP_signalStride

The stride through __vDSP_signal.
Run Code Online (Sandbox Code Playgroud)

__vDSP_filter

Input vector B.
Run Code Online (Sandbox Code Playgroud)

__vDSP_strideFilter

The stride through __vDSP_filter.
Run Code Online (Sandbox Code Playgroud)

__vDSP_result

Output vector C.
Run Code Online (Sandbox Code Playgroud)

__vDSP_strideResult

The stride through __vDSP_result.
Run Code Online (Sandbox Code Playgroud)

__vDSP_lenResult

The length of __vDSP_result.
Run Code Online (Sandbox Code Playgroud)

__vDSP_lenFilter

The length of __vDSP_filter.
Run Code Online (Sandbox Code Playgroud)

举个例子,假设你有一个数组float x = …

c iphone accelerate-framework cross-correlation

7
推荐指数
1
解决办法
3449
查看次数

解释openCV匹配模板的交叉关联和规范化

对于matchTemplate()的CV_TM_CCORR_NORMED方法,我的老板和我不同意这是怎么回事; 在openCV中.

你能解释一下这里发生了什么,特别是这个等式的平方根方面.

opencv normalization cross-correlation matchtemplate

7
推荐指数
1
解决办法
5990
查看次数

使用互相关查找两个信号的时移

我有两个相互关联的信号,它们同时被两个不同的测量设备捕获。由于这两个测量不是时间同步的,因此我想计算它们之间的时间延迟很小。此外,我需要知道哪个信号是领先的。

可以假设如下:

  • 没有或只有非常少的噪音
  • 算法的速度不是问题,只有准确性和鲁棒性
  • 以高采样率 (>10 kHz) 捕获信号几秒钟
  • 预期时间延迟 < 0.5s

我认为为此目的使用互相关。非常感谢如何在 Python 中实现它的任何建议。

请让我知道我是否应该提供更多信息以找到最合适的算法。

python signal-processing lag python-2.7 cross-correlation

7
推荐指数
2
解决办法
2万
查看次数

numpy互相关 - 矢量化

我有大量的交叉相关来计算,我正在寻找最快的方法.我假设向量化问题会有所帮助,而不是用循环来做

我有一个标记为电极x时间点x试验的3D阵列(形状:64x256x913).我想计算每次试验时每对电极的时间点的最大互相关性.

具体来说:对于每次试验,我想取每对电极组合并计算每对的最大互相关值.这将导致单行/向量中的4096(64*64)个最大互相关值.这将针对每个试验进行,将每个行/向量堆叠在彼此之上,从而产生包含最大互相关值的最终2D阵列形状913*4096

这是很多计算,但我想尝试找到最快的方法来做到这一点.我使用列表作为容器来模拟一些原型代码,这可能有助于更好地解释问题.可能存在一些逻辑错误,但无论哪种方式代码都不能在我的计算机上运行,​​因为计算python只是冻结了这么多.就这个:

#allData is a 64x256x913 array

all_experiment_trials = []
for trial in range(allData.shape[2]):
    all_trial_electrodes = []
    for electrode in range(allData.shape[0]):
        for other_electrode in range(allData.shape[0]):
            if electrode == other_electrode:
                pass
            else:
                single_xcorr = max(np.correlate(allData[electrode,:,trial], allData[other_electrode,:,trial], "full"))
                all_trial_electrodes.append(single_xcorr)
    all_experiment_trials.append(all_trial_electrodes)
Run Code Online (Sandbox Code Playgroud)

对于这类事情,显然循环非常慢.是否有使用numpy数组的矢量化解决方案?

我已经检查了像correlate2d()之类的东西,但我认为它们并不适用于我的情况,因为我没有将2个矩阵相乘

python arrays numpy correlation cross-correlation

6
推荐指数
1
解决办法
1023
查看次数

测量两个不规则图之间的相似性

我有两条不规则的线作为 [x,y] 坐标列表,其中有波峰和波谷。列表的长度可能略有不同(不相等)。我想测量它们的相似性,以便检查峰和谷(具有相似的深度或高度)是否以适当的间隔出现并给出相似性度量。我想在 Python 中做到这一点。是否有任何内置功能可以做到这一点?

在此处输入图片说明 在此处输入图片说明

python signal-processing matplotlib correlation cross-correlation

6
推荐指数
2
解决办法
8163
查看次数

如何使用statsmodels库中的ccf()方法?

ccf()我在使用(Python)库中的方法时遇到一些问题statsmodels。等效操作在 R 中运行良好。

ccf产生两个变量之间的互相关函数,在我的示例ABA我有兴趣了解领先指标的程度B

我正在使用以下内容:

import pandas as pd
import numpy as np
import statsmodels.tsa.stattools as smt
Run Code Online (Sandbox Code Playgroud)

我可以模拟A如下B

np.random.seed(123)
test = pd.DataFrame(np.random.randint(0,25,size=(79, 2)), columns=list('AB'))
Run Code Online (Sandbox Code Playgroud)

当我运行时ccf,我得到以下信息:

ccf_output = smt.ccf(test['A'],test['B'], unbiased=False)
ccf_output    
array([ 0.09447372, -0.12810284,  0.15581492, -0.05123683,  0.23403344,
    0.0771812 ,  0.01434263,  0.00986775, -0.23812752, -0.03996113,
   -0.14383829,  0.0178347 ,  0.23224969,  0.0829421 ,  0.14981321,
   -0.07094772, -0.17713121,  0.15377192, -0.19161986,  0.08006699,
   -0.01044449, -0.04913098,  0.06682942, -0.02087582,  0.06453489,
    0.01995989, -0.08961562,  0.02076603, …
Run Code Online (Sandbox Code Playgroud)

python time-series cross-correlation statsmodels

6
推荐指数
1
解决办法
1万
查看次数

如何使用互相关找到两个时间序列之间的滞后

假设这两个系列是:

x = [4,4,4,4,6,8,10,8,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
y = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,8,10,8,6,4,4]
Run Code Online (Sandbox Code Playgroud)

系列 x 明显滞后 y 12 个时间段。但是,按照Python 互相关中的建议使用以下代码:

import numpy as np
c = np.correlate(x, y, "full")
lag = np.argmax(c) - c.size/2
Run Code Online (Sandbox Code Playgroud)

导致错误的滞后 -0.5。
这是怎么回事?

python numpy cross-correlation

6
推荐指数
1
解决办法
7348
查看次数

如何使用Scipy以亚像素精度执行图像互相关

下图显示了两个半径相同的圆,使用抗锯齿渲染,只是左圆水平移动了一半像素(请注意,圆水平中心在左侧的像素中间,在右侧的像素边界处)。

如果执行互相关,则可以在相关数组上取最大值的位置,然后计算偏移。但是由于像素位置始终是整数,所以我的问题是:

“如何使用Numpy / Scipy中的互相关来获得两个图像之间的子像素(浮点)偏移?”

在我的脚本中,我使用scipy.signal.correlate2dscipy.ndimage.filters.correlate,它们似乎产生相同的结果。

这里的圆圈只是示例,但是我特定于域的功能倾向于具有亚像素偏移,并且当前仅获得整数偏移会导致效果不佳...

任何帮助都感激不尽!

在此处输入图片说明

python image-processing scipy cross-correlation

5
推荐指数
1
解决办法
7175
查看次数

numpy和statsmodels在计算相关性时会给出不同的值,如何解释?

我找不到为什么计算两个系列A和B之间的相关性numpy.correlate给出的结果与我得到的结果不同的原因statsmodels.tsa.stattools.ccf

以下是我提到的这种差异的一个例子:

import numpy as np
from matplotlib import pyplot as plt
from statsmodels.tsa.stattools import ccf

#Calculate correlation using numpy.correlate
def corr(x,y):
    result = numpy.correlate(x, y, mode='full')
    return result[result.size/2:]

#This are the data series I want to analyze
A = np.array([np.absolute(x) for x in np.arange(-1,1.1,0.1)])
B = np.array([x for x in np.arange(-1,1.1,0.1)])

#Using numpy i get this
plt.plot(corr(B,A))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

#Using statsmodels i get this
plt.plot(ccf(B,A,unbiased=False))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

结果看起来质量上有所不同,这种差异来自哪里?

python numpy cross-correlation statsmodels

5
推荐指数
1
解决办法
1953
查看次数