首页 > 解决方案 > 如何计算频带的平均值(mu,8-13Hz)?

问题描述

我需要计算 mu 频带(8-13Hz)的平均功率。我想用傅立叶变换来做,但我没有得到正确的结果。

我正在做什么对于这个问题并不重要,但它可能有助于理解代码:我有许多参与者的脑电图记录,想象左手或右手运动,我想计算他们在休息时的平均 mu 功率(不是想象运动)和它们在想象期间的平均mu功率(成像左/右手运动)然后使用公式:(想象中的力量-休息时的力量)/休息时的力量

但是,问题是,我几乎只得到正值,但它们应该是负值,所以我认为傅里叶变换存在问题。有人可以帮忙吗?

我的代码如下所示:

# left trial (C4)-------------------------------------------------

fs = 250. 

lrest = np.array(left_df.loc[left_df['Rest/Imagery'] == 'rest','C4'])
limagery = np.array(left_df.loc[left_df['Rest/Imagery'] == 'imagery','C4'])

low,high = 8,13 #mu waves 

### rest period 
        
#get amplitude of FFT 
fft_vals = np.absolute(np.fft.rfft(lrest))
        
#get frequencies for amplitude in Hz 
fft_freq = np.fft.rfftfreq(len(lrest),1.0/fs)
        
#take mean of fft amplutide for the mu band 
freq_ix = np.where((fft_freq >= low) & (fft_freq <= high))
meanlrest = np.mean(fft_vals[freq_ix])
        
### imagery period
fft_vals = np.absolute(np.fft.rfft(limagery))
        
fft_freq = np.fft.rfftfreq(len(limagery),1.0/fs)
freq_ix = np.where((fft_freq >= low) & (fft_freq <= high))
meanlimg = np.mean(fft_vals[freq_ix])
    
ERDS_left = (meanlimg - meanlrest)/meanlrest
        
ERDS_subject_left_fourier.append(ERDS_left)

# right trial (C3)--------------------------------------

rrest = np.array(right_df.loc[right_df['Rest/Imagery'] == 'rest','C3'])
rimagery = np.array(right_df.loc[right_df['Rest/Imagery'] == 'imagery','C3'])

### rest period    
fft_vals = np.absolute(np.fft.rfft(rrest))
        
fft_freq = np.fft.rfftfreq(len(rrest),1.0/fs)
        
freq_ix = np.where((fft_freq >= low) & (fft_freq <= high))
meanlrest = np.mean(fft_vals[freq_ix])
        
### imagery period
fft_vals = np.absolute(np.fft.rfft(rimagery))
        
fft_freq = np.fft.rfftfreq(len(limagery),1.0/fs)
freq_ix = np.where((fft_freq >= low) & (fft_freq <= high))
meanlimg = np.mean(fft_vals[freq_ix])
    
ERDS_left = (meanrimg - meanrrest)/meanrrest
        
ERDS_subject_right_fourier.append(ERDS_right)

标签: python

解决方案


自从我进行傅立叶变换以来已经有很长时间了,所以我可能是错的。您正在使用 np.absolute 这可以解释为什么您只得到肯定的答案。

如果您正在研究傅立叶变换,您听说过 scipy 吗?文档链接 在这里

这里有一个关于使用 scipy 绘制傅立叶变换的问题,我不太确定有用性,因为我的物理时代早已一去不复返了,但希望代码是相关的


推荐阅读