def peak_freq(signal,timebase,minfreq=0,maxfreq=1.e18):
"""
TODO: old code: needs review
this function only has a basic unittest to make sure it returns
the correct freq in a simple case.
"""
timebase = array(timebase)
sig_fft = fft.fft(signal)
sample_time = float(mean(timebase[1:]-timebase[:-1]))
#SRH modification, frequencies seemed a little bit off because of the -1 in the denominator
#Here we are trusting numpy....
#fft_freqs = (1./sample_time)*arange(len(sig_fft)).astype(float)/(len(sig_fft)-1)
fft_freqs = fft.fftfreq(len(sig_fft),d=sample_time)
# only show up to nyquist freq
new_len = len(sig_fft)/2
sig_fft = sig_fft[:new_len]
fft_freqs = fft_freqs[:new_len]
[minfreq_elmt,maxfreq_elmt] = searchsorted(fft_freqs,[minfreq,maxfreq])
sig_fft = sig_fft[minfreq_elmt:maxfreq_elmt]
fft_freqs = fft_freqs[minfreq_elmt:maxfreq_elmt]
peak_elmt = (argsort(abs(sig_fft)))[-1]
return [fft_freqs[peak_elmt], peak_elmt]
评论列表
文章目录