Как извлечь полосы частот из кратковременного преобразования Фурье - PullRequest
0 голосов
/ 08 марта 2019

Я воспроизводлю результаты, сообщенные автором в исследовательской работе.В котором он принимает STFT сигналов ЭЭГ.Входные данные имеют форму (1 X500) , и я использовал встроенную функцию библиотеки Scipy для вычисления STFT, а выходные данные имеют форму (257 x32) Мне нужно извлечь данныемежду двумя полосами частот (6-13 Гц) и (17-30 Гц) .Автор сообщает, что извлеченные полосы имеют размер (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]))
...