numpy的两个数据集有什么区别。

2024-09-30 18:29:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到sin曲线的周期,并且可以找到sin(t)的正确周期。
但是对于sin(k*t),频率会发生偏移。我不知道它是如何变化的。
只有当我知道数据集是sin(0.6*t)时,我才能调整下面的interd的值以获得正确的信号。在

为什么我可以为sin(t)得到正确的结果?
任何人都能根据我的密码检测出正确的信号?还是一点零钱?在

下图是sin(0.6*t)的功率谱密度。
数据集如下:

1,sin(1*0.6)
2,sin(2*0.6)
3,sin(3*0.6)
.........
2000,sin(2000*0.6)

我的密码是:

^{pr2}$

fig


Tags: 数据密码信号sin功率曲线频率密度
1条回答
网友
1楼 · 发布于 2024-09-30 18:29:37

我觉得你把事情弄得太复杂了。如果您认为timepoints内,那么interd就是{}(在{}中的值之间的差)。这对我来说很好:

import numpy as np
import matplotlib.pyplot as pl

# you can do this in one line, that's what 'unpack' is for:
timepoints, intensity = np.loadtxt('dataset', usecols=(0,1), unpack=True, delimiter=",")

interd = timepoints[1] - timepoints[0] # if this is 1, it can be ignored
sp = np.fft.fft(intensity)
freq = np.fft.fftfreq(len(intensity), d=interd)

pl.plot(np.fft.fftshift(freq), np.fft.fftshift(np.abs(sp)))
pl.xlabel("frequency(Hz)")
pl.show()

你还会注意到我没有对频率进行排序,这就是fftshift的用途。在

另外,不要做np.sqrt(sp.imag**2 + sp.real**2),这就是np.abs的目的:)

simpler

如果采样不够(频率高于采样率,即2*pi/interd < 0.5*k),那么{}无法知道丢失了多少数据,所以它假设您没有丢失任何数据。你不能指望它事先知道。这是你给它的数据:

input waves

相关问题 更多 >