当前位置:  开发笔记 > 编程语言 > 正文

从xy点列表中进行离散傅里叶变换

如何解决《从xy点列表中进行离散傅里叶变换》经验,为你挑选了1个好方法。

我想要做的是,从具有周期性模式的xy点列表中,计算周期.凭借我有限的数学知识,我知道傅立叶变换可以做到这一点.

我正在编写Python代码.

我在这里找到了一个相关的答案,但是它使用了均匀分布的x轴,即dt固定,这对我来说并非如此.由于我不太了解它背后的数学,我不确定它是否能在我的代码中正常工作.

我的问题是,它有效吗?或者,是否有一些方法numpy可以完成我的工作?或者,我该怎么办?

编辑:所有值都是Pythonic float(即双精度)



1> Warren Wecke..:

对于间距不均匀的样本,可以使用scipy.signal.lombscargle计算Lomb-Scargle周期图.这是一个例子,信号的主频为2.5 rad/s.

from __future__ import division

import numpy as np
from scipy.signal import lombscargle
import matplotlib.pyplot as plt


np.random.seed(12345)

n = 100
x = np.sort(10*np.random.rand(n))
# Dominant periodic signal
y = np.sin(2.5*x)  
# Add some smaller periodic components
y += 0.15*np.cos(0.75*x) + 0.2*np.sin(4*x+.1)
# Add some noise
y += 0.2*np.random.randn(x.size)

plt.figure(1)
plt.plot(x, y, 'b')
plt.xlabel('x')
plt.ylabel('y')
plt.grid()

dxmin = np.diff(x).min()
duration = x.ptp()
freqs = np.linspace(1/duration, n/duration, 5*n)
periodogram = lombscargle(x, y, freqs)

kmax = periodogram.argmax()
print("%8.3f" % (freqs[kmax],))

plt.figure(2)
plt.plot(freqs, np.sqrt(4*periodogram/(5*n)))
plt.xlabel('Frequency (rad/s)')
plt.grid()
plt.axvline(freqs[kmax], color='r', alpha=0.25)
plt.show()

该脚本打印2.497并生成以下图表:

信号图

Lomb-Scargle周期图的图

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有