【问题标题】:Calculating FFT Features from a discrete signal从离散信号计算 FFT 特征
【发布时间】:2020-01-22 20:38:25
【问题描述】:

我有一组以 10Hz 采样的均匀信号(意味着两个连续的数据点相隔 100 毫秒)。这实际上是 3d 陀螺仪的 3 个轴的大小,阵列包含 30 个数据点(在 3 秒内)。 我将这个系列的频率绘制如下

import numpy as np
import matplotlib.pyplot as pl

sample_rate = 10
x = np.array([318.45,302.78,316.47,334.14,333.41,326.15,320.07,318.68,314.12,308.64,300.15,304.33,318.42,322.72,329.56,339.18,338.03,343.27,351.44,353.23,352.35,352.88,353.43,352.14,351.28,352.82,353.36,353.35,353.19,353.82])
x = np.array(x) - np.mean(x)
p = np.abs(np.fft.rfft(x))
f = np.linspace(0, sample_rate/2, len(p))
pl.plot(f, p)
pl.show()

谁能告诉我我的设计是否正确? 我打算计算以下特征(从上面的信号)

  1. 直流分量
  2. 光谱能量
  3. 信息熵
  4. 主要频率成分
  5. 主要频率
  6. FFT 分析前五个分量的大小

有人可以帮我填写上面的代码来计算这些特征吗?

----@RoadRunner66:请看下面我的问题,因为我无法给你回复很长的回复----

感谢您的回答和您的代码,

关于您的问题,数据来自测量欧拉角的陀螺仪。

那么 (sum x[i]**2 : 3357757.0) 是光谱能量吗?如果是,那么我是否需要通过将此数字除以 n 来对其进行标准化? (或像你那样乘以 n),但是下面两篇论文的定义有所不同。

正如在第一篇论文(下面的第一个链接)中所说,“第二个频域特征集被选择为频谱能量,它被定义为平方 FFT 系数的总和”

在第二篇论文(第二个链接)中,他们以另一种方式表示“光谱能量:光谱系数的平方和除以窗口中的样本数”

那么主频率呢,它与主频率的含义(术语)相同吗?我猜主频率是指唯一具有最高频谱峰值的频率?

我像这样将频率和等效幅度打印成两行

我认为您像黄色波纹管一样打印了前 5 的大小。我不确定“前 5 个组件”的定义

如果我们像您指出的那样使用前连续的五个,那么包含那些(例如频率 0 或 0.666)并将它们输入我的预测模型(如下所述)是否有意义,因为它太低了与其他人相比。如果返回频谱清晰,主频为 1hz 和 3hz,那么 0.5hz 或 1.5hz 频率的幅度可能接近于零。

难道“FFT 分析的前五个分量的幅度”是我用蓝色突出显示的“前五个主要分量的幅度”吗?这个术语是指 5 个值还是仅指 1 个值(5 个平方和的平方根)? 如果它指的是 5 个值(很可能是),那么在比较两个信号之间的差异时,我认为幅度上排名前 5 位的主要分量将是一个更好的选择?

顺便说一句,第二篇论文也写了“前5-FFT系数:前5个快速傅里叶变换系数是因为它们捕获了主要的频率分量,并且使用附加系数并没有提高准确度”

坦率地说,我正在处理奶牛活动的问题,我的策略是将传感器数据分割成时间窗口(3、5、7..秒)并从每个窗口中提取特征,然后将它们提供给机器学习模型。

(我的数据包括一个 3d 陀螺仪和一个附在牛脖子上的 3d 加速度计,传感器数据采样为 10Hz)

我想结合两种特征,一种是时域特征,一种是频域特征。

我阅读了论文并发现了上述一组频域特征,其中包括术语“FFT 分析的前五个分量的幅度”(来自本文https://ieeexplore.ieee.org/abstract/document/4663615) 从这个https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4634510/

他们将第二个称为“第一个 5-FFT 系数:前 5 个快速傅里叶变换系数被采用,因为它们捕获了主要的频率分量,并且使用附加系数并没有提高准确性。”

非常感谢您的阅读和回答!

【问题讨论】:

  • 我认为光谱能量的问题是一个定义问题,我只是试图检查 Parseval 定理是否相等。根据您发现的第一个定义,它将是我引用的内容的 1/n。至于前 5 个组件,实际上仅取决于您的用例(不是 python 或光谱方法的问题),即您想要建模的内容。如果其中一头奶牛患有某种颤抖疾病,那么 5 Hz 的最高频率可能与检测相关,但对于一般运动,您会关心低频。
  • @roadrunner66,你能告诉我为什么我们应该关心低频吗?因为低的通常也有低震级?
  • 在您的情况下,低频的幅度最高(1/3 Hz、1Hz、2Hz)。看看下面的第 2 和第 4 个图。这也是自然界的一个普遍特征(电子学中的 1/f 噪声,光学中的表面质量,许多其他示例)。如果在高频处有大量能量,那实际上是个问题。当您接近奈奎斯特频率 (fN) 时,您希望幅度非常低,否则您会遇到混叠问题(即您认为某物的频率为 fN-fo,但实际上它的频率为 fN+fo 甚至更高。
  • 谢谢。因此,在信号采样率为 3Hz 的情况下,我应该关心 0、1/3、2/3、1、4/3 处频率的前 5 个幅度。对吗?当高频存在大量能量时,您能否详细解释一下这个问题?这里的问题是否意味着它不是电信号的自然属性或来自牛的问题(比如牛有疾病)?
  • 不,这意味着奶牛的某些运动发生的速度超过了 10 Sa/sec 采样率允许捕获的速度。见en.wikipedia.org/wiki/Aliasing

标签: python fft sensors analysis


【解决方案1】:

您已经完成了大部分工作。这似乎是针对班级分配的,因此这可能解释了数据的稀疏性,而这些数据实际上并没有太多可取之处。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

sample_rate = 10 #Hz

x = np.array([318.45,302.78,316.47,334.14,333.41,326.15,320.07,318.68,314.12,308.64,
              300.15,304.33,318.42,322.72,329.56,339.18,338.03,343.27,351.44,353.23,
              352.35,352.88,353.43,352.14,351.28,352.82,353.36,353.35,353.19,353.82])
n=len(x)
print(f'number of points n : {n}')
t= np.linspace(0,3, n)     # time according to your description
mn=np.mean(x)
print(f' mean = {mn:.3f} unit')
print(f' sum x[i]**2  : {np.sum(x**2) :.1f} unit^2 ')

pr = np.abs(np.fft.rfft(x))/n
print()
print(f' DC peak :  {pr[0]};  this makes choice of normalization 1/n meaningful')

print(f' n *sum X[k]**2   : {np.sum(np.abs(pr)**2)*n :.1f} unit^2 ') 
f = np.linspace(0, sample_rate/2, len(pr))   # 10 Sa/sec, so 5 Hz is Nyquist limit

plt.figure(figsize=(20,5))

plt.subplot(141)
plt.plot(t,x,'.-')
plt.title('original data') 

plt.subplot(142)
plt.plot(f, pr,'.-')
plt.title('spectrum')


plt.subplot(143)
xf = np.array(x) - mn   #  remove the DC
plt.plot(t, xf,'.-')
plt.title('original data with DC removed')

plt.subplot(144)
pr = np.abs(np.fft.rfft(xf))/n
plt.plot(f, pr, '.-');
plt.title('spectrum (DC removed) ')

直流峰值与原始信号在 334 个单位处的平均值相同。

频谱能量(参见Parseval's Theorem)在时域和频域中是相同的。

我不知道您应该使用什么信息熵定义(参见例如Approx. entropy)。

频谱中的主要频率(去除 DC 后)为 1/3 Hz、1 Hz 和 2 Hz,其中 1/3 Hz 最大。我打印了前五个的大小。

对我来说一个重要的问题是数据的物理意义。它们是角度吗?如果有,在哪个单位?

请注意,可以“看到”原始数据中 1/3 Hz(一波超过 3 秒)、1 Hz(一波超过 1 秒)和 2 Hz(一波超过 1/2 秒)的频率分量),分别。

【讨论】:

  • 感谢您的回答。由于我无法用很长的答案回复您,我将我的回复更新到上面的问题正文部分。您能否向上滚动并阅读我的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-08-15
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
相关资源
最近更新 更多