DFT (FFT) 不规则时间步长的补偿

信息处理 fft 信号分析 采样 奈奎斯特 时频
2022-02-13 03:32:43

我想对不定期发布的温度传感器的频率谱数据运行聚类算法(svm,knn)。这是进行 FFT 的温度数据:

在此处输入图像描述 我得到了这个温度数据的平均频率以及数据帧中每个温度传感器的平均频率,平均每 18 分钟一次,2 点之间的最长距离是 3 小时:

# group by short id
groups = df.groupby('id')
time_diff = groups.apply(lambda df: df.published_at.diff().mean())

隔离一系列图形化的温度数据:

signal = df.loc[df['_id'] == 'A1']['temperature']

存储的信号大小和平均采样频率作为变量:

# sampling frequency: 
Fs = time_diff[:1]
Fs
Out[217]: 00:18:54.085526

# size 
S = signal.size
Then took the fft and calculated dBs

X = np.fft.fft(signal)
X_db = 20*np.log10(2*np.abs(X)/S)
And plotted the results:

plt.plot(X)
plt.show()

在此处输入图像描述

plt.plot(X_db)
plt.show()

在此处输入图像描述

这些图表直观地看起来不像它们对应于原始数据。fft 的目标是然后使用 SVM 对数据进行分类,但是,我不确定哪个变体 fft 是合适的,也不确定是否使用平均时间频率。

2个回答

除了已经提到的非均匀 DFT 之外,一种选择是简单地在规则间隔的网格上插值数据,方法是使用与最小时间步长大致相同的时间步长,然后对插值数据进行 DFT。