代码之家  ›  专栏  ›  技术社区  ›  candid

用于特征提取的Python FFT

  •  8
  • candid  · 技术社区  · 9 年前

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

    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_数据

    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...
    

    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 回复  |  直到 9 年前
        1
  •  2
  •   Egor Zamotaev    6 年前

    所以,当你们将信号分解成频谱时,下一步你们可以试着了解哪些频率与你们的应用相关。但从单光谱图像中得到它有点困难。请记住,频谱中的一个频率单元-它是受窄频率范围限制的相同基本信号。有些频率对您的任务可能并不重要。

    更好的方法,如果你能试试的话 STFT 方法来了解信号在频率-时间域中的特征。例如,你可以阅读 this article

    推荐文章