如何从短时傅立叶变换中提取频带

时间:2019-03-08 17:48:18

标签: python scipy signal-processing fft

我正在复制作者在研究论文中报告的结果。在其中他采用STFT的EEG信号。输入数据的形状为(1 X500),我使用了Scipy库内置函数来计算STFT,输出的形状为(257 x32) (6-13 Hz)和(17-30 Hz)两个频段之间的数据。作者报告提取的频带大小为(16 X 32)和(23 X 32),但是在任何设置下,我都无法获得此频率分辨率。我尝试与作者联系,但到目前为止没有任何回应。我希望你们中的一些人可以指引我正确的方向。 非常感谢。

wlen=64
nfft=1024
temp=S1_769_test[3,0,:]
win=signal.get_window(window='blackman',Nx=wlen, fftbins=True)

f, t, Zxx = signal.stft(temp,fs=500,window=win,noverlap=50,nfft=nfft,nperseg=wlen,
                        boundary=None,padded=False,return_onesided=True) 

dat=np.abs(Zxx)/250 


if  (nfft % 2):  # odd nfft excludes Nyquist point
     dat[2:,:] = dat[2:,:]*2

else:            # even nfft includes Nyquist point
     dat[2:-1,:]= dat[2:-1,:]*2


band1=np.where((f >= 6) & (f <=13))
band2=np.where((f >= 17) & (f <=30))

extracted1=np.squeeze(dat[band1,:])
extracted2=np.squeeze(dat[band2,:])


extracted2 = cv2.resize(extracted2, dsize=(32,15), interpolation=cv2.INTER_CUBIC)
Combined=np.vstack([extracted1,extracted2])
print (len(band2[0]))
print (len(band1[0]))

0 个答案:

没有答案