def get_freqs (signals, nbins=0):
""" extracts relative fft frequencies and bins them in n bins
:param signals: 1D or 2D signals
:param nbins: number of bins used as output (default: maximum possible)
"""
if signals.ndim == 1: signals = np.expand_dims(signals,0)
sfreq = use_sfreq
if nbins == 0: nbins = int(sfreq/2)
nsamp = float(signals.shape[1])
assert nsamp/2 >= nbins, 'more bins than fft results'
feats = np.zeros((int(signals.shape[0]),nbins),dtype='float32')
w = (fft(signals,axis=1)).real
for i in np.arange(nbins):
feats[:,i] = np.sum(np.abs(w[:,np.arange(i*nsamp/sfreq,(i+1)*nsamp/sfreq, dtype=int)]),axis=1)
sum_abs_pow = np.sum(feats,axis=1)
feats = (feats.T / sum_abs_pow).T
return feats
评论列表
文章目录