首页 > 解决方案 > 如何在 python 中计算 PSD、中值频率和平均频率?

问题描述

我正在尝试使用滑动窗口从 python 上的 EMG 数据中提取频率特征。我对频率分析没有太多的了解,所以如果我有一些错误的概念,我提前道歉。

我正在尝试遵循本网站的定义:

中密度纤维板

更多信息

我的问题是我是否正确地执行了计算,如果不是,我该如何进行计算?

Windows_Size = 0.125 
Overlap = 0.5 
Bins = 256 

START, END = df_filtered['Time'].min(), df_filtered['Time'].max()
Fs = 2000 #EMG Sampling Frequency
P = 1.0 / Fs

Windows = np.arange(START + Windows_Size, END, Windows_Size * (1 - Overlap))
FREQ = []

for w in WINDOWS:
  win_start, win_end = w - Windows_Size, w

  for var in ['Biceps_Femoris_Sq_Correct']:
    value = df_filtered.loc[(win_start <= df_filtered['Time']) & (df_filtered['Time'] < win_end), var].values

    fft = np.fft.fft(value * np.hamming(value.shape[0]), n=Bins)[1:Bins//2]
    freq = np.fft.fftfreq(Bins, P)[1:Bins//2]
    amp = np.abs(fft)

    energy = amp ** 2 # Is this the right way to calculate power spectrum? 

    median_freq = energy/2 
    #mean_freq = EMG power spectrum is divided into two regions with equal 
    #amplitude... is this right?

    mean_freq = np.sum(energy * freq) / np.sum(energy) 

平均频率计算为 EMG 功率谱的乘积之和,频率除以功率谱的总和。这是计算平均频率的正确方法吗?

标签: pythonsignal-processingfftfeature-extractionfrequency-analysis

解决方案


推荐阅读