Source code for scisalt.scipy.fft
#!/usr/bin/env python3
import os as _os
on_rtd = _os.environ.get('READTHEDOCS', None) == 'True'
if not on_rtd:
import numpy as _np
import scipy as _sp
from .fill_missing_timestamps import fill_missing_timestamps
[docs]def fft(values, freq=None, timestamps=None, fill_missing=False):
"""
Adds options to :func:`scipy.fftpack.rfft`:
* *freq* is the frequency the samples were taken at
* *timestamps* is the time the samples were taken, to help with filling in missing data if *fill_missing* is true
"""
# ======================================
# Get frequency
# ======================================
if freq is None:
from .. import qt
freq = qt.getDouble(title='Fourier Analysis', text='Frequency samples taken at:', min=0, decimals=2, value=1.0)
freq = freq.input
if fill_missing:
(t_x, x_filled) = fill_missing_timestamps(timestamps, values)
else:
x_filled = values
num_samples = _np.size(x_filled)
xfft = _sp.fftpack.rfft(x_filled)
factor = freq/num_samples
num_fft = _np.size(xfft)
f = factor * _np.linspace(1, num_fft, num_fft)
xpow = _np.abs(xfft*_np.conj(xfft))
# ======================================
# No DC term
# ======================================
xpow = xpow[1:]
f = f[1:]
return (f, xpow)