如何在非均匀DFFT中获取频率?

问题描述 投票:0回答:2

我的代码如下所示:

import matplotlib.pyplot as plt
import numpy as np
from nfft import nfft


# number of sample points
N = 400

# Simulated non-uniform data
x = np.linspace(0.0, 1 / 2, N) + np.random.random((N)) * 0.001
y = np.sin(50.0 * 2.0 * np.pi * x) + 0.5 * np.sin(80.0 * 2.0 * np.pi * x)
yf = np.abs(nfft(x, y))

fig, axs = plt.subplots(1)
fig_f, axs_f = plt.subplots(1)

axs.plot(x, y, '.', color='red')
axs_f.plot(x, yf, color='red')

graphs produced by code

如何转换第二张图上的值来表示频率?

不需要使用

nfft
模块,使用
pynfft
scipy
的答案将不胜感激。

另请参阅: 如何获取 FFT 中每个值的频率?

python numpy fft
2个回答
1
投票

以下似乎有效。 请注意在绘制傅立叶变换图之前插入的线,以生成频率,并且我们绘制 N/2 数据的图。

import matplotlib.pyplot as plt
import numpy as np
from nfft import nfft

# number of sample points
N = 400

# Simulated non-uniform data
x = np.linspace(0.0,0.5-0.02, N) + np.random.random((N)) * 0.001
print(x)

print( 'random' )
print( np.random.random((N)) * 0.001 )

y = np.sin(50.0 * 2.0 * np.pi * x) + 0.5 * np.sin(80.0 * 2.0 * np.pi * x)
yf = np.abs(nfft(x, y))

fig, axs = plt.subplots(1)
fig_f, axs_f = plt.subplots(1)

axs.plot(x, y, '.', color='red')

xf = np.fft.fftfreq(N,1./N)

axs_f.plot(xf[:int(N/2)], yf[:int(N/2)], color='red')

plt.show()

输出:

enter image description here


0
投票

我有一些问题。

频率应为 xf = np.fft.fftfreq(N,0.5/N)

但是,它使得频率和幅度不匹配。

有人可以帮助我吗?谢谢!

另外,nfft 函数的 x 限制范围是多少?我没有找到任何相关描述。

© www.soinside.com 2019 - 2024. All rights reserved.