Python中的FFT用于特征提取

8
我希望您能够协助翻译有关IT技术的内容。以下是需要翻译的文本内容:

我想对人体加速度计数据执行特征提取,以用于活动识别。我的数据采样率为100Hz。

从我所研究的各种来源来看,FFT是一种可行的方法。我已经以滑动窗口格式获得了数据,每个窗口的长度为256。我使用Python和NumPy库进行操作的代码如下:

import numpy as np

def fft_transform (window_data):

    fft_data = []
    fft_freq = []
    power_spec = []

    for window in window_data:

        fft_window = np.fft.fft(window)
        fft_data.append(fft_window)

        freq  = np.fft.fftfreq(np.array(window).shape[-1], d=0.01)
        fft_freq.append(freq )

        fft_ps = np.abs(fft_window)**2
        power_spec.append(fft_ps)

    return fft_data, fft_freq, power_spec

这将输出如下内容:

fft_data

array([  2.92394828e+01 +0.00000000e+00j,
        -6.00104665e-01 -7.57915977e+00j,
        -1.02677676e+01 -1.55806119e+00j,
        -7.17273995e-01 -6.64043705e+00j,
         3.45758079e+01 +3.60869421e+01j,
         etc..

频率数据

array([  0.      ,   0.390625,   0.78125 ,   1.171875,   1.5625  , etc...

功率谱

array([  8.54947354e+02,   5.78037884e+01,   1.07854606e+02,
         4.46098863e+01,   2.49775388e+03,   etc...

我也使用了这段代码绘制了结果——其中fst_ps是功率谱的第一个数组/窗口,而fst_freq是fft_freq数据的第一个窗口/数组。
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(width, height))

fig1= fig.add_subplot(221)
fig2= fig.add_subplot(222)
fig1.plot(fst_freq, fst_ps)
fig2.plot(fst_freq, np.log10(fst_ps))
plt.show()

FFT

我想请教一些有关提取特征的建议。谢谢!

1个回答

2
因此,当你将信号分解为频谱时,下一步可以尝试理解哪些频率对你的应用程序是相关的。但是从单个频谱图中获得这一点相当困难。请记住,频谱中的一个频率段是由狭窄频率范围所限制的基本信号。有些频率可能对你的任务不重要。
更好的方法是,如果你能够尝试使用STFT方法来理解你的信号特征在频率-时间域中。例如,你可以阅读this article关于Python上的STFT方法的文章。通常,这种方法被应用于搜索某种时间-频率模式,这些模式可以被识别为特征。例如,在人类语音模式(如文章中所述)中,你可以看到具有持续浮动频率、持续时间和频率边界特征的模式。你需要获取你的信号的STFT以查找声谱图上的某些模式,以提取你的任务的特征。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接