pyfar.dsp.fft¶
The following documents the FFT functionality. More details and background is
given in the FFT concepts
.
Functions:
|
Calculate the IFFT of a single-sided Fourier spectrum. |
|
Normalize a Fourier spectrum. |
|
Calculate the FFT of a real-valued time-signal. |
|
Returns the positive discrete frequencies for which the FFT is calculated. |
- pyfar.dsp.fft.irfft(spec, n_samples, sampling_rate, fft_norm)[source]¶
Calculate the IFFT of a single-sided Fourier spectrum.
The function takes only the right-hand side of the spectrum and returns a real-valued time signal. The normalization is considered according to
'fft_norm'
as described innormalization
andFFT concepts
.- Parameters:
spec (array, complex) – The complex valued right-hand side of the spectrum with dimensions (…, n_bins)
n_samples (int) – The number of samples of the corresponding time signal. This is crucial to allow for the correct transform of time signals with an odd number of samples.
sampling_rate (number) – sampling rate in Hz
fft_norm ('none', 'unitary', 'amplitude', 'rms', 'power', 'psd') – See
normalization
.
- Returns:
data – Array containing the time domain signal with dimensions (…,
'n_samples'
)- Return type:
array, double
- pyfar.dsp.fft.normalization(spec, n_samples, sampling_rate, fft_norm='none', inverse=False, single_sided=True, window=None)[source]¶
Normalize a Fourier spectrum.
Apply normalizations defined in [1] to the DFT spectrum. Note that the phase is maintained in all cases, i.e., instead of taking the squared absolute values for
'power'
and'psd'
, the complex spectra are multiplied with their absolute values to ensure a correct renormalization. For detailed information and explanations, refer toFFT concepts
.- Parameters:
spec (numpy array) – N dimensional array which has the frequency bins in the last dimension. E.g.,
spec.shape == (10,2,129)
holds 10 times 2 spectra with 129 frequency bins each.n_samples (int) – number of samples of the corresponding time signal
sampling_rate (number) – sampling rate of the corresponding time signal in Hz
fft_norm (string, optional) –
'none'
Do not apply any normalization. Appropriate for energy signals such as impulse responses.
'unitary'
Multiply spec by factor of two as in [1] Eq. (8) (except for 0 Hz and the Nyquist frequency at half the sampling rate) to obtain the single-sided spectrum.
'amplitude'
Scale spectrum by
1/n_samples
as in [1] Eq. (4) to obtain the amplitude spectrum.- ’rms’
Scale spectrum by \(1/\sqrt{2}\) as in [1] Eq.(10) to obtain the RMS spectrum.
- ’power’
Power spectrum, which equals the squared RMS spectrum (except for the retained phase).
- ’psd’
The power spectrum is scaled by
n_samples/sampling_rate
as in [1] Eq. (6)
Note that the unitary normalization is also applied for amplitude, rms, power, and psd if the input spectrum is single sided (see single_sided).
inverse (bool, optional) – apply the inverse normalization. The default is
False
.single_sided (bool, optional) – denotes if spec is a single sided spectrum up to half the sampling rate or a both sided (full) spectrum. If
single_sided=True
the unitary normalization according to [1] Eq. (8) is applied unlessfft_norm='none'
. The default isTrue
.window (None, array like) – window that was applied to the time signal before performing the FFT. Affects the normalization as in [1] Eqs. (11-13). The window must be an array-like with n_samples length and. The default is
None
, which denotes that no window was applied.
- Returns:
spec – normalized input spectrum
- Return type:
numpy array
References
- pyfar.dsp.fft.rfft(data, n_samples, sampling_rate, fft_norm)[source]¶
Calculate the FFT of a real-valued time-signal.
The function returns only the right-hand side of the axis-symmetric spectrum. The normalization is considered according to
'fft_norm'
as described innormalization
andFFT concepts
.- Parameters:
data (array, double) – Array containing the time domain signal with dimensions (…,
'n_samples'
)n_samples (int) – The number of samples
sampling_rate (number) – sampling rate in Hz
fft_norm ('none', 'unitary', 'amplitude', 'rms', 'power', 'psd') – See documentation of
normalization
.
- Returns:
spec – The complex valued right-hand side of the spectrum with dimensions (…, n_bins)
- Return type:
array, complex
- pyfar.dsp.fft.rfftfreq(n_samples, sampling_rate)[source]¶
Returns the positive discrete frequencies for which the FFT is calculated.
If the number of samples \(N\) is even the number of frequency bins will be \(2/N+1\), if \(N\) is odd, the number of bins will be \((N+1)/2\).
- Parameters:
n_samples (int) – The number of samples in the signal
sampling_rate (int) – The sampling rate of the signal
- Returns:
frequencies – The positive discrete frequencies in Hz for which the FFT is calculated.
- Return type:
array, double