当前位置: 首页 > 面试题库 >

查找两个相似波形之间的时移

祁正浩
2023-03-14
问题内容

我必须比较两个时间-电压-电压波形。由于这些波形的源的特殊性,其中一个可以是另一个的时移形式。

我如何找到是否有时移?如果是的话,多少钱。

我正在Python中执行此操作,并希望使用numpy / scipy库。


问题答案:

scipy提供了一个相关函数,该函数对于较小的输入以及如果您需要非圆形相关也意味着信号将不会回绕的情况也可以很好地工作。请注意,在中mode='full',signal.correlation返回的数组的大小是信号大小的总和减去一(即len(a) + len(b) - 1),因此 from的值与argmax您期望的值相差了(signal size -1 = 20)

from scipy import signal, fftpack
import numpy
a = numpy.array([0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4, 3, 2, 1, 0, 0, 0, 0, 0])
b = numpy.array([0, 0, 0, 0, 0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4, 3, 2, 1, 0])
numpy.argmax(signal.correlate(a,b)) -> 16
numpy.argmax(signal.correlate(b,a)) -> 24

这两个不同的值对应于移位是ina还是b

如果您需要循环相关并且要获得较大的信号大小,可以使用卷积/傅立叶变换定理,但要注意的是,相关性与卷积非常相似但不完全相同。

A = fftpack.fft(a)
B = fftpack.fft(b)
Ar = -A.conjugate()
Br = -B.conjugate()
numpy.argmax(numpy.abs(fftpack.ifft(Ar*B))) -> 4
numpy.argmax(numpy.abs(fftpack.ifft(A*Br))) -> 17

同样,这两个值对应于您是解释a还是b

负共轭是由于卷积翻转功能之一而引起的,但相关没有翻转。您可以通过反转信号之一然后进行FFT,或者对信号进行FFT然后再采用负共轭来消除翻转。即以下是正确的:Ar = -A.conjugate() = fft(a[::-1])



 类似资料:
  • 如何获得一个字符串与Python中的另一个字符串相似的概率? 我想得到一个十进制值,如0.9(意味着90%)等。最好使用标准Python和库。 e、 g。

  • 问题内容: 如何获得字符串与Python中的另一个字符串相似的概率? 我想要一个像0.9(表示90%)之类的十进制值。最好使用标准Python和库。 例如 问题答案: 有一个内置的。 使用它:

  • 我正在尝试编写一个脚本,在两列数据中分别给出两个小时之间的每个小时。 永远不会有一个负整数,列表只包含数字0-23。以下是示例数据: 所以,我需要它来打印; 七点八点 7:00, 8:00, 9:00 8:00, 9:00, 10:00, 11:00, 12:00, 13:00 等 我需要用一个计数器来计数每一次发生了多少次。

  • 问题内容: 如何使用PHP查找两个日期之间的天数? 问题答案:

  • 我们从外部来源发送两个日期作为字符串。然后我们计算日期之间的差异,看看它们工作了多少小时。 由于时间的变化,一年两次——我们的计算会出错。我们使用Java。你怎么解决这样的问题? 这两个日期以字符串形式出现在一个文件中,格式如下。“2019-10-07上午11:07”

  • 问题内容: 我一直在遵循一个教程,该教程显示了如何制作word2vec模型。 本教程使用以下代码: (未提供其他信息,但我想这来自) 现在,我已经对该方法进行了一些研究,但对此却知之甚少。据我了解,它已被许多功能取代。 我应该使用什么?有,它有一个参数(似乎正确),但没有参数。 在这种情况下我可以使用什么? 问题答案: Keras文档中有一些尚不清楚的事情,我认为了解这些至关重要: 对于keras