Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Aleph::FFT< Real > Class Template Reference

Fast Fourier Transform (FFT) and DSP Toolkit. More...

#include <fft.H>

Collaboration diagram for Aleph::FFT< Real >:
[legend]

Classes

struct  AnalogPrototype
 Parameters for an analog filter prototype (S-domain). More...
 
struct  BalancedPolynomial
 
class  BatchedISTFTProcessor
 Stateful multichannel ISTFT processor with one synthesizer per channel. More...
 
class  BatchedSTFTProcessor
 Stateful multichannel STFT processor with one analyzer per channel. More...
 
struct  BiquadSection
 A stable Second-Order Section (SOS) building block. More...
 
struct  CoherenceEstimate
 Magnitude-squared coherence sampled in Hertz. More...
 
struct  CrossSpectralDensity
 One-sided cross-spectral density estimate sampled in Hertz. More...
 
struct  FrequencyResponse
 Discrete frequency response sampled on a fixed angular grid. More...
 
struct  GainMarginInfo
 Gain-margin estimate around a phase crossover. More...
 
struct  IIRCoefficients
 Coefficients for an Infinite Impulse Response (IIR) filter. More...
 
struct  Is_Std_Complex
 
struct  Is_Std_Complex< std::complex< T > >
 
struct  ISTFTOptions
 Options for ISTFT reconstruction. More...
 
class  ISTFTProcessor
 Stateful ISTFT processor for chunked frame-by-frame synthesis. More...
 
struct  JacobiValues
 Value triplet for Jacobi elliptic functions (sn, cn, dn). More...
 
class  LFilter
 Stateful direct-form II transposed IIR filter. More...
 
class  LFilterBank
 Stateful bank of direct-form II transposed IIR filters. More...
 
class  OverlapAdd
 Reusable overlap-add convolver for long real sequences. More...
 
class  OverlapAddBank
 Multichannel overlap-add convolver with one shared kernel FFT. More...
 
class  OverlapSave
 Reusable overlap-save convolver for streaming real FIR filtering. More...
 
class  PartitionedConvolver
 Uniform partitioned FIR convolver for low-latency streaming. More...
 
struct  PhaseMarginInfo
 Phase-margin estimate around a gain crossover. More...
 
class  Plan
 Precomputed FFT plan for repeated transforms of the same size. More...
 
struct  PoleZeroPair
 Greedy nearest-neighbor pole/zero pairing entry. More...
 
struct  PolynomialEvaluation
 
struct  PowerSpectralDensity
 One-sided power spectral density estimate sampled in Hertz. More...
 
struct  ResamplePolyOptions
 Options for default polyphase resampling filter design. More...
 
struct  RootGroup
 Rationale: Group of one or more roots (typically a conjugate pair) sharing a common geometric center. More...
 
struct  SeriesEvaluation
 
class  SOSFilter
 Stateful cascade of second-order sections. More...
 
class  SOSFilterBank
 Stateful bank of SOS cascades, one per channel. More...
 
struct  STFTOptions
 Options for STFT analysis. More...
 
class  STFTProcessor
 Stateful STFT processor for chunked real-time analysis. More...
 
struct  TensorLayout
 Layout descriptor for a flat tensor buffer. More...
 
struct  TransferTerms
 Internal storage for complex transfer function evaluation terms. More...
 
struct  WeightedFrequencyGrid
 Frequency-domain grid with target values and importance weights. More...
 
struct  WelchOptions
 Options for Welch PSD, CSD, and coherence estimation. More...
 

Public Types

enum class  SimdBackend { scalar , avx2 , neon }
 SIMD hardware acceleration backends. More...
 
enum class  SimdPreference { automatic , scalar_only , avx2_only , neon_only }
 User-selected SIMD dispatch preference. More...
 
enum class  SpectrogramLayout { channel_frame_bin , frame_channel_bin }
 Logical layout for multichannel spectrograms. More...
 
using value_type = Real
 
using Complex = std::complex< Real >
 

Static Public Member Functions

static constexpr bool is_power_of_two (const size_t n) noexcept
 Checks if a given number is a power of two.
 
static constexpr const charsimd_backend_name (const SimdBackend backend) noexcept
 Returns the human-readable name of a SIMD backend.
 
static constexpr const charsimd_preference_name (const SimdPreference preference) noexcept
 Returns the human-readable name of a SIMD preference.
 
static constexpr bool avx2_kernel_compiled () noexcept
 Returns whether the AVX2 kernel was compiled for this precision.
 
static constexpr bool neon_kernel_compiled () noexcept
 Returns whether the NEON kernel was compiled for this precision.
 
static bool avx2_dispatch_available () noexcept
 Returns whether the runtime CPU can execute the AVX2 double kernel when it has been compiled in.
 
static bool neon_dispatch_available () noexcept
 Returns whether the runtime CPU can execute the NEON kernel when it has been compiled in.
 
static SimdBackend detected_simd_backend () noexcept
 Returns the best SIMD backend supported by the current hardware among the kernels compiled for this precision.
 
static const chardetected_simd_backend_name () noexcept
 Returns the detected hardware SIMD backend name.
 
static SimdPreference simd_preference () noexcept
 Returns the runtime SIMD preference requested via environment.
 
static SimdBackend simd_backend () noexcept
 Returns the default SIMD backend used by standalone plan transforms for this precision.
 
static const charsimd_backend_name () noexcept
 Returns the active default SIMD backend name for this precision.
 
static SimdBackend batched_plan_simd_backend () noexcept
 Returns the SIMD backend selected for throughput-oriented batch plan paths under the current runtime policy.
 
static const charbatched_plan_simd_backend_name () noexcept
 Returns the active batch-plan SIMD backend name.
 
static const charsimd_preference_name () noexcept
 Returns the requested SIMD policy name.
 
static bool avx2_runtime_available () noexcept
 Returns whether AVX2 dispatch is supported at runtime.
 
static bool neon_runtime_available () noexcept
 Returns whether NEON dispatch is supported at runtime.
 
static void transform (Array< Complex > &a, const bool invert)
 Computes the Fast Fourier Transform (FFT) in-place.
 
static void ptransform (ThreadPool &pool, Array< Complex > &a, const bool invert, const size_t chunk_size=0)
 Parallel in-place FFT/IFFT using a thread pool.
 
static Array< Complextransformed (const Array< Complex > &input, const bool invert=false)
 Computes the FFT or IFFT and returns a new array.
 
static Array< Complexptransformed (ThreadPool &pool, const Array< Complex > &input, const bool invert=false, const size_t chunk_size=0)
 Parallel FFT/IFFT that returns a new array.
 
static void transform_batch (Array< Array< Complex > > &batch, const bool invert)
 In-place batch transform for equal-length complex inputs.
 
static void ptransform_batch (ThreadPool &pool, Array< Array< Complex > > &batch, const bool invert, const size_t chunk_size=0)
 Parallel in-place batch transform for equal-length inputs.
 
static Array< Array< Complex > > transformed_batch (const Array< Array< Complex > > &input, const bool invert=false)
 Functional batch FFT/IFFT wrapper.
 
static Array< Array< Complex > > ptransformed_batch (ThreadPool &pool, const Array< Array< Complex > > &input, const bool invert=false, const size_t chunk_size=0)
 Parallel functional batch FFT/IFFT wrapper.
 
static Array< Array< Complex > > inverse_transform_batch (const Array< Array< Complex > > &input)
 Functional batch IFFT wrapper.
 
static Array< Array< Complex > > pinverse_transform_batch (ThreadPool &pool, const Array< Array< Complex > > &input, const size_t chunk_size=0)
 Parallel functional batch IFFT wrapper.
 
static Array< Array< Complex > > rfft_batch (const Array< Array< Real > > &input)
 Functional compact real FFT for equal-length real batches.
 
static Array< Array< Complex > > prfft_batch (ThreadPool &pool, const Array< Array< Real > > &input, const size_t chunk_size=0)
 Parallel compact real FFT for equal-length real batches.
 
static Array< Array< Real > > irfft_batch (const Array< Array< Complex > > &spectra, const size_t signal_size)
 Functional compact real inverse FFT for equal-length batches.
 
static Array< Array< Real > > pirfft_batch (ThreadPool &pool, const Array< Array< Complex > > &spectra, const size_t signal_size, const size_t chunk_size=0)
 Parallel compact real inverse FFT for equal-length batches.
 
static TensorLayout row_major_layout (const Array< size_t > &shape)
 Builds a default row-major tensor layout for a flat buffer.
 
static void transform_axis (Array< Complex > &data, const TensorLayout &layout, const size_t axis, const bool invert)
 In-place 1-D FFT/IFFT along one tensor axis of a flat buffer.
 
static void ptransform_axis (ThreadPool &pool, Array< Complex > &data, const TensorLayout &layout, const size_t axis, const bool invert, const size_t chunk_size=0)
 Parallel in-place 1-D FFT/IFFT along one tensor axis.
 
static void transform_axes (Array< Complex > &data, const TensorLayout &layout, const Array< size_t > &axes, const bool invert)
 In-place FFT/IFFT along multiple tensor axes of a flat buffer.
 
static void ptransform_axes (ThreadPool &pool, Array< Complex > &data, const TensorLayout &layout, const Array< size_t > &axes, const bool invert, const size_t chunk_size=0)
 Parallel in-place FFT/IFFT along multiple tensor axes.
 
static Array< Complextransformed_axes (const Array< Complex > &input, const TensorLayout &layout, const Array< size_t > &axes, const bool invert=false)
 Functional tensor FFT/IFFT wrapper for flat buffers.
 
static Array< Complexptransformed_axes (ThreadPool &pool, const Array< Complex > &input, const TensorLayout &layout, const Array< size_t > &axes, const bool invert=false, const size_t chunk_size=0)
 Parallel functional tensor FFT/IFFT wrapper for flat buffers.
 
static Array< Array< Complex > > transformed2d (const Array< Array< Complex > > &input, const bool invert=false)
 Functional 2-D FFT/IFFT wrapper for rectangular complex matrices.
 
static Array< Array< Complex > > ptransformed2d (ThreadPool &pool, const Array< Array< Complex > > &input, const bool invert=false, const size_t chunk_size=0)
 Parallel functional 2-D FFT/IFFT wrapper for matrices.
 
static Array< Array< Complex > > inverse_transform2d (const Array< Array< Complex > > &input)
 Functional inverse 2-D FFT wrapper.
 
static Array< Array< Complex > > pinverse_transform2d (ThreadPool &pool, const Array< Array< Complex > > &input, const size_t chunk_size=0)
 Parallel functional inverse 2-D FFT wrapper.
 
static Array< Array< Array< Complex > > > transformed2d_batch (const Array< Array< Array< Complex > > > &input, const bool invert=false)
 Functional 2-D batched FFT/IFFT wrapper over a matrix stack.
 
static Array< Array< Array< Complex > > > ptransformed2d_batch (ThreadPool &pool, const Array< Array< Array< Complex > > > &input, const bool invert=false, const size_t chunk_size=0)
 Parallel functional 2-D batched FFT/IFFT wrapper.
 
static Array< Array< Array< Complex > > > transformed3d (const Array< Array< Array< Complex > > > &input, const bool invert=false)
 Functional 3-D FFT/IFFT wrapper for rectangular complex tensors.
 
static Array< Array< Array< Complex > > > ptransformed3d (ThreadPool &pool, const Array< Array< Array< Complex > > > &input, const bool invert=false, const size_t chunk_size=0)
 Parallel functional 3-D FFT/IFFT wrapper for tensors.
 
static Array< Array< Array< Complex > > > inverse_transform3d (const Array< Array< Array< Complex > > > &input)
 Functional inverse 3-D FFT wrapper.
 
static Array< Array< Array< Complex > > > pinverse_transform3d (ThreadPool &pool, const Array< Array< Array< Complex > > > &input, const size_t chunk_size=0)
 Parallel functional inverse 3-D FFT wrapper.
 
static Array< Array< Array< Complex > > > transpose_spectrogram_layout (const Array< Array< Array< Complex > > > &input, const SpectrogramLayout source, const SpectrogramLayout target)
 Converts multichannel spectrograms between channel-major and frame-major layouts.
 
static Array< Array< Array< Complex > > > multichannel_stft (const Array< Array< Real > > &signals, const Array< Real > &window, const STFTOptions &options={}, const SpectrogramLayout layout=SpectrogramLayout::channel_frame_bin)
 Multichannel STFT with explicit channel-major or frame-major output layout.
 
static Array< Array< Array< Complex > > > pmultichannel_stft (ThreadPool &pool, const Array< Array< Real > > &signals, const Array< Real > &window, const STFTOptions &options={}, const SpectrogramLayout layout=SpectrogramLayout::channel_frame_bin, const size_t chunk_size=0)
 Parallel multichannel STFT with selectable output layout.
 
static Array< Array< Real > > multichannel_istft (const Array< Array< Array< Complex > > > &spectrograms, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const ISTFTOptions &options={}, const Array< size_t > &signal_lengths={}, const SpectrogramLayout layout=SpectrogramLayout::channel_frame_bin)
 Multichannel ISTFT from either channel-major or frame-major spectrogram layouts.
 
static Array< Array< Real > > pmultichannel_istft (ThreadPool &pool, const Array< Array< Array< Complex > > > &spectrograms, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const ISTFTOptions &options={}, const Array< size_t > &signal_lengths={}, const SpectrogramLayout layout=SpectrogramLayout::channel_frame_bin, const size_t chunk_size=0)
 Parallel multichannel ISTFT from either supported layout.
 
static Array< Complextransform_padded (const Array< Complex > &input)
 
static Array< Complexptransform_padded (ThreadPool &pool, const Array< Complex > &input, const size_t chunk_size=0)
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complextransform_padded (const Container &input)
 Zero-pad and forward-FFT a generic complex iterable.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexptransform_padded (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel zero-pad and forward-FFT for a generic complex iterable.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complextransformed (const Container &input, const bool invert=false)
 FFT/IFFT for a generic complex iterable.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexptransformed (ThreadPool &pool, const Container &input, const bool invert=false, const size_t chunk_size=0)
 Parallel FFT/IFFT for a generic complex iterable.
 
static Array< Complextransform (const Array< Real > &input)
 Computes the FFT of a real-valued input sequence.
 
static Array< Complexptransform (ThreadPool &pool, const Array< Real > &input, const size_t chunk_size=0)
 Parallel real-input FFT.
 
static Array< Complexrfft (const Array< Real > &input)
 Computes the compact real FFT of size floor(N/2) + 1.
 
static Array< Complexprfft (ThreadPool &pool, const Array< Real > &input, const size_t chunk_size=0)
 Parallel version of rfft(const Array<Real>&).
 
static Array< Complextransform_padded (const Array< Real > &input)
 Computes the FFT after zero-padding the input to the next power of two.
 
static Array< Complexptransform_padded (ThreadPool &pool, const Array< Real > &input, const size_t chunk_size=0)
 Parallel version of transform_padded(const Array<Real>&).
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complextransform (const Container &input)
 Forward FFT for complex-valued containers.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexptransform (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel version of transform(const Container&).
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complextransform_padded (const Container &input)
 Forward FFT with padding for real-valued containers.
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complexptransform_padded (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel version of transform_padded(const Container&).
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complextransform (const Container &input)
 Forward FFT for real-valued containers.
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complexptransform (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel version of transform(const Container&).
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complexrfft (const Container &input)
 Compact real FFT for real-valued containers.
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complexprfft (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel version of rfft(const Container&).
 
static Array< Complexspectrum (const Array< Complex > &input)
 DSP alias for the forward FFT.
 
static Array< Complexpspectrum (ThreadPool &pool, const Array< Complex > &input, const size_t chunk_size=0)
 Parallel version of spectrum(const Array<Complex>&).
 
static Array< Complexspectrum (const Array< Real > &input)
 DSP alias for the real forward FFT.
 
static Array< Complexpspectrum (ThreadPool &pool, const Array< Real > &input, const size_t chunk_size=0)
 Parallel version of spectrum(const Array<Real>&).
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexspectrum (const Container &input)
 DSP alias for complex-valued container forward FFT.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexpspectrum (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel version of spectrum(const Container&).
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complexspectrum (const Container &input)
 DSP alias for real-valued container forward FFT.
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complexpspectrum (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel version of spectrum(const Container&).
 
static Array< Complexinverse_transform (const Array< Complex > &input)
 Computes the Inverse Fast Fourier Transform (IFFT).
 
static Array< Complexpinverse_transform (ThreadPool &pool, const Array< Complex > &input, const size_t chunk_size=0)
 Parallel version of inverse_transform(const Array<Complex>&).
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexinverse_transform (const Container &input)
 Forward IFFT for complex-valued containers.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexpinverse_transform (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel version of inverse_transform(const Container&).
 
static Array< Realinverse_transform_real (const Array< Complex > &input)
 Computes the IFFT and projects the result back to real values.
 
static Array< Realpinverse_transform_real (ThreadPool &pool, const Array< Complex > &input, const size_t chunk_size=0)
 Parallel version of inverse_transform_real(const Array<Complex>&).
 
static Array< Realirfft (const Array< Complex > &spectrum, const size_t signal_size=0)
 Reconstructs a real signal from a compact rfft() spectrum.
 
static Array< Realpirfft (ThreadPool &pool, const Array< Complex > &spectrum, const size_t signal_size=0, const size_t chunk_size=0)
 Parallel version of irfft(const Array<Complex>&, size_t).
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Realinverse_transform_real (const Container &input)
 Inverse real transform for complex-valued containers.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Realpinverse_transform_real (ThreadPool &pool, const Container &input, const size_t chunk_size=0)
 Parallel version of inverse_transform_real(const Container&).
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Realirfft (const Container &spectrum, const size_t signal_size=0)
 Inverse real transform (compact) for complex-valued containers.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Realpirfft (ThreadPool &pool, const Container &spectrum, const size_t signal_size=0, const size_t chunk_size=0)
 Parallel version of irfft(const Container&, size_t).
 
static Array< Realmagnitude_spectrum (const Array< Complex > &input)
 Returns |X[k]| for each frequency bin in an FFT output.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Realmagnitude_spectrum (const Container &input)
 Magnitude spectrum for complex-valued containers.
 
static Array< Realpower_spectrum (const Array< Complex > &input)
 Returns |X[k]|^2 for each frequency bin in an FFT output.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Realpower_spectrum (const Container &input)
 
static Array< Realphase_spectrum (const Array< Complex > &input)
 Returns arg(X[k]) for each frequency bin in an FFT output.
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Realphase_spectrum (const Container &input)
 
static Array< Realhann_window (const size_t n)
 Returns a Hann window of length n.
 
static Array< Realhamming_window (const size_t n)
 Returns a Hamming window of length n.
 
static Array< Realblackman_window (const size_t n)
 Returns a Blackman window of length n.
 
static Real kaiser_beta (const Real attenuation_db)
 Returns the Kaiser beta that corresponds to an attenuation goal.
 
static Array< Realkaiser_window (const size_t n, const Real beta)
 Returns a Kaiser window of length n.
 
static Array< Realapply_window (const Array< Real > &signal, const Array< Real > &window)
 Applies a real window sample-by-sample to a real signal.
 
static Array< Complexapply_window (const Array< Complex > &signal, const Array< Real > &window)
 Applies a real window sample-by-sample to a complex signal.
 
template<typename SignalContainer , typename WindowContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< WindowContainer > Array< Realapply_window (const SignalContainer &signal, const WindowContainer &window)
 
template<typename SignalContainer , typename WindowContainer >
requires Is_Complex_Container<SignalContainer>
and static Is_Real_Container< WindowContainer > Array< Complexapply_window (const SignalContainer &signal, const WindowContainer &window)
 
static Array< Realapply_hann_window (const Array< Real > &signal)
 Applies a Hann window of matching size to a real signal.
 
static Array< Realapply_hamming_window (const Array< Real > &signal)
 Applies a Hamming window of matching size to a real signal.
 
static Array< Realapply_blackman_window (const Array< Real > &signal)
 Applies a Blackman window of matching size to a real signal.
 
static Array< Complexapply_hann_window (const Array< Complex > &signal)
 Applies a Hann window of matching size to a complex signal.
 
static Array< Complexapply_hamming_window (const Array< Complex > &signal)
 Applies a Hamming window of matching size to a complex signal.
 
static Array< Complexapply_blackman_window (const Array< Complex > &signal)
 Applies a Blackman window of matching size to a complex signal.
 
static Array< Realfirwin_lowpass (const size_t num_taps, const Real cutoff_frequency, const Real sample_rate, const Array< Real > &window)
 FIR low-pass design via the window method.
 
static Array< Realfirwin_lowpass (const size_t num_taps, const Real cutoff_frequency, const Real sample_rate, const Real attenuation_db)
 FIR low-pass design via the window method using a Kaiser window.
 
static Array< Realfirwin_highpass (const size_t num_taps, const Real cutoff_frequency, const Real sample_rate, const Array< Real > &window)
 FIR high-pass design via spectral inversion of a low-pass design.
 
static Array< Realfirwin_highpass (const size_t num_taps, const Real cutoff_frequency, const Real sample_rate, const Real attenuation_db)
 FIR high-pass design using a Kaiser window.
 
static Array< Realfirwin_bandpass (const size_t num_taps, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate, const Array< Real > &window)
 FIR band-pass design via the window method.
 
static Array< Realfirwin_bandpass (const size_t num_taps, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate, const Real attenuation_db)
 FIR band-pass design using a Kaiser window.
 
static Array< Realfirwin_bandstop (const size_t num_taps, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate, const Array< Real > &window)
 FIR band-stop design via the window method.
 
static Array< Realfirwin_bandstop (const size_t num_taps, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate, const Real attenuation_db)
 FIR band-stop design using a Kaiser window.
 
static Array< Realfirls (const size_t num_taps, const Array< Real > &bands, const Array< Real > &desired, const Real sample_rate, const Array< Real > &weights={})
 FIR design by weighted least squares over piecewise-linear bands.
 
template<typename BandContainer , typename DesiredContainer >
requires Is_Real_Container<BandContainer>
and static Is_Real_Container< DesiredContainer > Array< Realfirls (const size_t num_taps, const BandContainer &bands, const DesiredContainer &desired, const Real sample_rate)
 
template<typename BandContainer , typename DesiredContainer , typename WeightContainer >
requires Is_Real_Container<BandContainer>
and Is_Real_Container< DesiredContainer > and static Is_Real_Container< WeightContainer > Array< Realfirls (const size_t num_taps, const BandContainer &bands, const DesiredContainer &desired, const Real sample_rate, const WeightContainer &weights)
 
static Array< Realremez (const size_t num_taps, const Array< Real > &bands, const Array< Real > &desired, const Real sample_rate, const Array< Real > &weights={}, const size_t grid_density=32, const size_t max_iterations=64)
 FIR equiripple design via a dense-grid Remez exchange.
 
template<typename BandContainer , typename DesiredContainer >
requires Is_Real_Container<BandContainer>
and static Is_Real_Container< DesiredContainer > Array< Realremez (const size_t num_taps, const BandContainer &bands, const DesiredContainer &desired, const Real sample_rate)
 
template<typename BandContainer , typename DesiredContainer , typename WeightContainer >
requires Is_Real_Container<BandContainer>
and Is_Real_Container< DesiredContainer > and static Is_Real_Container< WeightContainer > Array< Realremez (const size_t num_taps, const BandContainer &bands, const DesiredContainer &desired, const Real sample_rate, const WeightContainer &weights, const size_t grid_density=32, const size_t max_iterations=64)
 
static Array< Realupfirdn (const Array< Real > &signal, const Array< Real > &coeffs, const size_t up=1, const size_t down=1)
 Polyphase upsample-filter-downsample for real signals.
 
template<typename SignalContainer , typename CoeffContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< CoeffContainer > Array< Realupfirdn (const SignalContainer &signal, const CoeffContainer &coeffs, const size_t up=1, const size_t down=1)
 
static Array< Realresample_poly (const Array< Real > &signal, const size_t up, const size_t down, const Array< Real > &coeffs)
 Polyphase resampling with explicit FIR coefficients.
 
static Array< Realresample_poly (const Array< Real > &signal, const size_t up, const size_t down, const ResamplePolyOptions &options={})
 Polyphase resampling with an internally designed Kaiser FIR.
 
template<typename SignalContainer , typename CoeffContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< CoeffContainer > Array< Realresample_poly (const SignalContainer &signal, const size_t up, const size_t down, const CoeffContainer &coeffs)
 
template<typename SignalContainer >
requires Is_Real_Container<SignalContainer>
static Array< Realresample_poly (const SignalContainer &signal, const size_t up, const size_t down, const ResamplePolyOptions &options={})
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Realapply_hann_window (const Container &signal)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Realapply_hamming_window (const Container &signal)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Realapply_blackman_window (const Container &signal)
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexapply_hann_window (const Container &signal)
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexapply_hamming_window (const Container &signal)
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexapply_blackman_window (const Container &signal)
 
static Array< Complexwindowed_spectrum (const Array< Real > &signal, const Array< Real > &window)
 Returns the FFT of a real signal after applying a window.
 
static Array< Complexwindowed_spectrum (const Array< Complex > &signal, const Array< Real > &window)
 Returns the FFT of a complex signal after applying a window.
 
template<typename SignalContainer , typename WindowContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< WindowContainer > Array< Complexwindowed_spectrum (const SignalContainer &signal, const WindowContainer &window)
 
template<typename SignalContainer , typename WindowContainer >
requires Is_Complex_Container<SignalContainer>
and static Is_Real_Container< WindowContainer > Array< Complexwindowed_spectrum (const SignalContainer &signal, const WindowContainer &window)
 
static Real window_energy (const Array< Real > &window)
 Returns the sum of squared window samples.
 
static Real window_coherent_gain (const Array< Real > &window)
 Returns the average window gain.
 
static Real window_enbw (const Array< Real > &window)
 Returns the equivalent noise bandwidth of a window in bins.
 
template<typename Container >
requires Is_Real_Container<Container>
static Real window_energy (const Container &window)
 
template<typename Container >
requires Is_Real_Container<Container>
static Real window_coherent_gain (const Container &window)
 
template<typename Container >
requires Is_Real_Container<Container>
static Real window_enbw (const Container &window)
 
static Array< size_t > frame_offsets (const size_t signal_size, const size_t frame_size, const size_t hop_size, const bool pad_end=true)
 Returns the frame start offsets used by frame_signal.
 
static Array< Realoverlap_add_frames (const Array< Array< Real > > &frames, const size_t hop_size, const size_t signal_length=0)
 Overlap-adds a frame sequence with a fixed hop size.
 
static PowerSpectralDensity welch (const Array< Real > &signal, const Array< Real > &window, const Real sample_rate, const WelchOptions &options={})
 Welch one-sided PSD estimate using a custom window.
 
static PowerSpectralDensity welch (const Array< Real > &signal, const size_t frame_size, const Real sample_rate, const WelchOptions &options={})
 Welch one-sided PSD estimate using a Hann window.
 
static CrossSpectralDensity csd (const Array< Real > &x, const Array< Real > &y, const Array< Real > &window, const Real sample_rate, const WelchOptions &options={})
 One-sided cross-spectral density estimate using a custom window.
 
static CrossSpectralDensity csd (const Array< Real > &x, const Array< Real > &y, const size_t frame_size, const Real sample_rate, const WelchOptions &options={})
 One-sided cross-spectral density estimate using a Hann window.
 
static CoherenceEstimate coherence (const Array< Real > &x, const Array< Real > &y, const Array< Real > &window, const Real sample_rate, const WelchOptions &options={})
 Magnitude-squared coherence estimate using Welch averages.
 
static CoherenceEstimate coherence (const Array< Real > &x, const Array< Real > &y, const size_t frame_size, const Real sample_rate, const WelchOptions &options={})
 Magnitude-squared coherence estimate using a Hann window.
 
template<typename SignalContainer , typename WindowContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< WindowContainer > PowerSpectralDensity welch (const SignalContainer &signal, const WindowContainer &window, const Real sample_rate, const WelchOptions &options={})
 
template<typename ContainerX , typename ContainerY , typename WindowContainer >
requires Is_Real_Container<ContainerX>
and Is_Real_Container< ContainerY > and static Is_Real_Container< WindowContainer > CrossSpectralDensity csd (const ContainerX &x, const ContainerY &y, const WindowContainer &window, const Real sample_rate, const WelchOptions &options={})
 
template<typename ContainerX , typename ContainerY , typename WindowContainer >
requires Is_Real_Container<ContainerX>
and Is_Real_Container< ContainerY > and static Is_Real_Container< WindowContainer > CoherenceEstimate coherence (const ContainerX &x, const ContainerY &y, const WindowContainer &window, const Real sample_rate, const WelchOptions &options={})
 
static Array< Realwindow_overlap_profile (const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const size_t hop_size)
 Returns the overlap-add normalization profile for one hop period.
 
static bool satisfies_nola (const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const size_t hop_size)
 Returns true when the window pair satisfies NOLA.
 
static bool satisfies_cola (const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const size_t hop_size)
 Returns true when the window pair satisfies COLA.
 
static bool satisfies_nola (const Array< Real > &window, const size_t hop_size)
 Returns true when one window satisfies NOLA by itself.
 
static bool satisfies_cola (const Array< Real > &window, const size_t hop_size)
 Returns true when one window satisfies COLA by itself.
 
static Array< Array< Real > > frame_signal (const Array< Real > &signal, const size_t frame_size, const size_t hop_size, const bool pad_end=true)
 Splits a real signal into frames using a fixed hop size.
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Array< Real > > frame_signal (const Container &signal, const size_t frame_size, const size_t hop_size, const bool pad_end=true)
 
static Array< Array< Complex > > stft (const Array< Real > &signal, const Array< Real > &window, const size_t hop_size, const bool pad_end=true)
 Computes a basic STFT for a real signal using a custom window.
 
static Array< Array< Complex > > stft (const Array< Real > &signal, const size_t frame_size, const size_t hop_size, const bool pad_end=true)
 Computes a basic STFT for a real signal using a Hann window.
 
template<typename SignalContainer , typename WindowContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< WindowContainer > Array< Array< Complex > > stft (const SignalContainer &signal, const WindowContainer &window, const size_t hop_size, const bool pad_end=true)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Array< Complex > > stft (const Container &signal, const size_t frame_size, const size_t hop_size, const bool pad_end=true)
 
static Array< Array< Complex > > stft (const Array< Real > &signal, const Array< Real > &window, const STFTOptions &options)
 Computes an STFT with explicit analysis options.
 
static Array< Array< Complex > > pstft (ThreadPool &pool, const Array< Real > &signal, const Array< Real > &window, const STFTOptions &options, const size_t chunk_size=0)
 Parallel STFT using explicit analysis options.
 
static Array< Array< Complex > > stft (const Array< Real > &signal, const size_t frame_size, const STFTOptions &options)
 Computes a Hann-window STFT with explicit analysis options.
 
static Array< Array< Complex > > pstft (ThreadPool &pool, const Array< Real > &signal, const size_t frame_size, const STFTOptions &options, const size_t chunk_size=0)
 Parallel Hann-window STFT with explicit analysis options.
 
template<typename SignalContainer , typename WindowContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< WindowContainer > Array< Array< Complex > > stft (const SignalContainer &signal, const WindowContainer &window, const STFTOptions &options)
 
template<typename SignalContainer , typename WindowContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< WindowContainer > Array< Array< Complex > > pstft (ThreadPool &pool, const SignalContainer &signal, const WindowContainer &window, const STFTOptions &options, const size_t chunk_size=0)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Array< Complex > > stft (const Container &signal, const size_t frame_size, const STFTOptions &options)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Array< Complex > > pstft (ThreadPool &pool, const Container &signal, const size_t frame_size, const STFTOptions &options, const size_t chunk_size=0)
 
static Array< Realistft (const Array< Array< Complex > > &spectrogram, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const size_t hop_size, const size_t signal_length=0)
 Reconstructs a real signal from an STFT using overlap-add.
 
static Array< Realistft (const Array< Array< Complex > > &spectrogram, const Array< Real > &window, const size_t hop_size, const size_t signal_length=0)
 Reconstructs a real signal using the same window for analysis and synthesis.
 
static Array< Realistft (const Array< Array< Complex > > &spectrogram, const size_t frame_size, const size_t hop_size, const size_t signal_length=0)
 Reconstructs a real signal using a Hann window pair.
 
static Array< Realpistft (ThreadPool &pool, const Array< Array< Complex > > &spectrogram, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const size_t hop_size, const size_t signal_length=0, const size_t chunk_size=0)
 Parallel STFT inversion using a thread pool.
 
static Array< Realpistft (ThreadPool &pool, const Array< Array< Complex > > &spectrogram, const Array< Real > &window, const size_t hop_size, const size_t signal_length=0, const size_t chunk_size=0)
 Parallel STFT inversion using a shared analysis/synthesis window.
 
static Array< Realpistft (ThreadPool &pool, const Array< Array< Complex > > &spectrogram, const size_t frame_size, const size_t hop_size, const size_t signal_length=0, const size_t chunk_size=0)
 Parallel STFT inversion using a Hann window pair.
 
static Array< Realistft (const Array< Array< Complex > > &spectrogram, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const ISTFTOptions &options)
 Reconstructs a real signal using explicit ISTFT options.
 
static Array< Realistft (const Array< Array< Complex > > &spectrogram, const Array< Real > &window, const ISTFTOptions &options)
 Reconstructs a real signal using one shared analysis/synthesis window.
 
static Array< Realistft (const Array< Array< Complex > > &spectrogram, const size_t frame_size, const ISTFTOptions &options)
 Reconstructs a Hann-window STFT with explicit options.
 
static Array< Realpistft (ThreadPool &pool, const Array< Array< Complex > > &spectrogram, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const ISTFTOptions &options, const size_t chunk_size=0)
 Parallel ISTFT with explicit options.
 
static Array< Realpistft (ThreadPool &pool, const Array< Array< Complex > > &spectrogram, const Array< Real > &window, const ISTFTOptions &options, const size_t chunk_size=0)
 Parallel ISTFT using a shared analysis/synthesis window.
 
static Array< Realpistft (ThreadPool &pool, const Array< Array< Complex > > &spectrogram, const size_t frame_size, const ISTFTOptions &options, const size_t chunk_size=0)
 Parallel Hann-window ISTFT with explicit options.
 
static Array< Array< Array< Complex > > > batched_stft (const Array< Array< Real > > &signals, const Array< Real > &window, const STFTOptions &options)
 Batched STFT over a collection of real signals.
 
static Array< Array< Array< Complex > > > pbatched_stft (ThreadPool &pool, const Array< Array< Real > > &signals, const Array< Real > &window, const STFTOptions &options, const size_t chunk_size=0)
 Parallel batched STFT across signals.
 
static Array< Array< Array< Complex > > > batched_stft (const Array< Array< Real > > &signals, const size_t frame_size, const STFTOptions &options)
 Hann-window batched STFT.
 
static Array< Array< Array< Complex > > > pbatched_stft (ThreadPool &pool, const Array< Array< Real > > &signals, const size_t frame_size, const STFTOptions &options, const size_t chunk_size=0)
 Parallel Hann-window batched STFT.
 
static Array< Array< Real > > batched_istft (const Array< Array< Array< Complex > > > &spectrograms, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const ISTFTOptions &options, const Array< size_t > &signal_lengths={})
 Batched ISTFT with optional per-signal output lengths.
 
static Array< Array< Real > > pbatched_istft (ThreadPool &pool, const Array< Array< Array< Complex > > > &spectrograms, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const ISTFTOptions &options, const Array< size_t > &signal_lengths={}, const size_t chunk_size=0)
 Parallel batched ISTFT across signals.
 
static Array< Array< Real > > batched_istft (const Array< Array< Array< Complex > > > &spectrograms, const Array< Real > &window, const ISTFTOptions &options, const Array< size_t > &signal_lengths={})
 Batched ISTFT using a shared analysis/synthesis window.
 
static Array< Array< Real > > pbatched_istft (ThreadPool &pool, const Array< Array< Array< Complex > > > &spectrograms, const Array< Real > &window, const ISTFTOptions &options, const Array< size_t > &signal_lengths={}, const size_t chunk_size=0)
 Parallel batched ISTFT using a shared analysis/synthesis window.
 
static Array< Array< Real > > batched_istft (const Array< Array< Array< Complex > > > &spectrograms, const size_t frame_size, const ISTFTOptions &options, const Array< size_t > &signal_lengths={})
 Hann-window batched ISTFT.
 
static Array< Array< Real > > pbatched_istft (ThreadPool &pool, const Array< Array< Array< Complex > > > &spectrograms, const size_t frame_size, const ISTFTOptions &options, const Array< size_t > &signal_lengths={}, const size_t chunk_size=0)
 Parallel Hann-window batched ISTFT.
 
static Array< Reallfilter (const Array< Real > &signal, const Array< Real > &numerator, const Array< Real > &denominator, const Array< Real > &initial_state={})
 One-shot causal IIR filtering.
 
static Array< Reallfilter (const Array< Real > &signal, const IIRCoefficients &coeffs, const Array< Real > &initial_state={})
 
static Array< Reallfilter (const Array< Real > &signal, const BiquadSection &section, const Array< Real > &initial_state={})
 
template<typename SignalContainer , typename NumContainer , typename DenContainer >
requires Is_Real_Container<SignalContainer>
and Is_Real_Container< NumContainer > and static Is_Real_Container< DenContainer > Array< Reallfilter (const SignalContainer &signal, const NumContainer &numerator, const DenContainer &denominator, const Array< Real > &initial_state={})
 
static Array< Array< Real > > batched_lfilter (const Array< Array< Real > > &signals, const Array< Real > &numerator, const Array< Real > &denominator, const Array< Array< Real > > &initial_states={})
 One-shot batched causal IIR filtering across real channels.
 
static Array< Array< Real > > pbatched_lfilter (ThreadPool &pool, const Array< Array< Real > > &signals, const Array< Real > &numerator, const Array< Real > &denominator, const Array< Array< Real > > &initial_states={}, const size_t chunk_size=0)
 
template<typename SignalsContainer , typename NumContainer , typename DenContainer >
requires Is_Real_Batch_Container<SignalsContainer>
and Is_Real_Container< NumContainer > and static Is_Real_Container< DenContainer > Array< Array< Real > > batched_lfilter (const SignalsContainer &signals, const NumContainer &numerator, const DenContainer &denominator, const Array< Array< Real > > &initial_states={})
 
static Array< Realsosfilt (const Array< Real > &signal, const Array< BiquadSection > &sections)
 One-shot causal filtering of a cascade of second-order sections.
 
template<typename SignalContainer , typename SectionsContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Biquad_Container< SectionsContainer > Array< Realsosfilt (const SignalContainer &signal, const SectionsContainer &sections)
 
static Array< Array< Real > > batched_sosfilt (const Array< Array< Real > > &signals, const Array< BiquadSection > &sections)
 One-shot batched causal SOS filtering across real channels.
 
static Array< Array< Real > > pbatched_sosfilt (ThreadPool &pool, const Array< Array< Real > > &signals, const Array< BiquadSection > &sections, const size_t chunk_size=0)
 
template<typename SignalsContainer , typename SectionsContainer >
requires Is_Real_Batch_Container<SignalsContainer>
and static Is_Biquad_Container< SectionsContainer > Array< Array< Real > > batched_sosfilt (const SignalsContainer &signals, const SectionsContainer &sections)
 
static FrequencyResponse freqz (const Array< Real > &numerator, const Array< Real > &denominator, const size_t num_points=512, const bool whole=false)
 Samples the discrete-time transfer response on the unit circle.
 
static FrequencyResponse freqz (const Array< Real > &numerator, const size_t num_points=512, const bool whole=false)
 FIR frequency response.
 
static FrequencyResponse freqz (const IIRCoefficients &coeffs, const size_t num_points=512, const bool whole=false)
 
static FrequencyResponse freqz (const BiquadSection &section, const size_t num_points=512, const bool whole=false)
 
static FrequencyResponse freqz (const Array< BiquadSection > &sections, const size_t num_points=512, const bool whole=false)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > FrequencyResponse freqz (const NumContainer &numerator, const DenContainer &denominator, const size_t num_points=512, const bool whole=false)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static FrequencyResponse freqz (const SectionsContainer &sections, const size_t num_points=512, const bool whole=false)
 
static Array< Complexzeros (const Array< Real > &numerator)
 Returns the finite zeros of a transfer numerator.
 
static Array< Complexpoles (const Array< Real > &denominator)
 Returns the poles of a transfer denominator.
 
static Array< Complexzeros (const IIRCoefficients &coeffs)
 
static Array< Complexpoles (const IIRCoefficients &coeffs)
 
static Array< Complexzeros (const BiquadSection &section)
 
static Array< Complexpoles (const BiquadSection &section)
 
static Array< Complexzeros (const Array< BiquadSection > &sections)
 
static Array< Complexpoles (const Array< BiquadSection > &sections)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complexzeros (const Container &numerator)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Complexpoles (const Container &denominator)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static Array< Complexzeros (const SectionsContainer &sections)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static Array< Complexpoles (const SectionsContainer &sections)
 
static Array< PoleZeroPairpair_poles_and_zeros (const Array< Complex > &zeros, const Array< Complex > &poles)
 Greedily pairs zeros and poles by nearest distance.
 
static Array< PoleZeroPairpair_poles_and_zeros (const Array< Real > &numerator, const Array< Real > &denominator)
 
static Array< PoleZeroPairpair_poles_and_zeros (const IIRCoefficients &coeffs)
 
static Array< PoleZeroPairpair_poles_and_zeros (const BiquadSection &section)
 
static Array< PoleZeroPairpair_poles_and_zeros (const Array< BiquadSection > &sections)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > Array< PoleZeroPairpair_poles_and_zeros (const NumContainer &numerator, const DenContainer &denominator)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static Array< PoleZeroPairpair_poles_and_zeros (const SectionsContainer &sections)
 
static Real minimum_pole_zero_distance (const Array< Complex > &zeros, const Array< Complex > &poles)
 Returns the minimum pole/zero distance in a greedy pairing.
 
static Real minimum_pole_zero_distance (const Array< Real > &numerator, const Array< Real > &denominator)
 
static Real minimum_pole_zero_distance (const IIRCoefficients &coeffs)
 
static Real minimum_pole_zero_distance (const BiquadSection &section)
 
static Real minimum_pole_zero_distance (const Array< BiquadSection > &sections)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > Real minimum_pole_zero_distance (const NumContainer &numerator, const DenContainer &denominator)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static Real minimum_pole_zero_distance (const SectionsContainer &sections)
 
static Real stability_margin (const Array< Real > &denominator)
 Signed stability margin relative to the unit circle.
 
static Real stability_margin (const IIRCoefficients &coeffs)
 
static Real stability_margin (const BiquadSection &section)
 
static Real stability_margin (const Array< BiquadSection > &sections)
 
template<typename Container >
requires Is_Real_Container<Container>
static Real stability_margin (const Container &denominator)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static Real stability_margin (const SectionsContainer &sections)
 
static bool is_stable (const Array< Real > &denominator)
 Checks BIBO stability from denominator roots.
 
static bool is_stable (const IIRCoefficients &coeffs)
 
static bool is_stable (const BiquadSection &section)
 
static bool is_stable (const Array< BiquadSection > &sections)
 
template<typename Container >
requires Is_Real_Container<Container>
static bool is_stable (const Container &denominator)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static bool is_stable (const SectionsContainer &sections)
 
static bool has_near_pole_zero_cancellation (const Array< Complex > &zeros, const Array< Complex > &poles, const Real tolerance)
 Detects near pole/zero cancellations under a tolerance.
 
static bool has_near_pole_zero_cancellation (const Array< Real > &numerator, const Array< Real > &denominator, const Real tolerance)
 
static bool has_near_pole_zero_cancellation (const IIRCoefficients &coeffs, const Real tolerance)
 
static bool has_near_pole_zero_cancellation (const BiquadSection &section, const Real tolerance)
 
static bool has_near_pole_zero_cancellation (const Array< BiquadSection > &sections, const Real tolerance)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > bool has_near_pole_zero_cancellation (const NumContainer &numerator, const DenContainer &denominator, const Real tolerance)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static bool has_near_pole_zero_cancellation (const SectionsContainer &sections, const Real tolerance)
 
static void validate_stable (const Array< Real > &denominator)
 
static void validate_stable (const IIRCoefficients &coeffs)
 
static void validate_stable (const BiquadSection &section)
 
static void validate_stable (const Array< BiquadSection > &sections)
 
template<typename Container >
requires Is_Real_Container<Container>
static void validate_stable (const Container &denominator)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static void validate_stable (const SectionsContainer &sections)
 
static void validate_stable (const Array< Real > &denominator, const Real min_margin)
 
static void validate_stable (const IIRCoefficients &coeffs, const Real min_margin)
 
static void validate_stable (const BiquadSection &section, const Real min_margin)
 
static void validate_stable (const Array< BiquadSection > &sections, const Real min_margin)
 
template<typename Container >
requires Is_Real_Container<Container>
static void validate_stable (const Container &denominator, const Real min_margin)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static void validate_stable (const SectionsContainer &sections, const Real min_margin)
 
static void validate_no_near_pole_zero_cancellation (const Array< Complex > &zeros, const Array< Complex > &poles, const Real tolerance)
 
static void validate_no_near_pole_zero_cancellation (const Array< Real > &numerator, const Array< Real > &denominator, const Real tolerance)
 
static void validate_no_near_pole_zero_cancellation (const IIRCoefficients &coeffs, const Real tolerance)
 
static void validate_no_near_pole_zero_cancellation (const BiquadSection &section, const Real tolerance)
 
static void validate_no_near_pole_zero_cancellation (const Array< BiquadSection > &sections, const Real tolerance)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > void validate_no_near_pole_zero_cancellation (const NumContainer &numerator, const DenContainer &denominator, const Real tolerance)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static void validate_no_near_pole_zero_cancellation (const SectionsContainer &sections, const Real tolerance)
 
static Array< Realgroup_delay (const FrequencyResponse &response)
 Estimates group delay from a sampled frequency response.
 
static Array< Realphase_delay (const FrequencyResponse &response)
 Estimates phase delay from a sampled frequency response.
 
static Array< Realgroup_delay (const Array< Real > &numerator, const Array< Real > &denominator, const size_t num_points=512, const bool whole=false)
 
static Array< Realphase_delay (const Array< Real > &numerator, const Array< Real > &denominator, const size_t num_points=512, const bool whole=false)
 
static Array< Realgroup_delay (const Array< Real > &numerator, const size_t num_points=512, const bool whole=false)
 
static Array< Realphase_delay (const Array< Real > &numerator, const size_t num_points=512, const bool whole=false)
 
static Array< Realgroup_delay (const IIRCoefficients &coeffs, const size_t num_points=512, const bool whole=false)
 
static Array< Realphase_delay (const IIRCoefficients &coeffs, const size_t num_points=512, const bool whole=false)
 
static Array< Realgroup_delay (const BiquadSection &section, const size_t num_points=512, const bool whole=false)
 
static Array< Realphase_delay (const BiquadSection &section, const size_t num_points=512, const bool whole=false)
 
static Array< Realgroup_delay (const Array< BiquadSection > &sections, const size_t num_points=512, const bool whole=false)
 
static Array< Realphase_delay (const Array< BiquadSection > &sections, const size_t num_points=512, const bool whole=false)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > Array< Realgroup_delay (const NumContainer &numerator, const DenContainer &denominator, const size_t num_points=512, const bool whole=false)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > Array< Realphase_delay (const NumContainer &numerator, const DenContainer &denominator, const size_t num_points=512, const bool whole=false)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Realgroup_delay (const Container &numerator, const size_t num_points=512, const bool whole=false)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Realphase_delay (const Container &numerator, const size_t num_points=512, const bool whole=false)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static Array< Realgroup_delay (const SectionsContainer &sections, const size_t num_points=512, const bool whole=false)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static Array< Realphase_delay (const SectionsContainer &sections, const size_t num_points=512, const bool whole=false)
 
static PhaseMarginInfo phase_margin (const FrequencyResponse &response)
 Estimates phase margin around the unity-gain crossover.
 
static GainMarginInfo gain_margin (const FrequencyResponse &response)
 Estimates gain margin around the -pi phase crossover.
 
static PhaseMarginInfo phase_margin (const Array< Real > &numerator, const Array< Real > &denominator, const size_t num_points=1024, const bool whole=false)
 
static GainMarginInfo gain_margin (const Array< Real > &numerator, const Array< Real > &denominator, const size_t num_points=1024, const bool whole=false)
 
static PhaseMarginInfo phase_margin (const IIRCoefficients &coeffs, const size_t num_points=1024, const bool whole=false)
 
static GainMarginInfo gain_margin (const IIRCoefficients &coeffs, const size_t num_points=1024, const bool whole=false)
 
static PhaseMarginInfo phase_margin (const BiquadSection &section, const size_t num_points=1024, const bool whole=false)
 
static GainMarginInfo gain_margin (const BiquadSection &section, const size_t num_points=1024, const bool whole=false)
 
static PhaseMarginInfo phase_margin (const Array< BiquadSection > &sections, const size_t num_points=1024, const bool whole=false)
 
static GainMarginInfo gain_margin (const Array< BiquadSection > &sections, const size_t num_points=1024, const bool whole=false)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > PhaseMarginInfo phase_margin (const NumContainer &numerator, const DenContainer &denominator, const size_t num_points=1024, const bool whole=false)
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > GainMarginInfo gain_margin (const NumContainer &numerator, const DenContainer &denominator, const size_t num_points=1024, const bool whole=false)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static PhaseMarginInfo phase_margin (const SectionsContainer &sections, const size_t num_points=1024, const bool whole=false)
 
template<typename SectionsContainer >
requires Is_Biquad_Container<SectionsContainer>
static GainMarginInfo gain_margin (const SectionsContainer &sections, const size_t num_points=1024, const bool whole=false)
 
static IIRCoefficients bilinear_transform (const Array< Real > &analog_numerator, const Array< Real > &analog_denominator, const Real sample_rate)
 Bilinear transform of an analog transfer function.
 
template<typename NumContainer , typename DenContainer >
requires Is_Real_Container<NumContainer>
and static Is_Real_Container< DenContainer > IIRCoefficients bilinear_transform (const NumContainer &analog_numerator, const DenContainer &analog_denominator, const Real sample_rate)
 
static Array< BiquadSectionbutterworth_lowpass (const size_t order, const Real cutoff_frequency, const Real sample_rate)
 Digital Butterworth low-pass design returned as SOS.
 
static Array< BiquadSectionbutterworth_highpass (const size_t order, const Real cutoff_frequency, const Real sample_rate)
 Digital Butterworth high-pass design returned as SOS.
 
static Array< BiquadSectionbutterworth_bandpass (const size_t order, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital Butterworth band-pass design returned as SOS.
 
static Array< BiquadSectionbutterworth_bandstop (const size_t order, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital Butterworth band-stop design returned as SOS.
 
static Array< BiquadSectionchebyshev1_lowpass (const size_t order, const Real ripple_db, const Real cutoff_frequency, const Real sample_rate)
 Digital Chebyshev-I low-pass design returned as SOS.
 
static Array< BiquadSectionchebyshev1_highpass (const size_t order, const Real ripple_db, const Real cutoff_frequency, const Real sample_rate)
 Digital Chebyshev-I high-pass design returned as SOS.
 
static Array< BiquadSectionchebyshev1_bandpass (const size_t order, const Real ripple_db, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital Chebyshev-I band-pass design returned as SOS.
 
static Array< BiquadSectionchebyshev1_bandstop (const size_t order, const Real ripple_db, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital Chebyshev-I band-stop design returned as SOS.
 
static Array< BiquadSectionchebyshev2_lowpass (const size_t order, const Real attenuation_db, const Real cutoff_frequency, const Real sample_rate)
 Digital Chebyshev-II low-pass design returned as SOS.
 
static Array< BiquadSectionchebyshev2_highpass (const size_t order, const Real attenuation_db, const Real cutoff_frequency, const Real sample_rate)
 Digital Chebyshev-II high-pass design returned as SOS.
 
static Array< BiquadSectionchebyshev2_bandpass (const size_t order, const Real attenuation_db, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital Chebyshev-II band-pass design returned as SOS.
 
static Array< BiquadSectionchebyshev2_bandstop (const size_t order, const Real attenuation_db, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital Chebyshev-II band-stop design returned as SOS.
 
static Array< BiquadSectionbessel_lowpass (const size_t order, const Real cutoff_frequency, const Real sample_rate)
 Digital Bessel low-pass design returned as SOS.
 
static Array< BiquadSectionbessel_highpass (const size_t order, const Real cutoff_frequency, const Real sample_rate)
 Digital Bessel high-pass design returned as SOS.
 
static Array< BiquadSectionbessel_bandpass (const size_t order, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital Bessel band-pass design returned as SOS.
 
static Array< BiquadSectionbessel_bandstop (const size_t order, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital Bessel band-stop design returned as SOS.
 
static Array< BiquadSectionelliptic_lowpass (const size_t order, const Real ripple_db, const Real attenuation_db, const Real cutoff_frequency, const Real sample_rate)
 Digital elliptic/Cauer low-pass design returned as SOS.
 
static Array< BiquadSectionelliptic_highpass (const size_t order, const Real ripple_db, const Real attenuation_db, const Real cutoff_frequency, const Real sample_rate)
 Digital elliptic/Cauer high-pass design returned as SOS.
 
static Array< BiquadSectionelliptic_bandpass (const size_t order, const Real ripple_db, const Real attenuation_db, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital elliptic/Cauer band-pass design returned as SOS.
 
static Array< BiquadSectionelliptic_bandstop (const size_t order, const Real ripple_db, const Real attenuation_db, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate)
 Digital elliptic/Cauer band-stop design returned as SOS.
 
static Array< Realfiltfilt (const Array< Real > &signal, const Array< Real > &coeffs, const size_t block_size=0)
 Zero-phase FIR filtering via forward-backward convolution.
 
static Array< Realpfiltfilt (ThreadPool &pool, const Array< Real > &signal, const Array< Real > &coeffs, const size_t block_size=0, const size_t chunk_size=0)
 Parallel zero-phase FIR filtering via forward-backward convolution.
 
template<typename SignalContainer , typename CoeffContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< CoeffContainer > Array< Realfiltfilt (const SignalContainer &signal, const CoeffContainer &coeffs, const size_t block_size=0)
 
template<typename SignalContainer , typename CoeffContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Real_Container< CoeffContainer > Array< Realpfiltfilt (ThreadPool &pool, const SignalContainer &signal, const CoeffContainer &coeffs, const size_t block_size=0, const size_t chunk_size=0)
 
static Array< Realfiltfilt (const Array< Real > &signal, const Array< Real > &numerator, const Array< Real > &denominator)
 Zero-phase IIR filtering using transfer-function coefficients.
 
static Array< Realfiltfilt (const Array< Real > &signal, const IIRCoefficients &coeffs)
 Zero-phase IIR filtering with explicit coefficient groups.
 
static Array< Realfiltfilt (const Array< Real > &signal, const BiquadSection &section)
 Zero-phase filtering of one biquad section.
 
static Array< Realfiltfilt (const Array< Real > &signal, const Array< BiquadSection > &sections)
 Zero-phase filtering of a cascade of biquad sections.
 
template<typename SignalContainer , typename NumContainer , typename DenContainer >
requires Is_Real_Container<SignalContainer>
and Is_Real_Container< NumContainer > and static Is_Real_Container< DenContainer > Array< Realfiltfilt (const SignalContainer &signal, const NumContainer &numerator, const DenContainer &denominator)
 
template<typename SignalContainer >
requires Is_Real_Container<SignalContainer>
static Array< Realfiltfilt (const SignalContainer &signal, const IIRCoefficients &coeffs)
 
template<typename SignalContainer >
requires Is_Real_Container<SignalContainer>
static Array< Realfiltfilt (const SignalContainer &signal, const BiquadSection &section)
 
template<typename SignalContainer , typename SectionsContainer >
requires Is_Real_Container<SignalContainer>
and static Is_Biquad_Container< SectionsContainer > Array< Realfiltfilt (const SignalContainer &signal, const SectionsContainer &sections)
 
static Array< Realoverlap_add_convolution (const Array< Real > &signal, const Array< Real > &kernel, const size_t block_size=0)
 Convenience wrapper for long real convolution via overlap-add.
 
static Array< Realpoverlap_add_convolution (ThreadPool &pool, const Array< Real > &signal, const Array< Real > &kernel, const size_t block_size=0, const size_t chunk_size=0)
 Parallel convenience wrapper for overlap-add convolution.
 
static Array< Array< Real > > overlap_add_convolution_batch (const Array< Array< Real > > &signals, const Array< Real > &kernel, const size_t block_size=0)
 Multichannel overlap-add convolution with a shared kernel FFT.
 
static Array< Array< Real > > poverlap_add_convolution_batch (ThreadPool &pool, const Array< Array< Real > > &signals, const Array< Real > &kernel, const size_t block_size=0, const size_t chunk_size=0)
 Parallel version of overlap_add_convolution_batch.
 
static Array< Realoverlap_save_convolution (const Array< Real > &signal, const Array< Real > &kernel, const size_t block_size=0)
 Convenience wrapper for overlap-save real convolution.
 
static Array< Realpartitioned_convolution (const Array< Real > &signal, const Array< Real > &kernel, const size_t partition_size=0)
 Convenience wrapper for low-latency partitioned convolution.
 
template<typename Container1 , typename Container2 >
requires Is_Real_Container<Container1>
and static Is_Real_Container< Container2 > Array< Realoverlap_add_convolution (const Container1 &signal, const Container2 &kernel, const size_t block_size=0)
 Overlap-add convolution for real-valued containers.
 
template<typename Container1 , typename Container2 >
requires Is_Real_Container<Container1>
and static Is_Real_Container< Container2 > Array< Realpoverlap_add_convolution (ThreadPool &pool, const Container1 &signal, const Container2 &kernel, const size_t block_size=0, const size_t chunk_size=0)
 Parallel version of overlap_add_convolution(const Container1&, const Container2&, size_t).
 
template<typename Container1 , typename Container2 >
requires Is_Real_Container<Container1>
and static Is_Real_Container< Container2 > Array< Realoverlap_save_convolution (const Container1 &signal, const Container2 &kernel, const size_t block_size=0)
 Overlap-save convolution for real-valued containers.
 
template<typename Container1 , typename Container2 >
requires Is_Real_Container<Container1>
and static Is_Real_Container< Container2 > Array< Realpartitioned_convolution (const Container1 &signal, const Container2 &kernel, const size_t partition_size=0)
 Partitioned convolution for real-valued containers.
 
static Array< Complexmultiply (const Array< Complex > &a, const Array< Complex > &b)
 Multiplies two complex-valued sequences using convolution.
 
static Array< Complexpmultiply (ThreadPool &pool, const Array< Complex > &a, const Array< Complex > &b, const size_t chunk_size=0)
 Parallel version of multiply(const Array<Complex>&, const Array<Complex>&).
 
template<typename Container1 , typename Container2 >
requires Is_Complex_Container<Container1>
and static Is_Complex_Container< Container2 > Array< Complexmultiply (const Container1 &a, const Container2 &b)
 Multiplication for complex-valued containers.
 
template<typename Container1 , typename Container2 >
requires Is_Complex_Container<Container1>
and static Is_Complex_Container< Container2 > Array< Complexpmultiply (ThreadPool &pool, const Container1 &a, const Container2 &b, const size_t chunk_size=0)
 Parallel version of multiply(const Container1&, const Container2&).
 
static Array< Realmultiply (const Array< Real > &a, const Array< Real > &b)
 Multiplies two real-valued sequences using convolution.
 
static Array< Realpmultiply (ThreadPool &pool, const Array< Real > &a, const Array< Real > &b, const size_t chunk_size=0)
 Parallel version of multiply(const Array<Real>&, const Array<Real>&).
 
template<typename Container1 , typename Container2 >
requires Is_Real_Container<Container1>
and static Is_Real_Container< Container2 > Array< Realmultiply (const Container1 &a, const Container2 &b)
 Multiplication for real-valued containers.
 
template<typename Container1 , typename Container2 >
requires Is_Real_Container<Container1>
and static Is_Real_Container< Container2 > Array< Realpmultiply (ThreadPool &pool, const Container1 &a, const Container2 &b, const size_t chunk_size=0)
 Parallel version of multiply(const Container1&, const Container2&).
 

Static Private Member Functions

static Complex twiddle_at (const Real angle, const size_t index)
 Computes a single twiddle factor exp(j * angle * index).
 
static Real transform_stages (const size_t n) noexcept
 Returns log2(N) stages, used for numerical error scaling.
 
static Real real_projection_tolerance (const Complex &value, const size_t n) noexcept
 Rationale: Estimates the maximum expected numerical noise for a value after an N-point transform, used to validate real projections.
 
static Real hermitian_tolerance (const Complex &lhs, const Complex &rhs, const size_t n) noexcept
 Rationale: Numerical tolerance for Hermitian symmetry checks.
 
static void validate_real_spectrum (const Array< Complex > &input, const char *ctx)
 Rationale: Ensures a complex spectrum has the Hermitian symmetry (X[k] = X[N-k]*) required to be the transform of a real signal.
 
static Array< Realcosine_sum_window (const size_t n, const Real a0, const Real a1=Real(0), const Real a2=Real(0))
 Internal generator for generalized cosine windows (Hann, Hamming, Blackman).
 
template<typename T >
static Array< Treverse_copy (const Array< T > &input)
 Functional reverse.
 
template<typename T >
static Array< Tprefix_copy (const Array< T > &input, const size_t length)
 Functional prefix extraction.
 
template<typename T >
static Array< Tslice_copy (const Array< T > &input, const size_t offset, const size_t length)
 Functional slice extraction.
 
static size_t default_filtfilt_pad_length (const size_t signal_size, const size_t coeff_size) noexcept
 Rationale: Rule-of-thumb for filtfilt padding to allow transients to decay.
 
static Array< Realreflect_pad_signal (const Array< Real > &signal, const size_t pad_len)
 Rationale: Applies reflection padding at signal edges to reduce boundary artifacts during filtering.
 
static Array< Realzero_pad_edges (const Array< Real > &signal, const size_t left_pad, const size_t right_pad)
 functional zero-padding at both ends.
 
static Array< Realoverlap_profile (const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const size_t hop_size, const char *ctx)
 Rationale: Computes the effective window product for a windowed overlap-add process to validate reconstruction constraints.
 
static bool overlap_profile_has_nola (const Array< Real > &profile) noexcept
 Rationale: Non-zero Overlap-Add (NOLA) ensures the signal can be reconstructed (it's never multiplied by zero in all frames).
 
static bool overlap_profile_has_cola (const Array< Real > &profile) noexcept
 Rationale: Constant Overlap-Add (COLA) ensures that OLA reconstruction has no amplitude modulation artifacts.
 
static void validate_overlap_constraints (const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const size_t hop_size, const bool validate_nola, const bool validate_cola, const char *ctx)
 Rationale: Internal validator for STFT/ISTFT windowing parameters.
 
static Array< size_t > frame_offsets_impl (const size_t signal_size, const size_t frame_size, const size_t hop_size, const bool pad_end, const char *ctx)
 Computes framing offsets.
 
static Real max_abs_value (const Array< Real > &input) noexcept
 L-infinity norm.
 
static Real sum_values (const Array< Real > &input) noexcept
 Sum reduction.
 
static Real sum_squares (const Array< Real > &input) noexcept
 L2 norm squared.
 
static Array< Realdemean_copy (const Array< Real > &input)
 Returns a copy with DC offset removed.
 
static Array< Realone_sided_frequency_grid (const size_t fft_size, const Real sample_rate, const char *ctx)
 Maps bin indices to frequency in Hz.
 
static bool is_one_sided_interior_bin (const size_t bin, const size_t fft_size) noexcept
 Identifies non-redundant spectrum bins (excluding DC and Nyquist).
 
static size_t resolve_welch_hop_size (const WelchOptions &options, const size_t frame_size, const char *ctx)
 Default hop size for Welch analysis (50% overlap).
 
static size_t resolve_welch_fft_size (const WelchOptions &options, const size_t frame_size, const char *ctx)
 Default FFT size for Welch analysis (zero-padded to power of 2).
 
static Array< Array< Real > > prepare_welch_frames (const Array< Real > &signal, const Array< Real > &window, const WelchOptions &options, const char *ctx)
 Rationale: Encapsulates frame extraction, detrending and windowing common to Welch and other spectral estimators.
 
template<typename Density >
static void apply_one_sided_density_scaling (Density &value, const size_t bin, const size_t fft_size) noexcept
 Rationale: Multiplies spectral densities by 2 for interior bins to account for energy in the omitted negative frequency half.
 
static size_t effective_coeff_length (const Array< Real > &input) noexcept
 Returns length excluding trailing insignificant zeros.
 
static Array< Realscaled_copy (const Array< Real > &input, const Real factor)
 Scalar scaling.
 
static Real scaled_tolerance (const Real reference, const Real multiplier=Real(256)) noexcept
 
static Real series_zero_tolerance (const size_t coeff_count, const Real multiplier=Real(256)) noexcept
 
static IIRCoefficients normalize_iir_coefficients (const Array< Real > &numerator, const Array< Real > &denominator, const char *ctx)
 
static Array< Realsolve_dense_system (Array< Real > matrix, Array< Real > rhs, const size_t n, const char *ctx)
 
static Array< Realiir_steady_state (const Array< Real > &numerator, const Array< Real > &denominator, const char *ctx)
 
static Array< Realiir_filter_impl (const Array< Real > &signal, const Array< Real > &numerator, const Array< Real > &denominator, const Array< Real > &initial_state, const char *ctx, Array< Real > *final_state=nullptr)
 
static Array< Realiir_filtfilt_impl (const Array< Real > &signal, const Array< Real > &numerator, const Array< Real > &denominator, const char *ctx)
 
static Array< Realsos_filtfilt_impl (const Array< Real > &signal, const Array< BiquadSection > &sections, const char *ctx)
 
template<typename T >
static void append_all (Array< T > &dst, const Array< T > &src)
 
template<typename T >
static void drop_prefix (Array< T > &input, const size_t count)
 
static constexpr size_t saturating_product (const size_t lhs, const size_t rhs) noexcept
 
static bool should_parallelize_batch_work (ThreadPool *pool, const size_t batch_size, const size_t transform_size, const size_t min_work=8192) noexcept
 
static size_t count_non_empty_real_batch (const Array< Array< Real > > &batch) noexcept
 
static size_t recommended_cache_tile_size (const size_t transform_size, const size_t batch_size, ThreadPool *pool) noexcept
 
static Array< Realbuild_padded_frame_from_prefix (const Array< Real > &input, const size_t frame_size)
 
static size_t validate_stft_options (const Array< Real > &window, const STFTOptions &options, const char *ctx)
 
static Array< Complexprepare_stft_frame_input (const Array< Real > &frame, const Array< Real > &window, const size_t fft_size)
 
static Array< Array< Complex > > transform_stft_frames (const Array< Array< Real > > &frames, const Array< Real > &window, const size_t fft_size, const Plan &plan, ThreadPool *pool, const size_t chunk_size)
 
static Array< Array< Complex > > stft_impl (const Array< Real > &signal, const Array< Real > &window, const STFTOptions &options, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 
static Complex evaluate_transfer_at (const Array< Real > &numerator, const Array< Real > &denominator, const Real omega, const char *ctx)
 
static FrequencyResponse freqz_impl (const Array< Real > &numerator, const Array< Real > &denominator, const size_t num_points, const bool whole, const char *ctx)
 
static SeriesEvaluation evaluate_series_at_unit_circle (const Array< Real > &coefficients, const Real omega, const char *ctx)
 
static PolynomialEvaluation evaluate_polynomial_and_derivative (const Array< Real > &coefficients, const Complex &x, const char *ctx)
 
static std::pair< Array< Real >, Realdivide_polynomial_by_linear_root (const Array< Real > &coefficients, const Real root, const char *ctx)
 
static std::pair< Array< Real >, Array< Complex > > extract_repeated_unit_roots (const Array< Real > &coefficients, const char *ctx)
 
static Real polynomial_root_upper_bound (const Array< Real > &monic) noexcept
 
static Real polynomial_root_lower_bound (const Array< Real > &monic) noexcept
 
static BalancedPolynomial balance_polynomial_for_roots (const Array< Real > &coefficients, const char *ctx)
 
static Array< Complexinitialize_root_guesses (const Array< Real > &coefficients)
 
static bool try_aberth_ehrlich_roots (const Array< Real > &coefficients, const Real tol, Array< Complex > &roots, const size_t max_iterations=192) noexcept
 
static bool try_durand_kerner_roots (const Array< Real > &coefficients, const Real tol, Array< Complex > &roots, const size_t max_iterations=192) noexcept
 
static void polish_roots_with_newton (const Array< Real > &coefficients, Array< Complex > &roots, const Real tol, const size_t iterations) noexcept
 
static void enforce_real_polynomial_symmetry (Array< Complex > &roots, const Real tol) noexcept
 
static bool roots_pass_residual_check (const Array< Real > &coefficients, const Array< Complex > &roots, const Real tol) noexcept
 
static bool try_laguerre_roots (const Array< Real > &coefficients, const Real tol, Array< Complex > &roots) noexcept
 
static Array< Complexpolynomial_roots_impl (const Array< Real > &coefficients, const char *ctx)
 Rationale: Master implementation for polynomial root-finding.
 
static Array< Realtrim_leading_zeros_copy (const Array< Real > &input) noexcept
 Rationale: Copy utility that removes leading zero coefficients, effectively normalizing the polynomial degree.
 
static TransferTerms evaluate_transfer_terms_at (const Array< Real > &numerator, const Array< Real > &denominator, const Real omega, const char *ctx)
 implementation helper for evaluating H(z) and its derivatives on the unit circle.
 
static Array< Realanalytic_group_delay_impl (const Array< Real > &numerator, const Array< Real > &denominator, const size_t num_points, const bool whole, const char *ctx)
 Rationale: Analytic calculation of group delay (-dphi/domega) using the complex derivative of the transfer function, which is more accurate than numerical differentiation.
 
static Array< Realanalytic_sos_group_delay_impl (const Array< BiquadSection > &sections, const FrequencyResponse &response, const char *ctx)
 implementation of analytic group delay for SOS cascades.
 
static Array< Realanalytic_phase_delay_impl (const Array< Real > &numerator, const Array< Real > &denominator, const size_t num_points, const bool whole, const char *ctx)
 implementation of analytic phase delay calculation.
 
static Real max_root_radius (const Array< Complex > &roots) noexcept
 Returns the magnitude of the largest root in the set.
 
static Array< PoleZeroPairpole_zero_pairs_impl (const Array< Complex > &zeros, const Array< Complex > &poles)
 Rationale: Matches zeros and poles into pairs by minimizing Euclidean distance, aiding in SOS decomposition.
 
static Real minimum_cancellation_distance_impl (const Array< PoleZeroPair > &pairs) noexcept
 Rationale: Estimates the minimum distance between any matched pole and zero to identify potential cancellations.
 
template<typename T >
static Array< Tpolynomial_multiply (const Array< T > &lhs, const Array< T > &rhs)
 Rationale: Standard polynomial multiplication (O(N*M)).
 
template<typename T >
static void add_scaled_polynomial (Array< T > &dst, const Array< T > &src, const T scale)
 Rationale: In-place addition of a scaled polynomial.
 
static Real integer_power (const Real base, const size_t exponent) noexcept
 Fast integer power utility.
 
static Array< Realsigned_binomial (const size_t power, const Real sign)
 Rationale: Computes (1 + sign*x)^power coefficients.
 
static Array< Realbilinear_substitute_polynomial (const Array< Real > &analog, const size_t order, const Real sample_rate, const char *ctx)
 Rationale: Performs the bilinear substitution mapping from the S-plane to the Z-domain: H(z) = H(s)|s=2*fs*(z-1)/(z+1).
 
static Array< Complexpolynomial_from_roots_complex (const Array< Complex > &roots)
 Rationale: Polynomial expansion (z-r1)(z-r2)...
 
static Array< Realtrim_polynomial_leading_zeros (const Array< Real > &input, const char *ctx)
 Validation wrapper for trim_leading_zeros_copy.
 
static Array< Realpolynomial_power (const Array< Real > &poly, const size_t exponent, const char *ctx)
 implementation of P(x)^n via successive multiplication.
 
static Array< Realsubstitute_rational_polynomial (const Array< Real > &poly, const Array< Real > &numerator, const Array< Real > &denominator, const char *ctx)
 Rationale: Evaluates P(N(z)/D(z)) by scaling by the common denominator D(z)^degree and evaluating the resulting nested polynomial expansion.
 
static IIRCoefficients apply_analog_rational_transform (const Array< Real > &numerator, const Array< Real > &denominator, const Array< Real > &map_numerator, const Array< Real > &map_denominator, const char *ctx)
 Rationale: Transforms an analog transfer function H(s) via rational substitution s = N(z)/D(z), as used in bilinear or frequency-selective mappings.
 
static Array< Realreal_polynomial_from_roots (const Array< Complex > &roots, const char *ctx)
 Rationale: Constructs a real-coefficient polynomial from a set of complex roots, verifying that roots appear in conjugate pairs.
 
static Complex group_center (const Array< Complex > &roots) noexcept
 Geometric center of a root set.
 
static Array< Complexenforce_conjugate_symmetry (const Array< Complex > &roots)
 Enforce conjugate symmetry on roots of a real-coefficient polynomial.
 
static Array< RootGrouproot_groups_impl (const Array< Complex > &raw_roots, const char *ctx)
 Rationale: Partitions a set of roots into real sections and conjugate pairs to facilitate SOS decomposition.
 
static BiquadSection section_from_coefficients (const Array< Real > &numerator, const Array< Real > &denominator, const char *ctx)
 Rationale: Converts generic IIR coefficients into a stabilized BiquadSection structure, enforcing the second-order limit.
 
static IIRCoefficients bilinear_transform_impl (const Array< Real > &analog_numerator, const Array< Real > &analog_denominator, const Real sample_rate, const char *ctx)
 implementation helper for the bilinear transform.
 
static Real prewarp_frequency (const Real cutoff_frequency, const Real sample_rate, const char *ctx)
 Rationale: Prewarps an analog cutoff frequency to compensate for the non-linear frequency mapping of the bilinear transform.
 
static Real comp_ellint_1_impl (const Real k)
 
static Real carlson_rf_impl (Real x, Real y, Real z)
 
static Real ellint_1_impl (const Real k, const Real phi)
 
static Real complete_elliptic_first_kind (const Real modulus, const char *ctx)
 Rationale: Complete elliptic integral K(k) using the modulus convention required by elliptic filter design.
 
static JacobiValues jacobi_sn_cn_dn (const Real argument, const Real modulus, const char *ctx)
 Rationale: Simultanous calculation of Jacobi sn, cn, dn functions using the descending Landen transformation or AGM.
 
static Real inverse_jacobi_sc (const Real value, const Real modulus, const char *ctx)
 
static Real solve_elliptic_selectivity_modulus (const Real k1, const size_t order, const char *ctx)
 
static Complex elliptic_cd_minus_imaginary (const Real u, const Real v, const Real modulus, const char *ctx)
 
static AnalogPrototype butterworth_prototype (const size_t order, const char *ctx)
 
static AnalogPrototype chebyshev1_prototype (const size_t order, const Real ripple_db, const char *ctx)
 
static AnalogPrototype chebyshev2_prototype (const size_t order, const Real attenuation_db, const char *ctx)
 
static AnalogPrototype elliptic_prototype (const size_t order, const Real ripple_db, const Real attenuation_db, const char *ctx)
 
static Real evaluate_analog_transfer_magnitude (const Array< Real > &numerator, const Array< Real > &denominator, const Real omega, const char *ctx)
 Rationale: Direct evaluation of |H(j*omega)| for an analog transfer function.
 
static Array< Realreverse_bessel_polynomial (const size_t order, const char *ctx)
 Rationale: Generates coefficients for the Reverse Bessel Polynomial used in Bessel filter prototypes.
 
static AnalogPrototype bessel_prototype (const size_t order, const char *ctx)
 implementation of the Bessel filter analog prototype.
 
static Array< BiquadSectiondesign_low_high_sections (const AnalogPrototype &prototype, const Real cutoff_frequency, const Real sample_rate, const bool highpass, const char *ctx)
 internal helper for designing standard lowpass/highpass SOS filters.
 
static Array< BiquadSectiondesign_prototype_sections (const AnalogPrototype &prototype, const size_t order, const Real cutoff_frequency, const Real sample_rate, const bool highpass, const char *ctx)
 
static std::pair< Real, Realprewarp_band_edges (const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate, const char *ctx)
 Prewarps a pair of band edges for bilinear transform.
 
static Array< BiquadSectiontransfer_function_to_sections (const IIRCoefficients &coeffs, const Array< RootGroup > &zero_groups, const char *ctx)
 Rationale: Decomposes a general IIR transfer function into a cascade of Second-Order Sections (SOS) by pairing poles and zeros.
 
static Array< BiquadSectiontransfer_function_to_sections (const Array< Real > &numerator, const Array< Real > &denominator, const char *ctx)
 overload of transfer_function_to_sections using raw coefficients.
 
static Array< BiquadSectiondesign_bandstop_sections_without_numerator_roots (const AnalogPrototype &prototype, const size_t order, const Real low_cutoff_frequency, const Real high_cutoff_frequency, const Real sample_rate, const char *ctx)
 Specialization for band-stop designs to handle zeros explicitly.
 
static Array< BiquadSectiondesign_transformed_sections (const AnalogPrototype &prototype, const Array< Real > &map_numerator, const Array< Real > &map_denominator, const Real sample_rate, const char *ctx)
 Generic implementation for designing transformed SOS cascades.
 
static Real modified_bessel_i0 (const Real x) noexcept
 Standard Zeroth-order Modified Bessel function of the first kind.
 
static Real normalized_sinc (const Real x) noexcept
 Standard normalized sinc function sin(pi*x)/(pi*x).
 
static Real evaluate_fir_response_magnitude (const Array< Real > &coeffs, const Real omega, const char *ctx)
 implementation helper for FIR frequency response magnitude.
 
static void normalize_fir_at_omega (Array< Real > &coeffs, const Real omega, const char *ctx)
 Normalizes FIR coefficients to have unit gain at frequency omega.
 
static Array< Realfirwin_lowpass_impl (const size_t num_taps, const Real cutoff_frequency, const Real sample_rate, const Array< Real > &window, const char *ctx)
 implementation of the window-method FIR design.
 
static Real integrate_cos_basis (const Real omega_lo, const Real omega_hi, const size_t harmonic) noexcept
 Rationale: Evaluates integral of cos(k*w) from omega_lo to omega_hi.
 
static Real integrate_cos_product (const Real omega_lo, const Real omega_hi, const size_t lhs_harmonic, const size_t rhs_harmonic) noexcept
 Rationale: Evaluates integral of cos(m*w)*cos(n*w).
 
static Real integrate_offset_cos_basis (const Real omega_lo, const Real omega_hi, const size_t harmonic) noexcept
 implementation helper for firls slope integration.
 
static Real integrate_linear_cos_basis (const Real omega_lo, const Real omega_hi, const Real desired_lo, const Real desired_hi, const size_t harmonic) noexcept
 implementation helper for firls linear band integration.
 
static Array< Realfirls_impl (const size_t num_taps, const Array< Real > &bands, const Array< Real > &desired, const Real sample_rate, const Array< Real > &weights, const char *ctx)
 implementation of Least-Squares FIR design.
 
static WeightedFrequencyGrid build_weighted_frequency_grid (const size_t num_taps, const Array< Real > &bands, const Array< Real > &desired, const Real sample_rate, const Array< Real > &weights, const size_t grid_density, const char *ctx)
 
static Real evaluate_cosine_series (const Array< Real > &coefficients, const Real omega) noexcept
 
static Array< size_t > evenly_spaced_extrema (const size_t grid_size, const size_t extremal_count)
 
static Array< size_t > choose_remez_extrema (const Array< Real > &weighted_error, const size_t required_count, const char *ctx)
 
static Array< Realsolve_remez_cosine_series (const Array< Real > &omega, const Array< Real > &desired, const Array< Real > &weight, const Array< size_t > &extrema, const size_t half_order, const char *ctx)
 
static Array< Realremez_impl (const size_t num_taps, const Array< Real > &bands, const Array< Real > &desired, const Real sample_rate, const Array< Real > &weights, const size_t grid_density, const size_t max_iterations, const char *ctx)
 
static Real interpolate_crossing (const Real x0, const Real y0, const Real x1, const Real y1, const Real target) noexcept
 
static Real interpolate_value_at (const Real x0, const Real y0, const Real x1, const Real y1, const Real x) noexcept
 
static Real align_phase_near_reference (const Real raw_phase, const Real reference_phase) noexcept
 
template<typename Evaluator >
static Real refine_scalar_crossing (const Evaluator &evaluator, const Real x0, const Real y0, const Real x1, const Real y1, const Real target)
 
static Complex evaluate_sos_transfer_at (const Array< BiquadSection > &sections, const Real omega, const char *ctx)
 
static PhaseMarginInfo phase_margin_impl (const FrequencyResponse &response)
 
static GainMarginInfo gain_margin_impl (const FrequencyResponse &response)
 implementation helper for Gain Margin calculation.
 
template<typename Evaluator >
static PhaseMarginInfo phase_margin_refined_impl (const FrequencyResponse &response, const Evaluator &evaluator)
 implementation of refined Phase Margin calculation using analytic evaluation.
 
template<typename Evaluator >
static GainMarginInfo gain_margin_refined_impl (const FrequencyResponse &response, const Evaluator &evaluator)
 implementation of refined Gain Margin calculation using analytic evaluation.
 
static Array< Realunwrap_phase (const Array< Real > &phase)
 implementation of phase unwrapping (removes +/- 2*pi jumps).
 
static Array< Realgroup_delay_impl (const FrequencyResponse &response)
 implementation of numeric group delay calculation.
 
static Array< Realphase_delay_impl (const FrequencyResponse &response)
 implementation of numeric phase delay calculation.
 
static void validate_istft_configuration (const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const size_t fft_size, const ISTFTOptions &options, const char *ctx)
 Rationale: Validates and normalizes ISTFT parameters, checking window constraints and FFT size.
 
static Array< Realistft_impl (const Array< Array< Complex > > &spectrogram, const Array< Real > &analysis_window, const Array< Real > &synthesis_window, const ISTFTOptions &options, ThreadPool *pool, const size_t chunk_size)
 implementation of the Inverse Short-Time Fourier Transform.
 
static Array< Complexzero_padded_copy (const Array< Complex > &input, const size_t n)
 Returns a copy of input zero-padded to size n.
 
static Array< Realzero_padded_copy (const Array< Real > &input, const size_t n)
 Returns a copy of input zero-padded to size n.
 
static void trim_to_size (Array< Complex > &input, const size_t n)
 Trims input to size n.
 
template<typename T , typename Container >
requires requires(const Container & c) { std::begin(c); std::end(c); requires std::convertible_to<decltype(*std::begin(c)), T>; }
static Array< Tto_array (const Container &input)
 
template<typename Container >
requires Is_Complex_Container<Container>
static Array< Complexbuild_complex_input (const Container &input)
 
template<typename Container >
requires Is_Real_Container<Container>
static Array< Realbuild_real_input (const Container &input)
 
static size_t tensor_element_count (const Array< size_t > &shape, const char *ctx)
 
static Array< size_t > row_major_strides (const Array< size_t > &shape, const char *ctx)
 
static size_t tensor_max_offset (const Array< size_t > &shape, const Array< size_t > &strides, const char *ctx)
 
static TensorLayout normalize_tensor_layout (const Array< Complex > &data, const TensorLayout &layout, const char *ctx)
 Rationale: Validates a tensor layout and infers row-major strides if they are not provided.
 
static Array< size_t > normalize_axes (const Array< size_t > &axes, const size_t rank, const char *ctx)
 Rationale: Validates axis indices against the tensor rank and ensures no axis is specified more than once.
 
static Array< size_t > axis_base_offsets (const Array< size_t > &shape, const Array< size_t > &strides, const size_t axis)
 Rationale: Generates the base memory offsets for all 1D slices along a specific axis in a multidimensional tensor.
 
static Array< Complexgather_axis_slice (const Array< Complex > &data, const size_t base_offset, const size_t axis_length, const size_t axis_stride)
 Rationale: Extracts a non-contiguous slice of data along a tensor axis into a contiguous array for FFT processing.
 
static void scatter_axis_slice (Array< Complex > &data, const size_t base_offset, const size_t axis_stride, const Array< Complex > &slice)
 Rationale: Writes back a transformed contiguous slice into its original (potentially non-contiguous) memory locations.
 
static void transform_axis_impl (Array< Complex > &data, const TensorLayout &layout, const size_t axis, const bool invert, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 Rationale: Internal implementation of a 1D FFT along a single tensor axis.
 
static void transform_axes_impl (Array< Complex > &data, const TensorLayout &layout, const Array< size_t > &axes, const bool invert, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 Rationale: Internal implementation of a multi-axis tensor transform.
 
static Array< size_t > matrix_shape (const Array< Array< Complex > > &input, const char *ctx)
 Rationale: Validates that an Array of Arrays represents a rectangular matrix and returns its {rows, cols} shape.
 
static Array< Complexflatten_matrix_row_major (const Array< Array< Complex > > &input, const char *ctx)
 Rationale: Flattens a 2D matrix into a 1D row-major array.
 
static Array< Array< Complex > > reshape_matrix_row_major (const Array< Complex > &input, const size_t rows, const size_t cols, const char *ctx)
 Rationale: Reshapes a 1D row-major array back into a 2D matrix.
 
static Array< size_t > tensor3_shape (const Array< Array< Array< Complex > > > &input, const char *ctx)
 Rationale: Validates that a nested Array represents a 3D tensor and returns its {d0, d1, d2} shape.
 
static Array< Complexflatten_tensor3_row_major (const Array< Array< Array< Complex > > > &input, const char *ctx)
 Rationale: Flattens a 3D tensor into a 1D row-major array.
 
static Array< Array< Array< Complex > > > reshape_tensor3_row_major (const Array< Complex > &input, const size_t dim0, const size_t dim1, const size_t dim2, const char *ctx)
 Rationale: Reshapes a 1D row-major array back into a 3D tensor.
 
static Array< Array< Array< Complex > > > transpose_spectrogram_layout_impl (const Array< Array< Array< Complex > > > &input, const SpectrogramLayout source, const SpectrogramLayout target, const char *ctx)
 Rationale: Internal implementation for transposing between multichannel spectrogram layouts (e.g.
 
static Array< Complexlift_real_input (const Array< Real > &input)
 Lifts a real-valued input array to the complex domain.
 
static Array< Complextransform_real_optimized (const Array< Real > &input, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 Rationale: Optimized FFT for real signals of size N (power-of-two).
 
template<typename InversePackedTransform >
static Array< Realinverse_transform_real_optimized_impl (const Array< Complex > &input, const char *ctx, ThreadPool *pool, const size_t chunk_size, InversePackedTransform inverse_packed)
 Rationale: Optimized Inverse FFT for real signals of size N (power-of-two).
 
static Array< Realmultiply_real_optimized (const Array< Real > &a, const Array< Real > &b, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 Rationale: Efficiently multiplies two real sequences using a single N-point complex FFT by packing one sequence into the real part and the other into the imaginary part.
 
static Array< Complexmultiply_complex_impl (const Array< Complex > &a, const Array< Complex > &b, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 Rationale: Linear convolution of two complex sequences via FFT.
 
static Array< Realproject_real_output (const Array< Complex > &input, const char *ctx)
 Projects a complex-valued output array back to the real domain.
 
static void bit_reverse (Array< Complex > &a) noexcept
 Performs bit-reversal permutation in-place.
 
static size_t next_power_of_two (const size_t n)
 Calculates the smallest power of two greater than or equal to n.
 
static void transform_impl (Array< Complex > &a, const bool invert, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 implementation of the power-of-two iterative FFT using mixed radix-2/4.
 
static Array< size_t > factor_small_radices (size_t n)
 Rationale: Factors a number into small primes (2, 3, 4, 5) to determine if a composite FFT kernel is applicable.
 
static Array< Complexproject_to_plan_spectrum (const Plan &plan, const Array< Real > &input, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 
static Array< Array< Complex > > project_to_plan_batch_spectra (const Plan &plan, const Array< Array< Real > > &input, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 
static Array< Complexcompact_real_spectrum (const Array< Complex > &full_spectrum)
 
static Array< Array< Complex > > compact_real_batch_spectra (const Array< Array< Complex > > &full_spectra)
 
static size_t resolve_irfft_signal_size (const Array< Complex > &spectrum, const size_t signal_size, const char *ctx)
 
static Array< Complexexpand_real_spectrum (const Array< Complex > &spectrum, const size_t signal_size, const char *ctx)
 
static Array< Array< Complex > > expand_real_batch_spectra (const Array< Array< Complex > > &spectra, const size_t signal_size, const char *ctx)
 
static Array< Array< Real > > project_real_batch_output (const Array< Array< Complex > > &input, const char *ctx)
 
static void transform_any_size_impl (Array< Complex > &a, const bool invert, ThreadPool *pool=nullptr, const size_t chunk_size=0)
 
static Array< Realinverse_transform_real_general_impl (const Array< Complex > &input, const char *ctx, ThreadPool *pool, const size_t chunk_size)
 

Static Private Attributes

template<typename Container >
static constexpr bool Is_Complex_Container
 
template<typename Container >
static constexpr bool Is_Real_Container
 
template<typename Container >
static constexpr bool Is_Biquad_Container
 
template<typename Container >
static constexpr bool Is_Real_Batch_Container
 
static constexpr size_t twiddle_refresh_period = 32
 

Detailed Description

template<std::floating_point Real = double>
class Aleph::FFT< Real >

Fast Fourier Transform (FFT) and DSP Toolkit.

The FFT class provides a high-performance suite for time-to-frequency domain conversion and signal processing.

Performance and Architecture:

  • Mixed Radix Kernel: Automatically chooses the best algorithm for the input size. Radix-2/4 for powers of two, Bluestein for primes.
  • Precomputed Plans: Use Plan to avoid re-calculating twiddle factors for repeated transforms of the same length.
  • Concurrency: Parallel APIs (prefixed with p) leverage a ThreadPool for large-scale data processing.

Thread Safety:

All methods are static; there is no shared mutable instance state. Multiple threads may call any method concurrently on independent data without synchronization. The one exception is Plan: a single Plan object must not be used concurrently from multiple threads unless all concurrent calls are read-only (query-only methods).

Exception Safety:

  • Methods that allocate memory (e.g. transformed, convolve) provide the basic guarantee: if std::bad_alloc or any other exception is thrown, no resources are leaked and all objects remain in a valid (though possibly partially modified) state.
  • In-place methods (e.g. transform(Array<Complex>&, bool)) provide the basic guarantee: the array remains valid but may be partially transformed if an exception is thrown mid-way.
  • Callers should be prepared to handle std::bad_alloc (memory allocation failure), std::invalid_argument (zero-length or unsupported input), and std::domain_error (e.g. non-Hermitian spectrum passed to an inverse real transform).
  • No public method is declared noexcept; all may propagate exceptions.
Template Parameters
RealFloating-point precision (double, float, long double).
Examples
fft_example.cc.

Definition at line 153 of file fft.H.

Member Typedef Documentation

◆ Complex

template<std::floating_point Real = double>
using Aleph::FFT< Real >::Complex = std::complex<Real>

Definition at line 157 of file fft.H.

◆ value_type

template<std::floating_point Real = double>
using Aleph::FFT< Real >::value_type = Real

Definition at line 156 of file fft.H.

Member Enumeration Documentation

◆ SimdBackend

template<std::floating_point Real = double>
enum class Aleph::FFT::SimdBackend
strong

SIMD hardware acceleration backends.

Enumerator
scalar 

Generic implementation.

avx2 

Intel/AMD AVX2.

neon 

ARM NEON.

Definition at line 167 of file fft.H.

◆ SimdPreference

template<std::floating_point Real = double>
enum class Aleph::FFT::SimdPreference
strong

User-selected SIMD dispatch preference.

Enumerator
automatic 

Use the fastest available hardware.

scalar_only 

Force the portable scalar implementation.

avx2_only 

Force AVX2 (must be supported by CPU).

neon_only 

Force NEON (must be supported by CPU).

Definition at line 175 of file fft.H.

◆ SpectrogramLayout

template<std::floating_point Real = double>
enum class Aleph::FFT::SpectrogramLayout
strong

Logical layout for multichannel spectrograms.

Enumerator
channel_frame_bin 
frame_channel_bin 

Definition at line 344 of file fft.H.

Member Function Documentation

◆ add_scaled_polynomial()

template<std::floating_point Real = double>
template<typename T >
static void Aleph::FFT< Real >::add_scaled_polynomial ( Array< T > &  dst,
const Array< T > &  src,
const T  scale 
)
inlinestaticprivate

Rationale: In-place addition of a scaled polynomial.

Definition at line 2422 of file fft.H.

References ah_invalid_argument_if, Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::bilinear_substitute_polynomial().

◆ align_phase_near_reference()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::align_phase_near_reference ( const Real  raw_phase,
const Real  reference_phase 
)
inlinestaticprivatenoexcept

◆ analytic_group_delay_impl()

◆ analytic_phase_delay_impl()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::analytic_phase_delay_impl ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const size_t  num_points,
const bool  whole,
const char ctx 
)
inlinestaticprivate

◆ analytic_sos_group_delay_impl()

◆ append_all()

◆ apply_analog_rational_transform()

template<std::floating_point Real = double>
static IIRCoefficients Aleph::FFT< Real >::apply_analog_rational_transform ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const Array< Real > &  map_numerator,
const Array< Real > &  map_denominator,
const char ctx 
)
inlinestaticprivate

◆ apply_blackman_window() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::apply_blackman_window ( const Array< Complex > &  signal)
inlinestatic

Applies a Blackman window of matching size to a complex signal.

Definition at line 9006 of file fft.H.

References Aleph::FFT< Real >::apply_window(), Aleph::FFT< Real >::blackman_window(), and Aleph::Array< T >::size().

◆ apply_blackman_window() [2/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::apply_blackman_window ( const Array< Real > &  signal)
inlinestatic

Applies a Blackman window of matching size to a real signal.

Definition at line 8985 of file fft.H.

References Aleph::FFT< Real >::apply_window(), Aleph::FFT< Real >::blackman_window(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::apply_blackman_window().

◆ apply_blackman_window() [3/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::apply_blackman_window ( const Container signal)
inlinestatic

◆ apply_blackman_window() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::apply_blackman_window ( const Container signal)
inlinestatic

◆ apply_hamming_window() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::apply_hamming_window ( const Array< Complex > &  signal)
inlinestatic

Applies a Hamming window of matching size to a complex signal.

Definition at line 8999 of file fft.H.

References Aleph::FFT< Real >::apply_window(), Aleph::FFT< Real >::hamming_window(), and Aleph::Array< T >::size().

◆ apply_hamming_window() [2/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::apply_hamming_window ( const Array< Real > &  signal)
inlinestatic

Applies a Hamming window of matching size to a real signal.

Definition at line 8978 of file fft.H.

References Aleph::FFT< Real >::apply_window(), Aleph::FFT< Real >::hamming_window(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::apply_hamming_window().

◆ apply_hamming_window() [3/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::apply_hamming_window ( const Container signal)
inlinestatic

◆ apply_hamming_window() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::apply_hamming_window ( const Container signal)
inlinestatic

◆ apply_hann_window() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::apply_hann_window ( const Array< Complex > &  signal)
inlinestatic

Applies a Hann window of matching size to a complex signal.

Definition at line 8992 of file fft.H.

References Aleph::FFT< Real >::apply_window(), Aleph::FFT< Real >::hann_window(), and Aleph::Array< T >::size().

◆ apply_hann_window() [2/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::apply_hann_window ( const Array< Real > &  signal)
inlinestatic

Applies a Hann window of matching size to a real signal.

Definition at line 8971 of file fft.H.

References Aleph::FFT< Real >::apply_window(), Aleph::FFT< Real >::hann_window(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::apply_hann_window().

◆ apply_hann_window() [3/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::apply_hann_window ( const Container signal)
inlinestatic

◆ apply_hann_window() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::apply_hann_window ( const Container signal)
inlinestatic

◆ apply_one_sided_density_scaling()

template<std::floating_point Real = double>
template<typename Density >
static void Aleph::FFT< Real >::apply_one_sided_density_scaling ( Density value,
const size_t  bin,
const size_t  fft_size 
)
inlinestaticprivatenoexcept

Rationale: Multiplies spectral densities by 2 for interior bins to account for energy in the omitted negative frequency half.

Definition at line 856 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::is_one_sided_interior_bin().

◆ apply_window() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::apply_window ( const Array< Complex > &  signal,
const Array< Real > &  window 
)
inlinestatic

Applies a real window sample-by-sample to a complex signal.

Definition at line 8941 of file fft.H.

References ah_invalid_argument_if, Aleph::Array< T >::create(), output, and Aleph::Array< T >::size().

◆ apply_window() [2/4]

◆ apply_window() [3/4]

template<std::floating_point Real = double>
and static Is_Real_Container< WindowContainer > Array< Real > Aleph::FFT< Real >::apply_window ( const SignalContainer signal,
const WindowContainer window 
)
inlinestatic

◆ apply_window() [4/4]

◆ avx2_dispatch_available()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::avx2_dispatch_available ( )
inlinestaticnoexcept

Returns whether the runtime CPU can execute the AVX2 double kernel when it has been compiled in.

Definition at line 6065 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::avx2_runtime_available(), and Aleph::FFT< Real >::detected_simd_backend().

◆ avx2_kernel_compiled()

template<std::floating_point Real = double>
static constexpr bool Aleph::FFT< Real >::avx2_kernel_compiled ( )
inlinestaticconstexprnoexcept

Returns whether the AVX2 kernel was compiled for this precision.

Definition at line 6037 of file fft.H.

◆ avx2_runtime_available()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::avx2_runtime_available ( )
inlinestaticnoexcept

Returns whether AVX2 dispatch is supported at runtime.

Definition at line 6257 of file fft.H.

References Aleph::FFT< Real >::avx2_dispatch_available().

◆ axis_base_offsets()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::axis_base_offsets ( const Array< size_t > &  shape,
const Array< size_t > &  strides,
const size_t  axis 
)
inlinestaticprivate

Rationale: Generates the base memory offsets for all 1D slices along a specific axis in a multidimensional tensor.

Definition at line 5176 of file fft.H.

References Aleph::Array< T >::append(), Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), offset, Aleph::Array< T >::reserve(), Aleph::FFT< Real >::saturating_product(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::transform_axis_impl().

◆ balance_polynomial_for_roots()

◆ batched_istft() [1/3]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::batched_istft ( const Array< Array< Array< Complex > > > &  spectrograms,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const ISTFTOptions options,
const Array< size_t > &  signal_lengths = {} 
)
inlinestatic

Batched ISTFT with optional per-signal output lengths.

Definition at line 11313 of file fft.H.

◆ batched_istft() [2/3]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::batched_istft ( const Array< Array< Array< Complex > > > &  spectrograms,
const Array< Real > &  window,
const ISTFTOptions options,
const Array< size_t > &  signal_lengths = {} 
)
inlinestatic

Batched ISTFT using a shared analysis/synthesis window.

Definition at line 11401 of file fft.H.

◆ batched_istft() [3/3]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::batched_istft ( const Array< Array< Array< Complex > > > &  spectrograms,
const size_t  frame_size,
const ISTFTOptions options,
const Array< size_t > &  signal_lengths = {} 
)
inlinestatic

Hann-window batched ISTFT.

Definition at line 11433 of file fft.H.

◆ batched_lfilter() [1/2]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::batched_lfilter ( const Array< Array< Real > > &  signals,
const Array< Real > &  numerator,
const Array< Real > &  denominator,
const Array< Array< Real > > &  initial_states = {} 
)
inlinestatic

One-shot batched causal IIR filtering across real channels.

Definition at line 11992 of file fft.H.

◆ batched_lfilter() [2/2]

template<std::floating_point Real = double>
and Is_Real_Container< NumContainer > and static Is_Real_Container< DenContainer > Array< Array< Real > > Aleph::FFT< Real >::batched_lfilter ( const SignalsContainer signals,
const NumContainer numerator,
const DenContainer denominator,
const Array< Array< Real > > &  initial_states = {} 
)
inlinestatic

Definition at line 12058 of file fft.H.

◆ batched_plan_simd_backend()

template<std::floating_point Real = double>
static SimdBackend Aleph::FFT< Real >::batched_plan_simd_backend ( )
inlinestaticnoexcept

◆ batched_plan_simd_backend_name()

template<std::floating_point Real = double>
static const char * Aleph::FFT< Real >::batched_plan_simd_backend_name ( )
inlinestaticnoexcept

Returns the active batch-plan SIMD backend name.

Definition at line 6243 of file fft.H.

References Aleph::FFT< Real >::batched_plan_simd_backend(), and Aleph::FFT< Real >::simd_backend_name().

◆ batched_sosfilt() [1/2]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::batched_sosfilt ( const Array< Array< Real > > &  signals,
const Array< BiquadSection > &  sections 
)
inlinestatic

One-shot batched causal SOS filtering across real channels.

Definition at line 12092 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::FFT< Real >::sosfilt().

Referenced by Aleph::FFT< Real >::batched_sosfilt().

◆ batched_sosfilt() [2/2]

◆ batched_stft() [1/2]

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::batched_stft ( const Array< Array< Real > > &  signals,
const Array< Real > &  window,
const STFTOptions options 
)
inlinestatic

Batched STFT over a collection of real signals.

Definition at line 11247 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), options, output, and Aleph::FFT< Real >::stft_impl().

Referenced by Aleph::FFT< Real >::batched_stft().

◆ batched_stft() [2/2]

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::batched_stft ( const Array< Array< Real > > &  signals,
const size_t  frame_size,
const STFTOptions options 
)
inlinestatic

◆ bessel_bandpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::bessel_bandpass ( const size_t  order,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ bessel_bandstop()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::bessel_bandstop ( const size_t  order,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ bessel_highpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::bessel_highpass ( const size_t  order,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital Bessel high-pass design returned as SOS.

Definition at line 13418 of file fft.H.

References Aleph::FFT< Real >::bessel_prototype(), Aleph::FFT< Real >::design_low_high_sections(), and Aleph::divide_and_conquer_partition_dp().

◆ bessel_lowpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::bessel_lowpass ( const size_t  order,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital Bessel low-pass design returned as SOS.

The analog prototype is normalized so that the digital cutoff matches the -3 dB point after bilinear mapping.

Definition at line 13404 of file fft.H.

References Aleph::FFT< Real >::bessel_prototype(), Aleph::FFT< Real >::design_low_high_sections(), and Aleph::divide_and_conquer_partition_dp().

◆ bessel_prototype()

◆ bilinear_substitute_polynomial()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::bilinear_substitute_polynomial ( const Array< Real > &  analog,
const size_t  order,
const Real  sample_rate,
const char ctx 
)
inlinestaticprivate

◆ bilinear_transform() [1/2]

template<std::floating_point Real = double>
static IIRCoefficients Aleph::FFT< Real >::bilinear_transform ( const Array< Real > &  analog_numerator,
const Array< Real > &  analog_denominator,
const Real  sample_rate 
)
inlinestatic

Bilinear transform of an analog transfer function.

Definition at line 13152 of file fft.H.

References Aleph::FFT< Real >::bilinear_transform_impl(), and Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::bilinear_transform().

◆ bilinear_transform() [2/2]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > IIRCoefficients Aleph::FFT< Real >::bilinear_transform ( const NumContainer analog_numerator,
const DenContainer analog_denominator,
const Real  sample_rate 
)
inlinestatic

◆ bilinear_transform_impl()

template<std::floating_point Real = double>
static IIRCoefficients Aleph::FFT< Real >::bilinear_transform_impl ( const Array< Real > &  analog_numerator,
const Array< Real > &  analog_denominator,
const Real  sample_rate,
const char ctx 
)
inlinestaticprivate

◆ bit_reverse()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::bit_reverse ( Array< Complex > &  a)
inlinestaticprivatenoexcept

Performs bit-reversal permutation in-place.

This is a required preprocessing step for the iterative Cooley-Tukey FFT. It rearranges the elements of the array such that the element at index 'i' is moved to the index formed by reversing the bits of 'i'.

Parameters
aThe array to be permuted.

Definition at line 5800 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::transform_impl().

◆ blackman_window()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::blackman_window ( const size_t  n)
inlinestatic

◆ build_complex_input()

◆ build_padded_frame_from_prefix()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::build_padded_frame_from_prefix ( const Array< Real > &  input,
const size_t  frame_size 
)
inlinestaticprivate

◆ build_real_input()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::build_real_input ( const Container input)
inlinestaticprivate

Definition at line 5051 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::apply_blackman_window(), Aleph::FFT< Real >::apply_hamming_window(), Aleph::FFT< Real >::apply_hann_window(), Aleph::FFT< Real >::apply_window(), Aleph::FFT< Real >::batched_sosfilt(), Aleph::FFT< Real >::bilinear_transform(), Aleph::FFT< Real >::OverlapSave::convolve(), Aleph::FFT< Real >::PartitionedConvolver::convolve(), Aleph::FFT< Real >::OverlapAdd::convolve(), Aleph::FFT< Real >::LFilter::filter(), Aleph::FFT< Real >::SOSFilter::filter(), Aleph::FFT< Real >::filtfilt(), Aleph::FFT< Real >::filtfilt(), Aleph::FFT< Real >::filtfilt(), Aleph::FFT< Real >::filtfilt(), Aleph::FFT< Real >::filtfilt(), Aleph::FFT< Real >::firls(), Aleph::FFT< Real >::firls(), Aleph::FFT< Real >::frame_signal(), Aleph::FFT< Real >::freqz(), Aleph::FFT< Real >::gain_margin(), Aleph::FFT< Real >::group_delay(), Aleph::FFT< Real >::group_delay(), Aleph::FFT< Real >::has_near_pole_zero_cancellation(), Aleph::FFT< Real >::is_stable(), Aleph::FFT< Real >::minimum_pole_zero_distance(), Aleph::FFT< Real >::multiply(), Aleph::FFT< Real >::overlap_add_convolution(), Aleph::FFT< Real >::overlap_save_convolution(), Aleph::FFT< Real >::pair_poles_and_zeros(), Aleph::FFT< Real >::partitioned_convolution(), Aleph::FFT< Real >::OverlapAdd::pconvolve(), Aleph::FFT< Real >::pfiltfilt(), Aleph::FFT< Real >::phase_delay(), Aleph::FFT< Real >::phase_delay(), Aleph::FFT< Real >::phase_margin(), Aleph::FFT< Real >::pmultiply(), Aleph::FFT< Real >::poles(), Aleph::FFT< Real >::poverlap_add_convolution(), Aleph::FFT< Real >::STFTProcessor::pprocess_block(), Aleph::FFT< Real >::OverlapAdd::pprocess_block(), Aleph::FFT< Real >::prfft(), Aleph::FFT< Real >::STFTProcessor::process_block(), Aleph::FFT< Real >::OverlapAdd::process_block(), Aleph::FFT< Real >::OverlapSave::process_block(), Aleph::FFT< Real >::PartitionedConvolver::process_block(), Aleph::FFT< Real >::pstft(), Aleph::FFT< Real >::pstft(), Aleph::FFT< Real >::ptransform(), Aleph::FFT< Real >::ptransform_padded(), Aleph::FFT< Real >::remez(), Aleph::FFT< Real >::remez(), Aleph::FFT< Real >::resample_poly(), Aleph::FFT< Real >::rfft(), Aleph::FFT< Real >::sosfilt(), Aleph::FFT< Real >::stability_margin(), Aleph::FFT< Real >::stft(), Aleph::FFT< Real >::stft(), Aleph::FFT< Real >::stft(), Aleph::FFT< Real >::stft(), Aleph::FFT< Real >::transform(), Aleph::FFT< Real >::transform_padded(), Aleph::FFT< Real >::upfirdn(), Aleph::FFT< Real >::validate_no_near_pole_zero_cancellation(), Aleph::FFT< Real >::validate_stable(), Aleph::FFT< Real >::validate_stable(), Aleph::FFT< Real >::window_coherent_gain(), Aleph::FFT< Real >::window_enbw(), Aleph::FFT< Real >::window_energy(), Aleph::FFT< Real >::windowed_spectrum(), and Aleph::FFT< Real >::zeros().

◆ build_weighted_frequency_grid()

template<std::floating_point Real = double>
static WeightedFrequencyGrid Aleph::FFT< Real >::build_weighted_frequency_grid ( const size_t  num_taps,
const Array< Real > &  bands,
const Array< Real > &  desired,
const Real  sample_rate,
const Array< Real > &  weights,
const size_t  grid_density,
const char ctx 
)
inlinestaticprivate

◆ butterworth_bandpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::butterworth_bandpass ( const size_t  order,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ butterworth_bandstop()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::butterworth_bandstop ( const size_t  order,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ butterworth_highpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::butterworth_highpass ( const size_t  order,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital Butterworth high-pass design returned as SOS.

Definition at line 13191 of file fft.H.

References Aleph::FFT< Real >::butterworth_prototype(), Aleph::FFT< Real >::design_prototype_sections(), and Aleph::divide_and_conquer_partition_dp().

◆ butterworth_lowpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::butterworth_lowpass ( const size_t  order,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital Butterworth low-pass design returned as SOS.

Definition at line 13176 of file fft.H.

References Aleph::FFT< Real >::butterworth_prototype(), Aleph::FFT< Real >::design_prototype_sections(), and Aleph::divide_and_conquer_partition_dp().

◆ butterworth_prototype()

◆ carlson_rf_impl()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::carlson_rf_impl ( Real  x,
Real  y,
Real  z 
)
inlinestaticprivate

Definition at line 2983 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and y.

Referenced by Aleph::FFT< Real >::ellint_1_impl().

◆ chebyshev1_bandpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::chebyshev1_bandpass ( const size_t  order,
const Real  ripple_db,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ chebyshev1_bandstop()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::chebyshev1_bandstop ( const size_t  order,
const Real  ripple_db,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ chebyshev1_highpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::chebyshev1_highpass ( const size_t  order,
const Real  ripple_db,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital Chebyshev-I high-pass design returned as SOS.

Definition at line 13260 of file fft.H.

References Aleph::FFT< Real >::chebyshev1_prototype(), Aleph::FFT< Real >::design_prototype_sections(), and Aleph::divide_and_conquer_partition_dp().

◆ chebyshev1_lowpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::chebyshev1_lowpass ( const size_t  order,
const Real  ripple_db,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital Chebyshev-I low-pass design returned as SOS.

Definition at line 13243 of file fft.H.

References Aleph::FFT< Real >::chebyshev1_prototype(), Aleph::FFT< Real >::design_prototype_sections(), and Aleph::divide_and_conquer_partition_dp().

◆ chebyshev1_prototype()

◆ chebyshev2_bandpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::chebyshev2_bandpass ( const size_t  order,
const Real  attenuation_db,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ chebyshev2_bandstop()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::chebyshev2_bandstop ( const size_t  order,
const Real  attenuation_db,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ chebyshev2_highpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::chebyshev2_highpass ( const size_t  order,
const Real  attenuation_db,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital Chebyshev-II high-pass design returned as SOS.

Definition at line 13336 of file fft.H.

References Aleph::FFT< Real >::chebyshev2_prototype(), Aleph::FFT< Real >::design_low_high_sections(), and Aleph::divide_and_conquer_partition_dp().

◆ chebyshev2_lowpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::chebyshev2_lowpass ( const size_t  order,
const Real  attenuation_db,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital Chebyshev-II low-pass design returned as SOS.

Definition at line 13320 of file fft.H.

References Aleph::FFT< Real >::chebyshev2_prototype(), Aleph::FFT< Real >::design_low_high_sections(), and Aleph::divide_and_conquer_partition_dp().

◆ chebyshev2_prototype()

◆ choose_remez_extrema()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::choose_remez_extrema ( const Array< Real > &  weighted_error,
const size_t  required_count,
const char ctx 
)
inlinestaticprivate

◆ coherence() [1/3]

template<std::floating_point Real = double>
static CoherenceEstimate Aleph::FFT< Real >::coherence ( const Array< Real > &  x,
const Array< Real > &  y,
const Array< Real > &  window,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

Magnitude-squared coherence estimate using Welch averages.

Definition at line 9733 of file fft.H.

◆ coherence() [2/3]

template<std::floating_point Real = double>
static CoherenceEstimate Aleph::FFT< Real >::coherence ( const Array< Real > &  x,
const Array< Real > &  y,
const size_t  frame_size,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

Magnitude-squared coherence estimate using a Hann window.

Definition at line 9762 of file fft.H.

◆ coherence() [3/3]

template<std::floating_point Real = double>
and Is_Real_Container< ContainerY > and static Is_Real_Container< WindowContainer > CoherenceEstimate Aleph::FFT< Real >::coherence ( const ContainerX x,
const ContainerY y,
const WindowContainer window,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

Definition at line 9808 of file fft.H.

◆ comp_ellint_1_impl()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::comp_ellint_1_impl ( const Real  k)
inlinestaticprivate

◆ compact_real_batch_spectra()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::compact_real_batch_spectra ( const Array< Array< Complex > > &  full_spectra)
inlinestaticprivate

◆ compact_real_spectrum()

◆ complete_elliptic_first_kind()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::complete_elliptic_first_kind ( const Real  modulus,
const char ctx 
)
inlinestaticprivate

Rationale: Complete elliptic integral K(k) using the modulus convention required by elliptic filter design.

Definition at line 3045 of file fft.H.

References ah_invalid_argument_if, Aleph::FFT< Real >::comp_ellint_1_impl(), and Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::elliptic_prototype(), Aleph::FFT< Real >::jacobi_sn_cn_dn(), and Aleph::FFT< Real >::solve_elliptic_selectivity_modulus().

◆ cosine_sum_window()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::cosine_sum_window ( const size_t  n,
const Real  a0,
const Real  a1 = Real(0),
const Real  a2 = Real(0) 
)
inlinestaticprivate

Internal generator for generalized cosine windows (Hann, Hamming, Blackman).

Definition at line 472 of file fft.H.

References Aleph::Array< T >::append(), Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::reserve().

Referenced by Aleph::FFT< Real >::blackman_window(), Aleph::FFT< Real >::hamming_window(), and Aleph::FFT< Real >::hann_window().

◆ count_non_empty_real_batch()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::count_non_empty_real_batch ( const Array< Array< Real > > &  batch)
inlinestaticprivatenoexcept

◆ csd() [1/3]

template<std::floating_point Real = double>
static CrossSpectralDensity Aleph::FFT< Real >::csd ( const Array< Real > &  x,
const Array< Real > &  y,
const Array< Real > &  window,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

One-sided cross-spectral density estimate using a custom window.

Definition at line 9672 of file fft.H.

◆ csd() [2/3]

template<std::floating_point Real = double>
static CrossSpectralDensity Aleph::FFT< Real >::csd ( const Array< Real > &  x,
const Array< Real > &  y,
const size_t  frame_size,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

One-sided cross-spectral density estimate using a Hann window.

Definition at line 9722 of file fft.H.

◆ csd() [3/3]

template<std::floating_point Real = double>
and Is_Real_Container< ContainerY > and static Is_Real_Container< WindowContainer > CrossSpectralDensity Aleph::FFT< Real >::csd ( const ContainerX x,
const ContainerY y,
const WindowContainer window,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

Definition at line 9790 of file fft.H.

◆ default_filtfilt_pad_length()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::default_filtfilt_pad_length ( const size_t  signal_size,
const size_t  coeff_size 
)
inlinestaticprivatenoexcept

Rationale: Rule-of-thumb for filtfilt padding to allow transients to decay.

Definition at line 546 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::filtfilt(), Aleph::FFT< Real >::iir_filtfilt_impl(), Aleph::FFT< Real >::pfiltfilt(), and Aleph::FFT< Real >::sos_filtfilt_impl().

◆ demean_copy()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::demean_copy ( const Array< Real > &  input)
inlinestaticprivate

◆ design_bandstop_sections_without_numerator_roots()

◆ design_low_high_sections()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::design_low_high_sections ( const AnalogPrototype prototype,
const Real  cutoff_frequency,
const Real  sample_rate,
const bool  highpass,
const char ctx 
)
inlinestaticprivate

◆ design_prototype_sections()

◆ design_transformed_sections()

◆ detected_simd_backend()

template<std::floating_point Real = double>
static SimdBackend Aleph::FFT< Real >::detected_simd_backend ( )
inlinestaticnoexcept

◆ detected_simd_backend_name()

template<std::floating_point Real = double>
static const char * Aleph::FFT< Real >::detected_simd_backend_name ( )
inlinestaticnoexcept

Returns the detected hardware SIMD backend name.

Definition at line 6149 of file fft.H.

References Aleph::FFT< Real >::detected_simd_backend(), and Aleph::FFT< Real >::simd_backend_name().

◆ divide_polynomial_by_linear_root()

template<std::floating_point Real = double>
static std::pair< Array< Real >, Real > Aleph::FFT< Real >::divide_polynomial_by_linear_root ( const Array< Real > &  coefficients,
const Real  root,
const char ctx 
)
inlinestaticprivate

◆ drop_prefix()

template<std::floating_point Real = double>
template<typename T >
static void Aleph::FFT< Real >::drop_prefix ( Array< T > &  input,
const size_t  count 
)
inlinestaticprivate

◆ effective_coeff_length()

◆ ellint_1_impl()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::ellint_1_impl ( const Real  k,
const Real  phi 
)
inlinestaticprivate

◆ elliptic_bandpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::elliptic_bandpass ( const size_t  order,
const Real  ripple_db,
const Real  attenuation_db,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ elliptic_bandstop()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::elliptic_bandstop ( const size_t  order,
const Real  ripple_db,
const Real  attenuation_db,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

◆ elliptic_cd_minus_imaginary()

template<std::floating_point Real = double>
static Complex Aleph::FFT< Real >::elliptic_cd_minus_imaginary ( const Real  u,
const Real  v,
const Real  modulus,
const char ctx 
)
inlinestaticprivate

◆ elliptic_highpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::elliptic_highpass ( const size_t  order,
const Real  ripple_db,
const Real  attenuation_db,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital elliptic/Cauer high-pass design returned as SOS.

Definition at line 13487 of file fft.H.

References Aleph::FFT< Real >::design_low_high_sections(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::elliptic_prototype().

◆ elliptic_lowpass()

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::elliptic_lowpass ( const size_t  order,
const Real  ripple_db,
const Real  attenuation_db,
const Real  cutoff_frequency,
const Real  sample_rate 
)
inlinestatic

Digital elliptic/Cauer low-pass design returned as SOS.

Definition at line 13469 of file fft.H.

References Aleph::FFT< Real >::design_low_high_sections(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::elliptic_prototype().

◆ elliptic_prototype()

◆ enforce_conjugate_symmetry()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::enforce_conjugate_symmetry ( const Array< Complex > &  roots)
inlinestaticprivate

Enforce conjugate symmetry on roots of a real-coefficient polynomial.

For every complex root the nearest conjugate candidate is found and both are replaced by the exact conjugate pair built from the average of their real parts and imaginary magnitudes.

Definition at line 2702 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::error(), Aleph::FFT< Real >::max_root_radius(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::root_groups_impl().

◆ enforce_real_polynomial_symmetry()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::enforce_real_polynomial_symmetry ( Array< Complex > &  roots,
const Real  tol 
)
inlinestaticprivatenoexcept

◆ evaluate_analog_transfer_magnitude()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::evaluate_analog_transfer_magnitude ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const Real  omega,
const char ctx 
)
inlinestaticprivate

◆ evaluate_cosine_series()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::evaluate_cosine_series ( const Array< Real > &  coefficients,
const Real  omega 
)
inlinestaticprivatenoexcept

Definition at line 4160 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and k.

Referenced by Aleph::FFT< Real >::remez_impl().

◆ evaluate_fir_response_magnitude()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::evaluate_fir_response_magnitude ( const Array< Real > &  coeffs,
const Real  omega,
const char ctx 
)
inlinestaticprivate

implementation helper for FIR frequency response magnitude.

Definition at line 3816 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::evaluate_transfer_at().

Referenced by Aleph::FFT< Real >::normalize_fir_at_omega().

◆ evaluate_polynomial_and_derivative()

◆ evaluate_series_at_unit_circle()

◆ evaluate_sos_transfer_at()

template<std::floating_point Real = double>
static Complex Aleph::FFT< Real >::evaluate_sos_transfer_at ( const Array< BiquadSection > &  sections,
const Real  omega,
const char ctx 
)
inlinestaticprivate

◆ evaluate_transfer_at()

◆ evaluate_transfer_terms_at()

◆ evenly_spaced_extrema()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::evenly_spaced_extrema ( const size_t  grid_size,
const size_t  extremal_count 
)
inlinestaticprivate

◆ expand_real_batch_spectra()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::expand_real_batch_spectra ( const Array< Array< Complex > > &  spectra,
const size_t  signal_size,
const char ctx 
)
inlinestaticprivate

◆ expand_real_spectrum()

◆ extract_repeated_unit_roots()

◆ factor_small_radices()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::factor_small_radices ( size_t  n)
inlinestaticprivate

Rationale: Factors a number into small primes (2, 3, 4, 5) to determine if a composite FFT kernel is applicable.

Definition at line 5962 of file fft.H.

References Aleph::Array< T >::append(), and Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::Plan::Plan().

◆ filtfilt() [1/10]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::filtfilt ( const Array< Real > &  signal,
const Array< BiquadSection > &  sections 
)
inlinestatic

Zero-phase filtering of a cascade of biquad sections.

Definition at line 13686 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::sos_filtfilt_impl().

◆ filtfilt() [2/10]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::filtfilt ( const Array< Real > &  signal,
const Array< Real > &  coeffs,
const size_t  block_size = 0 
)
inlinestatic

◆ filtfilt() [3/10]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::filtfilt ( const Array< Real > &  signal,
const Array< Real > &  numerator,
const Array< Real > &  denominator 
)
inlinestatic

Zero-phase IIR filtering using transfer-function coefficients.

The denominator is interpreted in the standard DSP form a[0] y[n] + a[1] y[n-1] + ... = b[0] x[n] + .... Coefficients are normalized by a[0] internally and the recursion uses transposed direct-form II with steady-state endpoint initialization.

Definition at line 13658 of file fft.H.

References Aleph::FFT< Real >::iir_filtfilt_impl().

◆ filtfilt() [4/10]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::filtfilt ( const Array< Real > &  signal,
const BiquadSection section 
)
inlinestatic

Zero-phase filtering of one biquad section.

Definition at line 13678 of file fft.H.

References Aleph::FFT< Real >::filtfilt(), and section().

◆ filtfilt() [5/10]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::filtfilt ( const Array< Real > &  signal,
const IIRCoefficients coeffs 
)
inlinestatic

Zero-phase IIR filtering with explicit coefficient groups.

Definition at line 13670 of file fft.H.

References Aleph::FFT< Real >::IIRCoefficients::denominator, Aleph::FFT< Real >::filtfilt(), and Aleph::FFT< Real >::IIRCoefficients::numerator.

◆ filtfilt() [6/10]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::filtfilt ( const SignalContainer signal,
const BiquadSection section 
)
inlinestatic

◆ filtfilt() [7/10]

template<std::floating_point Real = double>
and static Is_Real_Container< CoeffContainer > Array< Real > Aleph::FFT< Real >::filtfilt ( const SignalContainer signal,
const CoeffContainer coeffs,
const size_t  block_size = 0 
)
inlinestatic

◆ filtfilt() [8/10]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::filtfilt ( const SignalContainer signal,
const IIRCoefficients coeffs 
)
inlinestatic

◆ filtfilt() [9/10]

template<std::floating_point Real = double>
and Is_Real_Container< NumContainer > and static Is_Real_Container< DenContainer > Array< Real > Aleph::FFT< Real >::filtfilt ( const SignalContainer signal,
const NumContainer numerator,
const DenContainer denominator 
)
inlinestatic

◆ filtfilt() [10/10]

◆ firls() [1/3]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firls ( const size_t  num_taps,
const Array< Real > &  bands,
const Array< Real > &  desired,
const Real  sample_rate,
const Array< Real > &  weights = {} 
)
inlinestatic

FIR design by weighted least squares over piecewise-linear bands.

Definition at line 9170 of file fft.H.

Referenced by Aleph::FFT< Real >::firls(), and Aleph::FFT< Real >::firls().

◆ firls() [2/3]

template<std::floating_point Real = double>
and static Is_Real_Container< DesiredContainer > Array< Real > Aleph::FFT< Real >::firls ( const size_t  num_taps,
const BandContainer bands,
const DesiredContainer desired,
const Real  sample_rate 
)
inlinestatic

◆ firls() [3/3]

template<std::floating_point Real = double>
and Is_Real_Container< DesiredContainer > and static Is_Real_Container< WeightContainer > Array< Real > Aleph::FFT< Real >::firls ( const size_t  num_taps,
const BandContainer bands,
const DesiredContainer desired,
const Real  sample_rate,
const WeightContainer weights 
)
inlinestatic

◆ firls_impl()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firls_impl ( const size_t  num_taps,
const Array< Real > &  bands,
const Array< Real > &  desired,
const Real  sample_rate,
const Array< Real > &  weights,
const char ctx 
)
inlinestaticprivate

◆ firwin_bandpass() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_bandpass ( const size_t  num_taps,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate,
const Array< Real > &  window 
)
inlinestatic

◆ firwin_bandpass() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_bandpass ( const size_t  num_taps,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate,
const Real  attenuation_db 
)
inlinestatic

◆ firwin_bandstop() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_bandstop ( const size_t  num_taps,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate,
const Array< Real > &  window 
)
inlinestatic

◆ firwin_bandstop() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_bandstop ( const size_t  num_taps,
const Real  low_cutoff_frequency,
const Real  high_cutoff_frequency,
const Real  sample_rate,
const Real  attenuation_db 
)
inlinestatic

◆ firwin_highpass() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_highpass ( const size_t  num_taps,
const Real  cutoff_frequency,
const Real  sample_rate,
const Array< Real > &  window 
)
inlinestatic

FIR high-pass design via spectral inversion of a low-pass design.

Definition at line 9040 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::firwin_lowpass_impl(), Aleph::FFT< Real >::normalize_fir_at_omega(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::firwin_highpass().

◆ firwin_highpass() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_highpass ( const size_t  num_taps,
const Real  cutoff_frequency,
const Real  sample_rate,
const Real  attenuation_db 
)
inlinestatic

◆ firwin_lowpass() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_lowpass ( const size_t  num_taps,
const Real  cutoff_frequency,
const Real  sample_rate,
const Array< Real > &  window 
)
inlinestatic

FIR low-pass design via the window method.

Definition at line 9013 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::firwin_lowpass_impl().

Referenced by Aleph::FFT< Real >::firwin_lowpass().

◆ firwin_lowpass() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_lowpass ( const size_t  num_taps,
const Real  cutoff_frequency,
const Real  sample_rate,
const Real  attenuation_db 
)
inlinestatic

FIR low-pass design via the window method using a Kaiser window.

Definition at line 9027 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::firwin_lowpass(), Aleph::FFT< Real >::kaiser_beta(), and Aleph::FFT< Real >::kaiser_window().

◆ firwin_lowpass_impl()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::firwin_lowpass_impl ( const size_t  num_taps,
const Real  cutoff_frequency,
const Real  sample_rate,
const Array< Real > &  window,
const char ctx 
)
inlinestaticprivate

◆ flatten_matrix_row_major()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::flatten_matrix_row_major ( const Array< Array< Complex > > &  input,
const char ctx 
)
inlinestaticprivate

Rationale: Flattens a 2D matrix into a 1D row-major array.

Definition at line 5355 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::matrix_shape(), and Aleph::Array< T >::reserve().

Referenced by Aleph::FFT< Real >::ptransformed2d(), and Aleph::FFT< Real >::transformed2d().

◆ flatten_tensor3_row_major()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::flatten_tensor3_row_major ( const Array< Array< Array< Complex > > > &  input,
const char ctx 
)
inlinestaticprivate

◆ frame_offsets()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::frame_offsets ( const size_t  signal_size,
const size_t  frame_size,
const size_t  hop_size,
const bool  pad_end = true 
)
inlinestatic

Returns the frame start offsets used by frame_signal.

Definition at line 9566 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::frame_offsets_impl().

◆ frame_offsets_impl()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::frame_offsets_impl ( const size_t  signal_size,
const size_t  frame_size,
const size_t  hop_size,
const bool  pad_end,
const char ctx 
)
inlinestaticprivate

◆ frame_signal() [1/2]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::frame_signal ( const Array< Real > &  signal,
const size_t  frame_size,
const size_t  hop_size,
const bool  pad_end = true 
)
inlinestatic

Splits a real signal into frames using a fixed hop size.

If pad_end is true, the last frame is zero-padded to frame_size. Otherwise, only complete frames are returned.

Definition at line 9875 of file fft.H.

References Aleph::Array< T >::append(), Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::frame_offsets_impl(), Aleph::Array< T >::is_empty(), offset, and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::frame_signal(), Aleph::FFT< Real >::prepare_welch_frames(), and Aleph::FFT< Real >::stft_impl().

◆ frame_signal() [2/2]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::frame_signal ( const Container signal,
const size_t  frame_size,
const size_t  hop_size,
const bool  pad_end = true 
)
inlinestatic

◆ freqz() [1/7]

template<std::floating_point Real = double>
static FrequencyResponse Aleph::FFT< Real >::freqz ( const Array< BiquadSection > &  sections,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ freqz() [2/7]

◆ freqz() [3/7]

template<std::floating_point Real = double>
static FrequencyResponse Aleph::FFT< Real >::freqz ( const Array< Real > &  numerator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

FIR frequency response.

Definition at line 12150 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::freqz().

◆ freqz() [4/7]

template<std::floating_point Real = double>
static FrequencyResponse Aleph::FFT< Real >::freqz ( const BiquadSection section,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ freqz() [5/7]

template<std::floating_point Real = double>
static FrequencyResponse Aleph::FFT< Real >::freqz ( const IIRCoefficients coeffs,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ freqz() [6/7]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > FrequencyResponse Aleph::FFT< Real >::freqz ( const NumContainer numerator,
const DenContainer denominator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ freqz() [7/7]

template<std::floating_point Real = double>
static FrequencyResponse Aleph::FFT< Real >::freqz ( const SectionsContainer sections,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ freqz_impl()

◆ gain_margin() [1/7]

template<std::floating_point Real = double>
static GainMarginInfo Aleph::FFT< Real >::gain_margin ( const Array< BiquadSection > &  sections,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ gain_margin() [2/7]

template<std::floating_point Real = double>
static GainMarginInfo Aleph::FFT< Real >::gain_margin ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ gain_margin() [3/7]

template<std::floating_point Real = double>
static GainMarginInfo Aleph::FFT< Real >::gain_margin ( const BiquadSection section,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ gain_margin() [4/7]

template<std::floating_point Real = double>
static GainMarginInfo Aleph::FFT< Real >::gain_margin ( const FrequencyResponse response)
inlinestatic

Estimates gain margin around the -pi phase crossover.

Definition at line 12985 of file fft.H.

References Aleph::FFT< Real >::gain_margin_impl().

Referenced by Aleph::FFT< Real >::gain_margin(), Aleph::FFT< Real >::gain_margin(), Aleph::FFT< Real >::gain_margin(), and Aleph::FFT< Real >::gain_margin().

◆ gain_margin() [5/7]

template<std::floating_point Real = double>
static GainMarginInfo Aleph::FFT< Real >::gain_margin ( const IIRCoefficients coeffs,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ gain_margin() [6/7]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > GainMarginInfo Aleph::FFT< Real >::gain_margin ( const NumContainer numerator,
const DenContainer denominator,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ gain_margin() [7/7]

template<std::floating_point Real = double>
static GainMarginInfo Aleph::FFT< Real >::gain_margin ( const SectionsContainer sections,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ gain_margin_impl()

◆ gain_margin_refined_impl()

◆ gather_axis_slice()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::gather_axis_slice ( const Array< Complex > &  data,
const size_t  base_offset,
const size_t  axis_length,
const size_t  axis_stride 
)
inlinestaticprivate

Rationale: Extracts a non-contiguous slice of data along a tensor axis into a contiguous array for FFT processing.

Definition at line 5230 of file fft.H.

References Aleph::Array< T >::create(), and Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::transform_axis_impl().

◆ group_center()

template<std::floating_point Real = double>
static Complex Aleph::FFT< Real >::group_center ( const Array< Complex > &  roots)
inlinestaticprivatenoexcept

◆ group_delay() [1/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::group_delay ( const Array< BiquadSection > &  sections,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ group_delay() [2/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::group_delay ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ group_delay() [3/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::group_delay ( const Array< Real > &  numerator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ group_delay() [4/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::group_delay ( const BiquadSection section,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ group_delay() [5/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::group_delay ( const Container numerator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ group_delay() [6/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::group_delay ( const FrequencyResponse response)
inlinestatic

◆ group_delay() [7/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::group_delay ( const IIRCoefficients coeffs,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ group_delay() [8/9]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > Array< Real > Aleph::FFT< Real >::group_delay ( const NumContainer numerator,
const DenContainer denominator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ group_delay() [9/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::group_delay ( const SectionsContainer sections,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ group_delay_impl()

◆ hamming_window()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::hamming_window ( const size_t  n)
inlinestatic

◆ hann_window()

◆ has_near_pole_zero_cancellation() [1/7]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::has_near_pole_zero_cancellation ( const Array< BiquadSection > &  sections,
const Real  tolerance 
)
inlinestatic

◆ has_near_pole_zero_cancellation() [2/7]

◆ has_near_pole_zero_cancellation() [3/7]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::has_near_pole_zero_cancellation ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const Real  tolerance 
)
inlinestatic

◆ has_near_pole_zero_cancellation() [4/7]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::has_near_pole_zero_cancellation ( const BiquadSection section,
const Real  tolerance 
)
inlinestatic

Definition at line 12557 of file fft.H.

References Aleph::FFT< Real >::has_near_pole_zero_cancellation(), and section().

◆ has_near_pole_zero_cancellation() [5/7]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::has_near_pole_zero_cancellation ( const IIRCoefficients coeffs,
const Real  tolerance 
)
inlinestatic

◆ has_near_pole_zero_cancellation() [6/7]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > bool Aleph::FFT< Real >::has_near_pole_zero_cancellation ( const NumContainer numerator,
const DenContainer denominator,
const Real  tolerance 
)
inlinestatic

◆ has_near_pole_zero_cancellation() [7/7]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::has_near_pole_zero_cancellation ( const SectionsContainer sections,
const Real  tolerance 
)
inlinestatic

◆ hermitian_tolerance()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::hermitian_tolerance ( const Complex lhs,
const Complex rhs,
const size_t  n 
)
inlinestaticprivatenoexcept

Rationale: Numerical tolerance for Hermitian symmetry checks.

Determines if X[k] and X[N-k]* are "close enough".

Definition at line 425 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_stages().

Referenced by Aleph::FFT< Real >::validate_real_spectrum().

◆ iir_filter_impl()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::iir_filter_impl ( const Array< Real > &  signal,
const Array< Real > &  numerator,
const Array< Real > &  denominator,
const Array< Real > &  initial_state,
const char ctx,
Array< Real > *  final_state = nullptr 
)
inlinestaticprivate

◆ iir_filtfilt_impl()

◆ iir_steady_state()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::iir_steady_state ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const char ctx 
)
inlinestaticprivate

◆ initialize_root_guesses()

◆ integer_power()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::integer_power ( const Real  base,
const size_t  exponent 
)
inlinestaticprivatenoexcept

◆ integrate_cos_basis()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::integrate_cos_basis ( const Real  omega_lo,
const Real  omega_hi,
const size_t  harmonic 
)
inlinestaticprivatenoexcept

Rationale: Evaluates integral of cos(k*w) from omega_lo to omega_hi.

Definition at line 3880 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and k.

Referenced by Aleph::FFT< Real >::integrate_cos_product(), and Aleph::FFT< Real >::integrate_linear_cos_basis().

◆ integrate_cos_product()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::integrate_cos_product ( const Real  omega_lo,
const Real  omega_hi,
const size_t  lhs_harmonic,
const size_t  rhs_harmonic 
)
inlinestaticprivatenoexcept

Rationale: Evaluates integral of cos(m*w)*cos(n*w).

Definition at line 3893 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::integrate_cos_basis().

Referenced by Aleph::FFT< Real >::firls_impl().

◆ integrate_linear_cos_basis()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::integrate_linear_cos_basis ( const Real  omega_lo,
const Real  omega_hi,
const Real  desired_lo,
const Real  desired_hi,
const size_t  harmonic 
)
inlinestaticprivatenoexcept

implementation helper for firls linear band integration.

Definition at line 3922 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::integrate_cos_basis(), and Aleph::FFT< Real >::integrate_offset_cos_basis().

Referenced by Aleph::FFT< Real >::firls_impl().

◆ integrate_offset_cos_basis()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::integrate_offset_cos_basis ( const Real  omega_lo,
const Real  omega_hi,
const size_t  harmonic 
)
inlinestaticprivatenoexcept

implementation helper for firls slope integration.

Definition at line 3907 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and k.

Referenced by Aleph::FFT< Real >::integrate_linear_cos_basis().

◆ interpolate_crossing()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::interpolate_crossing ( const Real  x0,
const Real  y0,
const Real  x1,
const Real  y1,
const Real  target 
)
inlinestaticprivatenoexcept

◆ interpolate_value_at()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::interpolate_value_at ( const Real  x0,
const Real  y0,
const Real  x1,
const Real  y1,
const Real  x 
)
inlinestaticprivatenoexcept

◆ inverse_jacobi_sc()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::inverse_jacobi_sc ( const Real  value,
const Real  modulus,
const char ctx 
)
inlinestaticprivate

◆ inverse_transform() [1/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::inverse_transform ( const Array< Complex > &  input)
inlinestatic

Computes the Inverse Fast Fourier Transform (IFFT).

Functional wrapper for the inverse transform. Generic iterable containers of std::complex values are accepted through a separate overload.

Parameters
inputThe frequency-domain complex values.
Returns
A new array of complex values in the time/spatial domain.
Exceptions
std::invalid_argumentif the input size is zero.

Definition at line 8654 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transformed().

◆ inverse_transform() [2/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::inverse_transform ( const Container input)
inlinestatic

Forward IFFT for complex-valued containers.

Definition at line 8671 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transformed().

◆ inverse_transform2d()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::inverse_transform2d ( const Array< Array< Complex > > &  input)
inlinestatic

Functional inverse 2-D FFT wrapper.

Definition at line 8117 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transformed2d().

◆ inverse_transform3d()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::inverse_transform3d ( const Array< Array< Array< Complex > > > &  input)
inlinestatic

Functional inverse 3-D FFT wrapper.

Definition at line 8212 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transformed3d().

◆ inverse_transform_batch()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::inverse_transform_batch ( const Array< Array< Complex > > &  input)
inlinestatic

Functional batch IFFT wrapper.

Definition at line 7936 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transformed_batch().

◆ inverse_transform_real() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::inverse_transform_real ( const Array< Complex > &  input)
inlinestatic

Computes the IFFT and projects the result back to real values.

Useful when the result is expected to be real (e.g., after processing the spectrum of a real signal). Generic iterable containers of std::complex values are accepted through a separate overload.

Parameters
inputThe frequency-domain complex values.
Returns
A new array of real values.
Exceptions
std::invalid_argumentif the input size is zero.
std::domain_errorif the result has non-negligible imaginary parts.

Definition at line 8698 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::inverse_transform_real_general_impl(), Aleph::FFT< Real >::inverse_transform_real_optimized_impl(), Aleph::FFT< Real >::is_power_of_two(), and Aleph::FFT< Real >::transform_impl().

Referenced by Aleph::FFT< Real >::inverse_transform_real(), and Aleph::FFT< Real >::irfft().

◆ inverse_transform_real() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::inverse_transform_real ( const Container input)
inlinestatic

Inverse real transform for complex-valued containers.

Definition at line 8765 of file fft.H.

References Aleph::FFT< Real >::build_complex_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::inverse_transform_real().

◆ inverse_transform_real_general_impl()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::inverse_transform_real_general_impl ( const Array< Complex > &  input,
const char ctx,
ThreadPool pool,
const size_t  chunk_size 
)
inlinestaticprivate

◆ inverse_transform_real_optimized_impl()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::inverse_transform_real_optimized_impl ( const Array< Complex > &  input,
const char ctx,
ThreadPool pool,
const size_t  chunk_size,
InversePackedTransform  inverse_packed 
)
inlinestaticprivate

◆ irfft() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::irfft ( const Array< Complex > &  spectrum,
const size_t  signal_size = 0 
)
inlinestatic

Reconstructs a real signal from a compact rfft() spectrum.

If signal_size is zero, the method infers the original length as 2 * (spectrum.size() - 1). Odd original lengths therefore require an explicit signal_size.

Definition at line 8740 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::expand_real_spectrum(), Aleph::FFT< Real >::inverse_transform_real(), and Aleph::FFT< Real >::spectrum().

Referenced by Aleph::FFT< Real >::irfft().

◆ irfft() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::irfft ( const Container spectrum,
const size_t  signal_size = 0 
)
inlinestatic

Inverse real transform (compact) for complex-valued containers.

Definition at line 8784 of file fft.H.

References Aleph::FFT< Real >::build_complex_input(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::irfft(), and Aleph::FFT< Real >::spectrum().

◆ irfft_batch()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::irfft_batch ( const Array< Array< Complex > > &  spectra,
const size_t  signal_size 
)
inlinestatic

Functional compact real inverse FFT for equal-length batches.

Definition at line 7976 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

◆ is_one_sided_interior_bin()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::is_one_sided_interior_bin ( const size_t  bin,
const size_t  fft_size 
)
inlinestaticprivatenoexcept

Identifies non-redundant spectrum bins (excluding DC and Nyquist).

Definition at line 790 of file fft.H.

References Aleph::and, and Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::apply_one_sided_density_scaling().

◆ is_power_of_two()

template<std::floating_point Real = double>
static constexpr bool Aleph::FFT< Real >::is_power_of_two ( const size_t  n)
inlinestaticconstexprnoexcept

◆ is_stable() [1/6]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::is_stable ( const Array< BiquadSection > &  sections)
inlinestatic

◆ is_stable() [2/6]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::is_stable ( const Array< Real > &  denominator)
inlinestatic

◆ is_stable() [3/6]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::is_stable ( const BiquadSection section)
inlinestatic

Definition at line 12494 of file fft.H.

References Aleph::FFT< Real >::is_stable(), and section().

◆ is_stable() [4/6]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::is_stable ( const Container denominator)
inlinestatic

◆ is_stable() [5/6]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::is_stable ( const IIRCoefficients coeffs)
inlinestatic

◆ is_stable() [6/6]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::is_stable ( const SectionsContainer sections)
inlinestatic

◆ istft() [1/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::istft ( const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const ISTFTOptions options 
)
inlinestatic

Reconstructs a real signal using explicit ISTFT options.

Definition at line 10164 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::istft_impl(), and options.

◆ istft() [2/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::istft ( const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const size_t  hop_size,
const size_t  signal_length = 0 
)
inlinestatic

Reconstructs a real signal from an STFT using overlap-add.

The STFT frames are assumed to come from a real signal transformed with the analysis window analysis_window. Each inverse frame is overlap- added after multiplying by synthesis_window and normalized by the accumulated window products.

Definition at line 10064 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::ISTFTOptions::hop_size, Aleph::FFT< Real >::istft_impl(), and options.

Referenced by Aleph::FFT< Real >::istft(), Aleph::FFT< Real >::istft(), Aleph::FFT< Real >::istft(), and Aleph::FFT< Real >::istft().

◆ istft() [3/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::istft ( const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  window,
const ISTFTOptions options 
)
inlinestatic

Reconstructs a real signal using one shared analysis/synthesis window.

Definition at line 10179 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::istft(), and options.

◆ istft() [4/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::istft ( const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  window,
const size_t  hop_size,
const size_t  signal_length = 0 
)
inlinestatic

Reconstructs a real signal using the same window for analysis and synthesis.

Definition at line 10085 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::istft().

◆ istft() [5/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::istft ( const Array< Array< Complex > > &  spectrogram,
const size_t  frame_size,
const ISTFTOptions options 
)
inlinestatic

Reconstructs a Hann-window STFT with explicit options.

Definition at line 10188 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::hann_window(), Aleph::FFT< Real >::istft(), and options.

◆ istft() [6/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::istft ( const Array< Array< Complex > > &  spectrogram,
const size_t  frame_size,
const size_t  hop_size,
const size_t  signal_length = 0 
)
inlinestatic

Reconstructs a real signal using a Hann window pair.

Definition at line 10095 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::hann_window(), and Aleph::FFT< Real >::istft().

◆ istft_impl()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::istft_impl ( const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const ISTFTOptions options,
ThreadPool pool,
const size_t  chunk_size 
)
inlinestaticprivate

◆ jacobi_sn_cn_dn()

template<std::floating_point Real = double>
static JacobiValues Aleph::FFT< Real >::jacobi_sn_cn_dn ( const Real  argument,
const Real  modulus,
const char ctx 
)
inlinestaticprivate

◆ kaiser_beta()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::kaiser_beta ( const Real  attenuation_db)
inlinestatic

◆ kaiser_window()

◆ lfilter() [1/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::lfilter ( const Array< Real > &  signal,
const Array< Real > &  numerator,
const Array< Real > &  denominator,
const Array< Real > &  initial_state = {} 
)
inlinestatic

One-shot causal IIR filtering.

Definition at line 11944 of file fft.H.

◆ lfilter() [2/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::lfilter ( const Array< Real > &  signal,
const BiquadSection section,
const Array< Real > &  initial_state = {} 
)
inlinestatic

Definition at line 11967 of file fft.H.

◆ lfilter() [3/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::lfilter ( const Array< Real > &  signal,
const IIRCoefficients coeffs,
const Array< Real > &  initial_state = {} 
)
inlinestatic

Definition at line 11959 of file fft.H.

◆ lfilter() [4/4]

template<std::floating_point Real = double>
and Is_Real_Container< NumContainer > and static Is_Real_Container< DenContainer > Array< Real > Aleph::FFT< Real >::lfilter ( const SignalContainer signal,
const NumContainer numerator,
const DenContainer denominator,
const Array< Real > &  initial_state = {} 
)
inlinestatic

Definition at line 11979 of file fft.H.

◆ lift_real_input()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::lift_real_input ( const Array< Real > &  input)
inlinestaticprivate

Lifts a real-valued input array to the complex domain.

Creates a new Array of complex numbers where the real part is taken from the input and the imaginary part is set to zero.

Parameters
inputThe input array of real values.
Returns
An Array of complex values.

Definition at line 5541 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::prepare_stft_frame_input(), Aleph::FFT< Real >::project_to_plan_batch_spectra(), Aleph::FFT< Real >::project_to_plan_spectrum(), and Aleph::FFT< Real >::transform_real_optimized().

◆ magnitude_spectrum() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::magnitude_spectrum ( const Array< Complex > &  input)
inlinestatic

Returns |X[k]| for each frequency bin in an FFT output.

Definition at line 8806 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::Array< T >::reserve().

Referenced by Aleph::FFT< Real >::FrequencyResponse::magnitude(), and Aleph::FFT< Real >::magnitude_spectrum().

◆ magnitude_spectrum() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::magnitude_spectrum ( const Container input)
inlinestatic

Magnitude spectrum for complex-valued containers.

Definition at line 8819 of file fft.H.

References Aleph::FFT< Real >::build_complex_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::magnitude_spectrum().

◆ matrix_shape()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::matrix_shape ( const Array< Array< Complex > > &  input,
const char ctx 
)
inlinestaticprivate

Rationale: Validates that an Array of Arrays represents a rectangular matrix and returns its {rows, cols} shape.

Definition at line 5336 of file fft.H.

References ah_invalid_argument_if, Aleph::divide_and_conquer_partition_dp(), Aleph::Array< T >::size(), and Aleph::size().

Referenced by Aleph::FFT< Real >::flatten_matrix_row_major(), Aleph::FFT< Real >::ptransformed2d(), and Aleph::FFT< Real >::transformed2d().

◆ max_abs_value()

◆ max_root_radius()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::max_root_radius ( const Array< Complex > &  roots)
inlinestaticprivatenoexcept

Returns the magnitude of the largest root in the set.

Definition at line 2271 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::enforce_conjugate_symmetry(), Aleph::FFT< Real >::root_groups_impl(), and Aleph::FFT< Real >::stability_margin().

◆ minimum_cancellation_distance_impl()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::minimum_cancellation_distance_impl ( const Array< PoleZeroPair > &  pairs)
inlinestaticprivatenoexcept

Rationale: Estimates the minimum distance between any matched pole and zero to identify potential cancellations.

Definition at line 2358 of file fft.H.

References Aleph::and, and Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::minimum_pole_zero_distance().

◆ minimum_pole_zero_distance() [1/7]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::minimum_pole_zero_distance ( const Array< BiquadSection > &  sections)
inlinestatic

◆ minimum_pole_zero_distance() [2/7]

◆ minimum_pole_zero_distance() [3/7]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::minimum_pole_zero_distance ( const Array< Real > &  numerator,
const Array< Real > &  denominator 
)
inlinestatic

◆ minimum_pole_zero_distance() [4/7]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::minimum_pole_zero_distance ( const BiquadSection section)
inlinestatic

Definition at line 12403 of file fft.H.

References Aleph::FFT< Real >::minimum_pole_zero_distance(), and section().

◆ minimum_pole_zero_distance() [5/7]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::minimum_pole_zero_distance ( const IIRCoefficients coeffs)
inlinestatic

◆ minimum_pole_zero_distance() [6/7]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > Real Aleph::FFT< Real >::minimum_pole_zero_distance ( const NumContainer numerator,
const DenContainer denominator 
)
inlinestatic

◆ minimum_pole_zero_distance() [7/7]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::minimum_pole_zero_distance ( const SectionsContainer sections)
inlinestatic

◆ modified_bessel_i0()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::modified_bessel_i0 ( const Real  x)
inlinestaticprivatenoexcept

Standard Zeroth-order Modified Bessel function of the first kind.

Definition at line 3787 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), k, and Aleph::sum().

Referenced by Aleph::FFT< Real >::kaiser_window().

◆ multichannel_istft()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::multichannel_istft ( const Array< Array< Array< Complex > > > &  spectrograms,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const ISTFTOptions options = {},
const Array< size_t > &  signal_lengths = {},
const SpectrogramLayout  layout = SpectrogramLayout::channel_frame_bin 
)
inlinestatic

Multichannel ISTFT from either channel-major or frame-major spectrogram layouts.

Definition at line 8282 of file fft.H.

◆ multichannel_stft()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::multichannel_stft ( const Array< Array< Real > > &  signals,
const Array< Real > &  window,
const STFTOptions options = {},
const SpectrogramLayout  layout = SpectrogramLayout::channel_frame_bin 
)
inlinestatic

Multichannel STFT with explicit channel-major or frame-major output layout.

Definition at line 8244 of file fft.H.

◆ multiply() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::multiply ( const Array< Complex > &  a,
const Array< Complex > &  b 
)
inlinestatic

Multiplies two complex-valued sequences using convolution.

This method computes the linear convolution of two arrays by:

  1. Padding both inputs to a power-of-two size (N >= size(a) + size(b) - 1).
  2. Transforming both inputs to the frequency domain (FFT).
  3. Performing element-wise multiplication.
  4. Transforming the result back to the time/spatial domain (IFFT).

Generic iterable containers of std::complex values are accepted through a separate overload.

This is equivalent to multiplying two polynomials whose coefficients are given by the input arrays.

Parameters
aThe first complex sequence (e.g., polynomial coefficients).
bThe second complex sequence.
Returns
The result of the convolution (size will be a.size() + b.size() - 1).
Exceptions
std::invalid_argumentif the resulting size overflows size_t.

Definition at line 15194 of file fft.H.

References Aleph::FFT< Real >::multiply_complex_impl().

Referenced by Aleph::FFT< Real >::multiply().

◆ multiply() [2/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::multiply ( const Array< Real > &  a,
const Array< Real > &  b 
)
inlinestatic

Multiplies two real-valued sequences using convolution.

Computes the linear convolution of two real arrays using the FFT-based multiplication algorithm. Generic iterable containers of real values convertible to Real are accepted through a separate overload.

Parameters
aThe first real sequence.
bThe second real sequence.
Returns
The result of the convolution (size will be a.size() + b.size() - 1).
Exceptions
std::invalid_argumentif the resulting size overflows size_t.
std::domain_errorif the intermediate result has non-negligible imaginary parts (numerical instability).

Definition at line 15240 of file fft.H.

References Aleph::FFT< Real >::multiply_real_optimized().

◆ multiply() [3/4]

template<std::floating_point Real = double>
and static Is_Complex_Container< Container2 > Array< Complex > Aleph::FFT< Real >::multiply ( const Container1 a,
const Container2 b 
)
inlinestatic

Multiplication for complex-valued containers.

Definition at line 15211 of file fft.H.

References Aleph::FFT< Real >::build_complex_input(), and Aleph::FFT< Real >::multiply().

◆ multiply() [4/4]

template<std::floating_point Real = double>
and static Is_Real_Container< Container2 > Array< Real > Aleph::FFT< Real >::multiply ( const Container1 a,
const Container2 b 
)
inlinestatic

Multiplication for real-valued containers.

Definition at line 15257 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::multiply().

◆ multiply_complex_impl()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::multiply_complex_impl ( const Array< Complex > &  a,
const Array< Complex > &  b,
ThreadPool pool = nullptr,
const size_t  chunk_size = 0 
)
inlinestaticprivate

◆ multiply_real_optimized()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::multiply_real_optimized ( const Array< Real > &  a,
const Array< Real > &  b,
ThreadPool pool = nullptr,
const size_t  chunk_size = 0 
)
inlinestaticprivate

◆ neon_dispatch_available()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::neon_dispatch_available ( )
inlinestaticnoexcept

Returns whether the runtime CPU can execute the NEON kernel when it has been compiled in.

Definition at line 6085 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::detected_simd_backend(), and Aleph::FFT< Real >::neon_runtime_available().

◆ neon_kernel_compiled()

template<std::floating_point Real = double>
static constexpr bool Aleph::FFT< Real >::neon_kernel_compiled ( )
inlinestaticconstexprnoexcept

Returns whether the NEON kernel was compiled for this precision.

Definition at line 6048 of file fft.H.

◆ neon_runtime_available()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::neon_runtime_available ( )
inlinestaticnoexcept

Returns whether NEON dispatch is supported at runtime.

Definition at line 6264 of file fft.H.

References Aleph::FFT< Real >::neon_dispatch_available().

◆ next_power_of_two()

◆ normalize_axes()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::normalize_axes ( const Array< size_t > &  axes,
const size_t  rank,
const char ctx 
)
inlinestaticprivate

Rationale: Validates axis indices against the tensor rank and ensures no axis is specified more than once.

Definition at line 5148 of file fft.H.

References ah_invalid_argument_if, ah_out_of_range_error_if, Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::reserve().

Referenced by Aleph::FFT< Real >::transform_axes_impl(), and Aleph::FFT< Real >::transform_axis_impl().

◆ normalize_fir_at_omega()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::normalize_fir_at_omega ( Array< Real > &  coeffs,
const Real  omega,
const char ctx 
)
inlinestaticprivate

◆ normalize_iir_coefficients()

◆ normalize_tensor_layout()

template<std::floating_point Real = double>
static TensorLayout Aleph::FFT< Real >::normalize_tensor_layout ( const Array< Complex > &  data,
const TensorLayout layout,
const char ctx 
)
inlinestaticprivate

◆ normalized_sinc()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::normalized_sinc ( const Real  x)
inlinestaticprivatenoexcept

Standard normalized sinc function sin(pi*x)/(pi*x).

Definition at line 3806 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::firwin_lowpass_impl().

◆ one_sided_frequency_grid()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::one_sided_frequency_grid ( const size_t  fft_size,
const Real  sample_rate,
const char ctx 
)
inlinestaticprivate

Maps bin indices to frequency in Hz.

Definition at line 773 of file fft.H.

References ah_invalid_argument_if, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), k, and Aleph::Array< T >::size().

◆ overlap_add_convolution() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::overlap_add_convolution ( const Array< Real > &  signal,
const Array< Real > &  kernel,
const size_t  block_size = 0 
)
inlinestatic

Convenience wrapper for long real convolution via overlap-add.

Definition at line 15048 of file fft.H.

References Aleph::FFT< Real >::OverlapAdd::convolve(), Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::is_empty().

Referenced by Aleph::FFT< Real >::overlap_add_convolution().

◆ overlap_add_convolution() [2/2]

template<std::floating_point Real = double>
and static Is_Real_Container< Container2 > Array< Real > Aleph::FFT< Real >::overlap_add_convolution ( const Container1 signal,
const Container2 kernel,
const size_t  block_size = 0 
)
inlinestatic

Overlap-add convolution for real-valued containers.

Definition at line 15122 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::overlap_add_convolution().

◆ overlap_add_convolution_batch()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::overlap_add_convolution_batch ( const Array< Array< Real > > &  signals,
const Array< Real > &  kernel,
const size_t  block_size = 0 
)
inlinestatic

Multichannel overlap-add convolution with a shared kernel FFT.

Definition at line 15073 of file fft.H.

References Aleph::FFT< Real >::OverlapAddBank::convolve(), Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::is_empty().

◆ overlap_add_frames()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::overlap_add_frames ( const Array< Array< Real > > &  frames,
const size_t  hop_size,
const size_t  signal_length = 0 
)
inlinestatic

◆ overlap_profile()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::overlap_profile ( const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const size_t  hop_size,
const char ctx 
)
inlinestaticprivate

Rationale: Computes the effective window product for a windowed overlap-add process to validate reconstruction constraints.

Definition at line 613 of file fft.H.

References ah_invalid_argument_if, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::validate_overlap_constraints(), and Aleph::FFT< Real >::window_overlap_profile().

◆ overlap_profile_has_cola()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::overlap_profile_has_cola ( const Array< Real > &  profile)
inlinestaticprivatenoexcept

Rationale: Constant Overlap-Add (COLA) ensures that OLA reconstruction has no amplitude modulation artifacts.

Definition at line 656 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::max_abs_value(), and Aleph::mean().

Referenced by Aleph::FFT< Real >::satisfies_cola(), and Aleph::FFT< Real >::validate_overlap_constraints().

◆ overlap_profile_has_nola()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::overlap_profile_has_nola ( const Array< Real > &  profile)
inlinestaticprivatenoexcept

Rationale: Non-zero Overlap-Add (NOLA) ensures the signal can be reconstructed (it's never multiplied by zero in all frames).

Definition at line 642 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::max_abs_value().

Referenced by Aleph::FFT< Real >::satisfies_nola(), and Aleph::FFT< Real >::validate_overlap_constraints().

◆ overlap_save_convolution() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::overlap_save_convolution ( const Array< Real > &  signal,
const Array< Real > &  kernel,
const size_t  block_size = 0 
)
inlinestatic

Convenience wrapper for overlap-save real convolution.

Definition at line 15098 of file fft.H.

References Aleph::FFT< Real >::OverlapSave::convolve(), Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::is_empty().

Referenced by Aleph::FFT< Real >::overlap_save_convolution().

◆ overlap_save_convolution() [2/2]

template<std::floating_point Real = double>
and static Is_Real_Container< Container2 > Array< Real > Aleph::FFT< Real >::overlap_save_convolution ( const Container1 signal,
const Container2 kernel,
const size_t  block_size = 0 
)
inlinestatic

Overlap-save convolution for real-valued containers.

Definition at line 15152 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::overlap_save_convolution().

◆ pair_poles_and_zeros() [1/7]

template<std::floating_point Real = double>
static Array< PoleZeroPair > Aleph::FFT< Real >::pair_poles_and_zeros ( const Array< BiquadSection > &  sections)
inlinestatic

◆ pair_poles_and_zeros() [2/7]

◆ pair_poles_and_zeros() [3/7]

template<std::floating_point Real = double>
static Array< PoleZeroPair > Aleph::FFT< Real >::pair_poles_and_zeros ( const Array< Real > &  numerator,
const Array< Real > &  denominator 
)
inlinestatic

◆ pair_poles_and_zeros() [4/7]

template<std::floating_point Real = double>
static Array< PoleZeroPair > Aleph::FFT< Real >::pair_poles_and_zeros ( const BiquadSection section)
inlinestatic

Definition at line 12352 of file fft.H.

References Aleph::FFT< Real >::pair_poles_and_zeros(), and section().

◆ pair_poles_and_zeros() [5/7]

template<std::floating_point Real = double>
static Array< PoleZeroPair > Aleph::FFT< Real >::pair_poles_and_zeros ( const IIRCoefficients coeffs)
inlinestatic

◆ pair_poles_and_zeros() [6/7]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > Array< PoleZeroPair > Aleph::FFT< Real >::pair_poles_and_zeros ( const NumContainer numerator,
const DenContainer denominator 
)
inlinestatic

◆ pair_poles_and_zeros() [7/7]

template<std::floating_point Real = double>
static Array< PoleZeroPair > Aleph::FFT< Real >::pair_poles_and_zeros ( const SectionsContainer sections)
inlinestatic

◆ partitioned_convolution() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::partitioned_convolution ( const Array< Real > &  signal,
const Array< Real > &  kernel,
const size_t  partition_size = 0 
)
inlinestatic

Convenience wrapper for low-latency partitioned convolution.

Definition at line 15109 of file fft.H.

References Aleph::FFT< Real >::PartitionedConvolver::convolve(), Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::is_empty().

Referenced by Aleph::FFT< Real >::partitioned_convolution().

◆ partitioned_convolution() [2/2]

template<std::floating_point Real = double>
and static Is_Real_Container< Container2 > Array< Real > Aleph::FFT< Real >::partitioned_convolution ( const Container1 signal,
const Container2 kernel,
const size_t  partition_size = 0 
)
inlinestatic

Partitioned convolution for real-valued containers.

Definition at line 15165 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::partitioned_convolution().

◆ pbatched_istft() [1/3]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::pbatched_istft ( ThreadPool pool,
const Array< Array< Array< Complex > > > &  spectrograms,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const ISTFTOptions options,
const Array< size_t > &  signal_lengths = {},
const size_t  chunk_size = 0 
)
inlinestatic

Parallel batched ISTFT across signals.

Definition at line 11346 of file fft.H.

◆ pbatched_istft() [2/3]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::pbatched_istft ( ThreadPool pool,
const Array< Array< Array< Complex > > > &  spectrograms,
const Array< Real > &  window,
const ISTFTOptions options,
const Array< size_t > &  signal_lengths = {},
const size_t  chunk_size = 0 
)
inlinestatic

Parallel batched ISTFT using a shared analysis/synthesis window.

Definition at line 11415 of file fft.H.

◆ pbatched_istft() [3/3]

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::pbatched_istft ( ThreadPool pool,
const Array< Array< Array< Complex > > > &  spectrograms,
const size_t  frame_size,
const ISTFTOptions options,
const Array< size_t > &  signal_lengths = {},
const size_t  chunk_size = 0 
)
inlinestatic

Parallel Hann-window batched ISTFT.

Definition at line 11444 of file fft.H.

◆ pbatched_lfilter()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::pbatched_lfilter ( ThreadPool pool,
const Array< Array< Real > > &  signals,
const Array< Real > &  numerator,
const Array< Real > &  denominator,
const Array< Array< Real > > &  initial_states = {},
const size_t  chunk_size = 0 
)
inlinestatic

Definition at line 12019 of file fft.H.

◆ pbatched_sosfilt()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::pbatched_sosfilt ( ThreadPool pool,
const Array< Array< Real > > &  signals,
const Array< BiquadSection > &  sections,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pbatched_stft() [1/2]

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::pbatched_stft ( ThreadPool pool,
const Array< Array< Real > > &  signals,
const Array< Real > &  window,
const STFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pbatched_stft() [2/2]

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::pbatched_stft ( ThreadPool pool,
const Array< Array< Real > > &  signals,
const size_t  frame_size,
const STFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel Hann-window batched STFT.

Definition at line 11298 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::hann_window(), options, and Aleph::FFT< Real >::pbatched_stft().

◆ pfiltfilt() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pfiltfilt ( ThreadPool pool,
const Array< Real > &  signal,
const Array< Real > &  coeffs,
const size_t  block_size = 0,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pfiltfilt() [2/2]

template<std::floating_point Real = double>
and static Is_Real_Container< CoeffContainer > Array< Real > Aleph::FFT< Real >::pfiltfilt ( ThreadPool pool,
const SignalContainer signal,
const CoeffContainer coeffs,
const size_t  block_size = 0,
const size_t  chunk_size = 0 
)
inlinestatic

◆ phase_delay() [1/9]

◆ phase_delay() [2/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::phase_delay ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ phase_delay() [3/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::phase_delay ( const Array< Real > &  numerator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ phase_delay() [4/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::phase_delay ( const BiquadSection section,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ phase_delay() [5/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::phase_delay ( const Container numerator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ phase_delay() [6/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::phase_delay ( const FrequencyResponse response)
inlinestatic

◆ phase_delay() [7/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::phase_delay ( const IIRCoefficients coeffs,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ phase_delay() [8/9]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > Array< Real > Aleph::FFT< Real >::phase_delay ( const NumContainer numerator,
const DenContainer denominator,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ phase_delay() [9/9]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::phase_delay ( const SectionsContainer sections,
const size_t  num_points = 512,
const bool  whole = false 
)
inlinestatic

◆ phase_delay_impl()

◆ phase_margin() [1/7]

template<std::floating_point Real = double>
static PhaseMarginInfo Aleph::FFT< Real >::phase_margin ( const Array< BiquadSection > &  sections,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ phase_margin() [2/7]

template<std::floating_point Real = double>
static PhaseMarginInfo Aleph::FFT< Real >::phase_margin ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ phase_margin() [3/7]

template<std::floating_point Real = double>
static PhaseMarginInfo Aleph::FFT< Real >::phase_margin ( const BiquadSection section,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ phase_margin() [4/7]

template<std::floating_point Real = double>
static PhaseMarginInfo Aleph::FFT< Real >::phase_margin ( const FrequencyResponse response)
inlinestatic

Estimates phase margin around the unity-gain crossover.

Definition at line 12978 of file fft.H.

References Aleph::FFT< Real >::phase_margin_impl().

Referenced by Aleph::FFT< Real >::phase_margin(), Aleph::FFT< Real >::phase_margin(), Aleph::FFT< Real >::phase_margin(), and Aleph::FFT< Real >::phase_margin().

◆ phase_margin() [5/7]

template<std::floating_point Real = double>
static PhaseMarginInfo Aleph::FFT< Real >::phase_margin ( const IIRCoefficients coeffs,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ phase_margin() [6/7]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > PhaseMarginInfo Aleph::FFT< Real >::phase_margin ( const NumContainer numerator,
const DenContainer denominator,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ phase_margin() [7/7]

template<std::floating_point Real = double>
static PhaseMarginInfo Aleph::FFT< Real >::phase_margin ( const SectionsContainer sections,
const size_t  num_points = 1024,
const bool  whole = false 
)
inlinestatic

◆ phase_margin_impl()

◆ phase_margin_refined_impl()

◆ phase_spectrum() [1/2]

◆ phase_spectrum() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::phase_spectrum ( const Container input)
inlinestatic

◆ pinverse_transform() [1/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::pinverse_transform ( ThreadPool pool,
const Array< Complex > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pinverse_transform() [2/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::pinverse_transform ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pinverse_transform2d()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::pinverse_transform2d ( ThreadPool pool,
const Array< Array< Complex > > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel functional inverse 2-D FFT wrapper.

Definition at line 8124 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::ptransformed2d().

◆ pinverse_transform3d()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::pinverse_transform3d ( ThreadPool pool,
const Array< Array< Array< Complex > > > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel functional inverse 3-D FFT wrapper.

Definition at line 8219 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::ptransformed3d().

◆ pinverse_transform_batch()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::pinverse_transform_batch ( ThreadPool pool,
const Array< Array< Complex > > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel functional batch IFFT wrapper.

Definition at line 7943 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::ptransformed_batch().

◆ pinverse_transform_real() [1/2]

◆ pinverse_transform_real() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pinverse_transform_real ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pirfft() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pirfft ( ThreadPool pool,
const Array< Complex > &  spectrum,
const size_t  signal_size = 0,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pirfft() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pirfft ( ThreadPool pool,
const Container spectrum,
const size_t  signal_size = 0,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pirfft_batch()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::pirfft_batch ( ThreadPool pool,
const Array< Array< Complex > > &  spectra,
const size_t  signal_size,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel compact real inverse FFT for equal-length batches.

Definition at line 7988 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

◆ pistft() [1/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pistft ( ThreadPool pool,
const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const ISTFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel ISTFT with explicit options.

Definition at line 10198 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::istft_impl(), and options.

◆ pistft() [2/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pistft ( ThreadPool pool,
const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const size_t  hop_size,
const size_t  signal_length = 0,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pistft() [3/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pistft ( ThreadPool pool,
const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  window,
const ISTFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel ISTFT using a shared analysis/synthesis window.

Definition at line 10215 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), options, and Aleph::FFT< Real >::pistft().

◆ pistft() [4/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pistft ( ThreadPool pool,
const Array< Array< Complex > > &  spectrogram,
const Array< Real > &  window,
const size_t  hop_size,
const size_t  signal_length = 0,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel STFT inversion using a shared analysis/synthesis window.

Definition at line 10127 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::pistft().

◆ pistft() [5/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pistft ( ThreadPool pool,
const Array< Array< Complex > > &  spectrogram,
const size_t  frame_size,
const ISTFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel Hann-window ISTFT with explicit options.

Definition at line 10226 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::hann_window(), options, and Aleph::FFT< Real >::pistft().

◆ pistft() [6/6]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pistft ( ThreadPool pool,
const Array< Array< Complex > > &  spectrogram,
const size_t  frame_size,
const size_t  hop_size,
const size_t  signal_length = 0,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel STFT inversion using a Hann window pair.

Definition at line 10145 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::hann_window(), and Aleph::FFT< Real >::pistft().

◆ pmultichannel_istft()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::pmultichannel_istft ( ThreadPool pool,
const Array< Array< Array< Complex > > > &  spectrograms,
const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const ISTFTOptions options = {},
const Array< size_t > &  signal_lengths = {},
const SpectrogramLayout  layout = SpectrogramLayout::channel_frame_bin,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel multichannel ISTFT from either supported layout.

Definition at line 8305 of file fft.H.

◆ pmultichannel_stft()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::pmultichannel_stft ( ThreadPool pool,
const Array< Array< Real > > &  signals,
const Array< Real > &  window,
const STFTOptions options = {},
const SpectrogramLayout  layout = SpectrogramLayout::channel_frame_bin,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel multichannel STFT with selectable output layout.

Definition at line 8261 of file fft.H.

◆ pmultiply() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::pmultiply ( ThreadPool pool,
const Array< Complex > &  a,
const Array< Complex > &  b,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pmultiply() [2/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::pmultiply ( ThreadPool pool,
const Array< Real > &  a,
const Array< Real > &  b,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pmultiply() [3/4]

template<std::floating_point Real = double>
and static Is_Complex_Container< Container2 > Array< Complex > Aleph::FFT< Real >::pmultiply ( ThreadPool pool,
const Container1 a,
const Container2 b,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pmultiply() [4/4]

template<std::floating_point Real = double>
and static Is_Real_Container< Container2 > Array< Real > Aleph::FFT< Real >::pmultiply ( ThreadPool pool,
const Container1 a,
const Container2 b,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pole_zero_pairs_impl()

template<std::floating_point Real = double>
static Array< PoleZeroPair > Aleph::FFT< Real >::pole_zero_pairs_impl ( const Array< Complex > &  zeros,
const Array< Complex > &  poles 
)
inlinestaticprivate

◆ poles() [1/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::poles ( const Array< BiquadSection > &  sections)
inlinestatic

◆ poles() [2/6]

◆ poles() [3/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::poles ( const BiquadSection section)
inlinestatic

Definition at line 12275 of file fft.H.

References Aleph::FFT< Real >::poles(), and section().

◆ poles() [4/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::poles ( const Container denominator)
inlinestatic

Definition at line 12309 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::poles().

◆ poles() [5/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::poles ( const IIRCoefficients coeffs)
inlinestatic

◆ poles() [6/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::poles ( const SectionsContainer sections)
inlinestatic

◆ polish_roots_with_newton()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::polish_roots_with_newton ( const Array< Real > &  coefficients,
Array< Complex > &  roots,
const Real  tol,
const size_t  iterations 
)
inlinestaticprivatenoexcept

◆ polynomial_from_roots_complex()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::polynomial_from_roots_complex ( const Array< Complex > &  roots)
inlinestaticprivate

Rationale: Polynomial expansion (z-r1)(z-r2)...

Definition at line 2497 of file fft.H.

References Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::next(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::real_polynomial_from_roots().

◆ polynomial_multiply()

template<std::floating_point Real = double>
template<typename T >
static Array< T > Aleph::FFT< Real >::polynomial_multiply ( const Array< T > &  lhs,
const Array< T > &  rhs 
)
inlinestaticprivate

◆ polynomial_power()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::polynomial_power ( const Array< Real > &  poly,
const size_t  exponent,
const char ctx 
)
inlinestaticprivate

◆ polynomial_root_lower_bound()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::polynomial_root_lower_bound ( const Array< Real > &  monic)
inlinestaticprivatenoexcept

◆ polynomial_root_upper_bound()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::polynomial_root_upper_bound ( const Array< Real > &  monic)
inlinestaticprivatenoexcept

◆ polynomial_roots_impl()

◆ poverlap_add_convolution() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::poverlap_add_convolution ( ThreadPool pool,
const Array< Real > &  signal,
const Array< Real > &  kernel,
const size_t  block_size = 0,
const size_t  chunk_size = 0 
)
inlinestatic

◆ poverlap_add_convolution() [2/2]

template<std::floating_point Real = double>
and static Is_Real_Container< Container2 > Array< Real > Aleph::FFT< Real >::poverlap_add_convolution ( ThreadPool pool,
const Container1 signal,
const Container2 kernel,
const size_t  block_size = 0,
const size_t  chunk_size = 0 
)
inlinestatic

◆ poverlap_add_convolution_batch()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::poverlap_add_convolution_batch ( ThreadPool pool,
const Array< Array< Real > > &  signals,
const Array< Real > &  kernel,
const size_t  block_size = 0,
const size_t  chunk_size = 0 
)
inlinestatic

◆ power_spectrum() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::power_spectrum ( const Array< Complex > &  input)
inlinestatic

Returns |X[k]|^2 for each frequency bin in an FFT output.

Definition at line 8826 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::Array< T >::reserve().

Referenced by Aleph::FFT< Real >::FrequencyResponse::power(), and Aleph::FFT< Real >::power_spectrum().

◆ power_spectrum() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::power_spectrum ( const Container input)
inlinestatic

◆ prefix_copy()

template<std::floating_point Real = double>
template<typename T >
static Array< T > Aleph::FFT< Real >::prefix_copy ( const Array< T > &  input,
const size_t  length 
)
inlinestaticprivate

◆ prepare_stft_frame_input()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::prepare_stft_frame_input ( const Array< Real > &  frame,
const Array< Real > &  window,
const size_t  fft_size 
)
inlinestaticprivate

◆ prepare_welch_frames()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::prepare_welch_frames ( const Array< Real > &  signal,
const Array< Real > &  window,
const WelchOptions options,
const char ctx 
)
inlinestaticprivate

◆ prewarp_band_edges()

◆ prewarp_frequency()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::prewarp_frequency ( const Real  cutoff_frequency,
const Real  sample_rate,
const char ctx 
)
inlinestaticprivate

Rationale: Prewarps an analog cutoff frequency to compensate for the non-linear frequency mapping of the bilinear transform.

Definition at line 2922 of file fft.H.

References ah_invalid_argument_if, and Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::design_low_high_sections(), Aleph::FFT< Real >::design_prototype_sections(), and Aleph::FFT< Real >::prewarp_band_edges().

◆ prfft() [1/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::prfft ( ThreadPool pool,
const Array< Real > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ prfft() [2/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::prfft ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ prfft_batch()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::prfft_batch ( ThreadPool pool,
const Array< Array< Real > > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel compact real FFT for equal-length real batches.

Definition at line 7963 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::size().

◆ project_real_batch_output()

template<std::floating_point Real = double>
static Array< Array< Real > > Aleph::FFT< Real >::project_real_batch_output ( const Array< Array< Complex > > &  input,
const char ctx 
)
inlinestaticprivate

◆ project_real_output()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::project_real_output ( const Array< Complex > &  input,
const char ctx 
)
inlinestaticprivate

Projects a complex-valued output array back to the real domain.

Extracts the real parts of the complex numbers in the input array. It verifies that the imaginary parts are within a negligible tolerance relative to the magnitude of the values.

Parameters
inputThe input array of complex values.
ctxA context string for error reporting (usually the caller name).
Returns
An Array of real values.
Exceptions
std::domain_errorif any imaginary part exceeds the tolerance.

Definition at line 5768 of file fft.H.

References ah_domain_error_if, Aleph::divide_and_conquer_partition_dp(), output, Aleph::Array< T >::reserve(), and Aleph::FFT< Real >::transform_stages().

Referenced by Aleph::FFT< Real >::Plan::inverse_transform_real(), Aleph::FFT< Real >::inverse_transform_real_general_impl(), Aleph::FFT< Real >::multiply_real_optimized(), Aleph::FFT< Real >::Plan::pinverse_transform_real(), and Aleph::FFT< Real >::project_real_batch_output().

◆ project_to_plan_batch_spectra()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::project_to_plan_batch_spectra ( const Plan plan,
const Array< Array< Real > > &  input,
ThreadPool pool = nullptr,
const size_t  chunk_size = 0 
)
inlinestaticprivate

◆ project_to_plan_spectrum()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::project_to_plan_spectrum ( const Plan plan,
const Array< Real > &  input,
ThreadPool pool = nullptr,
const size_t  chunk_size = 0 
)
inlinestaticprivate

◆ pspectrum() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::pspectrum ( ThreadPool pool,
const Array< Complex > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pspectrum() [2/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::pspectrum ( ThreadPool pool,
const Array< Real > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pspectrum() [3/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::pspectrum ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pspectrum() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::pspectrum ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel version of spectrum(const Container&).

Definition at line 8637 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::ptransform().

◆ pstft() [1/4]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::pstft ( ThreadPool pool,
const Array< Real > &  signal,
const Array< Real > &  window,
const STFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel STFT using explicit analysis options.

Definition at line 9979 of file fft.H.

References options, and Aleph::FFT< Real >::stft_impl().

Referenced by Aleph::FFT< Real >::pstft(), Aleph::FFT< Real >::pstft(), and Aleph::FFT< Real >::pstft().

◆ pstft() [2/4]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::pstft ( ThreadPool pool,
const Array< Real > &  signal,
const size_t  frame_size,
const STFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel Hann-window STFT with explicit analysis options.

Definition at line 9999 of file fft.H.

References Aleph::FFT< Real >::hann_window(), options, and Aleph::FFT< Real >::pstft().

◆ pstft() [3/4]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::pstft ( ThreadPool pool,
const Container signal,
const size_t  frame_size,
const STFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

◆ pstft() [4/4]

template<std::floating_point Real = double>
and static Is_Real_Container< WindowContainer > Array< Array< Complex > > Aleph::FFT< Real >::pstft ( ThreadPool pool,
const SignalContainer signal,
const WindowContainer window,
const STFTOptions options,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransform() [1/4]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::ptransform ( ThreadPool pool,
Array< Complex > &  a,
const bool  invert,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel in-place FFT/IFFT using a thread pool.

Equivalent to transform but distributes work across pool. The transform is applied in-place to the complex array a.

Parameters
poolThread pool to use for parallel execution.
aArray of complex values to transform in-place.
invertIf true, computes the inverse transform (IFFT).
chunk_sizeMinimum number of elements per worker task (0 = automatic).
Exceptions
std::invalid_argumentif the size of a is zero.
std::bad_allocif memory allocation fails.

Definition at line 7841 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_any_size_impl().

Referenced by Aleph::FFT< Real >::prfft(), Aleph::FFT< Real >::pspectrum(), Aleph::FFT< Real >::pspectrum(), Aleph::FFT< Real >::ptransform(), Aleph::FFT< Real >::ptransform_padded(), Aleph::FFT< Real >::ptransform_padded(), and Aleph::FFT< Real >::ptransformed().

◆ ptransform() [2/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransform ( ThreadPool pool,
const Array< Real > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel real-input FFT.

Parallel equivalent of transform(const Array<Real>&).

Parameters
poolThread pool for parallel execution.
inputInput array of real values.
chunk_sizeMinimum elements per worker task (0 = automatic).
Returns
A new Array<Complex> containing the frequency spectrum.
Exceptions
std::invalid_argumentif the input is empty.
std::bad_allocif memory allocation fails.

Definition at line 8457 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_real_optimized().

◆ ptransform() [3/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransform ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransform() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransform ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransform_axes()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::ptransform_axes ( ThreadPool pool,
Array< Complex > &  data,
const TensorLayout layout,
const Array< size_t > &  axes,
const bool  invert,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransform_axis()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::ptransform_axis ( ThreadPool pool,
Array< Complex > &  data,
const TensorLayout layout,
const size_t  axis,
const bool  invert,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel in-place 1-D FFT/IFFT along one tensor axis.

Definition at line 8022 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_axis_impl().

◆ ptransform_batch()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::ptransform_batch ( ThreadPool pool,
Array< Array< Complex > > &  batch,
const bool  invert,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel in-place batch transform for equal-length inputs.

Definition at line 7900 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::size().

Referenced by Aleph::FFT< Real >::ptransformed_batch().

◆ ptransform_padded() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransform_padded ( ThreadPool pool,
const Array< Complex > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransform_padded() [2/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransform_padded ( ThreadPool pool,
const Array< Real > &  input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransform_padded() [3/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransform_padded ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel zero-pad and forward-FFT for a generic complex iterable.

Template Parameters
ContainerAny iterable whose elements are std::complex<Real>.
Parameters
poolThread pool for parallel execution.
inputThe input container.
chunk_sizeMinimum elements per worker task (0 = automatic).
Returns
A new Array<Complex> zero-padded and transformed.
Exceptions
std::invalid_argumentif the input is empty.
std::bad_allocif memory allocation fails.

Definition at line 8382 of file fft.H.

References Aleph::FFT< Real >::build_complex_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::ptransform_padded().

◆ ptransform_padded() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransform_padded ( ThreadPool pool,
const Container input,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransformed() [1/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransformed ( ThreadPool pool,
const Array< Complex > &  input,
const bool  invert = false,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel FFT/IFFT that returns a new array.

Functional parallel wrapper around ptransform.

Parameters
poolThread pool to use for parallel execution.
inputInput array of complex values.
invertIf true, computes the inverse transform.
chunk_sizeMinimum elements per worker task (0 = automatic).
Returns
A new array containing the transformed values.
Exceptions
std::invalid_argumentif the input size is zero.
std::bad_allocif memory allocation fails.

Definition at line 7879 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::FFT< Real >::ptransform().

Referenced by Aleph::FFT< Real >::pinverse_transform(), Aleph::FFT< Real >::pinverse_transform(), Aleph::FFT< Real >::pspectrum(), Aleph::FFT< Real >::pspectrum(), Aleph::FFT< Real >::ptransform(), and Aleph::FFT< Real >::ptransformed().

◆ ptransformed() [2/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransformed ( ThreadPool pool,
const Container input,
const bool  invert = false,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel FFT/IFFT for a generic complex iterable.

Template Parameters
ContainerAny iterable whose elements are std::complex<Real>.
Parameters
poolThread pool for parallel execution.
inputThe input container.
invertIf true, computes the inverse transform.
chunk_sizeMinimum elements per worker task (0 = automatic).
Returns
A new Array<Complex> containing the transformed values.
Exceptions
std::invalid_argumentif the input is empty.
std::bad_allocif memory allocation fails.

Definition at line 8423 of file fft.H.

References Aleph::FFT< Real >::build_complex_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::ptransformed().

◆ ptransformed2d()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::ptransformed2d ( ThreadPool pool,
const Array< Array< Complex > > &  input,
const bool  invert = false,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransformed2d_batch()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::ptransformed2d_batch ( ThreadPool pool,
const Array< Array< Array< Complex > > > &  input,
const bool  invert = false,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransformed3d()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::ptransformed3d ( ThreadPool pool,
const Array< Array< Array< Complex > > > &  input,
const bool  invert = false,
const size_t  chunk_size = 0 
)
inlinestatic

◆ ptransformed_axes()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::ptransformed_axes ( ThreadPool pool,
const Array< Complex > &  input,
const TensorLayout layout,
const Array< size_t > &  axes,
const bool  invert = false,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel functional tensor FFT/IFFT wrapper for flat buffers.

Definition at line 8068 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::FFT< Real >::ptransform_axes().

◆ ptransformed_batch()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::ptransformed_batch ( ThreadPool pool,
const Array< Array< Complex > > &  input,
const bool  invert = false,
const size_t  chunk_size = 0 
)
inlinestatic

Parallel functional batch FFT/IFFT wrapper.

Definition at line 7924 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::FFT< Real >::ptransform_batch().

Referenced by Aleph::FFT< Real >::pinverse_transform_batch().

◆ real_polynomial_from_roots()

◆ real_projection_tolerance()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::real_projection_tolerance ( const Complex value,
const size_t  n 
)
inlinestaticprivatenoexcept

Rationale: Estimates the maximum expected numerical noise for a value after an N-point transform, used to validate real projections.

Definition at line 414 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_stages().

Referenced by Aleph::FFT< Real >::validate_real_spectrum().

◆ recommended_cache_tile_size()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::recommended_cache_tile_size ( const size_t  transform_size,
const size_t  batch_size,
ThreadPool pool 
)
inlinestaticprivatenoexcept

◆ refine_scalar_crossing()

template<std::floating_point Real = double>
template<typename Evaluator >
static Real Aleph::FFT< Real >::refine_scalar_crossing ( const Evaluator evaluator,
const Real  x0,
const Real  y0,
const Real  x1,
const Real  y1,
const Real  target 
)
inlinestaticprivate

◆ reflect_pad_signal()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::reflect_pad_signal ( const Array< Real > &  signal,
const size_t  pad_len 
)
inlinestaticprivate

Rationale: Applies reflection padding at signal edges to reduce boundary artifacts during filtering.

Definition at line 564 of file fft.H.

References ah_invalid_argument_if, Aleph::divide_and_conquer_partition_dp(), output, Aleph::Array< T >::reserve(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::filtfilt(), Aleph::FFT< Real >::iir_filtfilt_impl(), Aleph::FFT< Real >::pfiltfilt(), and Aleph::FFT< Real >::sos_filtfilt_impl().

◆ remez() [1/3]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::remez ( const size_t  num_taps,
const Array< Real > &  bands,
const Array< Real > &  desired,
const Real  sample_rate,
const Array< Real > &  weights = {},
const size_t  grid_density = 32,
const size_t  max_iterations = 64 
)
inlinestatic

FIR equiripple design via a dense-grid Remez exchange.

Definition at line 9221 of file fft.H.

Referenced by Aleph::FFT< Real >::remez(), and Aleph::FFT< Real >::remez().

◆ remez() [2/3]

template<std::floating_point Real = double>
and static Is_Real_Container< DesiredContainer > Array< Real > Aleph::FFT< Real >::remez ( const size_t  num_taps,
const BandContainer bands,
const DesiredContainer desired,
const Real  sample_rate 
)
inlinestatic

◆ remez() [3/3]

template<std::floating_point Real = double>
and Is_Real_Container< DesiredContainer > and static Is_Real_Container< WeightContainer > Array< Real > Aleph::FFT< Real >::remez ( const size_t  num_taps,
const BandContainer bands,
const DesiredContainer desired,
const Real  sample_rate,
const WeightContainer weights,
const size_t  grid_density = 32,
const size_t  max_iterations = 64 
)
inlinestatic

◆ remez_impl()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::remez_impl ( const size_t  num_taps,
const Array< Real > &  bands,
const Array< Real > &  desired,
const Real  sample_rate,
const Array< Real > &  weights,
const size_t  grid_density,
const size_t  max_iterations,
const char ctx 
)
inlinestaticprivate

◆ resample_poly() [1/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::resample_poly ( const Array< Real > &  signal,
const size_t  up,
const size_t  down,
const Array< Real > &  coeffs 
)
inlinestatic

◆ resample_poly() [2/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::resample_poly ( const Array< Real > &  signal,
const size_t  up,
const size_t  down,
const ResamplePolyOptions options = {} 
)
inlinestatic

Polyphase resampling with an internally designed Kaiser FIR.

Definition at line 9373 of file fft.H.

◆ resample_poly() [3/4]

template<std::floating_point Real = double>
and static Is_Real_Container< CoeffContainer > Array< Real > Aleph::FFT< Real >::resample_poly ( const SignalContainer signal,
const size_t  up,
const size_t  down,
const CoeffContainer coeffs 
)
inlinestatic

◆ resample_poly() [4/4]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::resample_poly ( const SignalContainer signal,
const size_t  up,
const size_t  down,
const ResamplePolyOptions options = {} 
)
inlinestatic

Definition at line 9422 of file fft.H.

◆ reshape_matrix_row_major()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::reshape_matrix_row_major ( const Array< Complex > &  input,
const size_t  rows,
const size_t  cols,
const char ctx 
)
inlinestaticprivate

Rationale: Reshapes a 1D row-major array back into a 2D matrix.

Definition at line 5369 of file fft.H.

References ah_invalid_argument_if, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), and output.

Referenced by Aleph::FFT< Real >::ptransformed2d(), and Aleph::FFT< Real >::transformed2d().

◆ reshape_tensor3_row_major()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::reshape_tensor3_row_major ( const Array< Complex > &  input,
const size_t  dim0,
const size_t  dim1,
const size_t  dim2,
const char ctx 
)
inlinestaticprivate

◆ resolve_irfft_signal_size()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::resolve_irfft_signal_size ( const Array< Complex > &  spectrum,
const size_t  signal_size,
const char ctx 
)
inlinestaticprivate

◆ resolve_welch_fft_size()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::resolve_welch_fft_size ( const WelchOptions options,
const size_t  frame_size,
const char ctx 
)
inlinestaticprivate

Default FFT size for Welch analysis (zero-padded to power of 2).

Definition at line 814 of file fft.H.

References ah_invalid_argument_if, Aleph::FFT< Real >::next_power_of_two(), and options.

◆ resolve_welch_hop_size()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::resolve_welch_hop_size ( const WelchOptions options,
const size_t  frame_size,
const char ctx 
)
inlinestaticprivate

Default hop size for Welch analysis (50% overlap).

Definition at line 802 of file fft.H.

References ah_invalid_argument_if, and options.

Referenced by Aleph::FFT< Real >::prepare_welch_frames().

◆ reverse_bessel_polynomial()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::reverse_bessel_polynomial ( const size_t  order,
const char ctx 
)
inlinestaticprivate

Rationale: Generates coefficients for the Reverse Bessel Polynomial used in Bessel filter prototypes.

Definition at line 3453 of file fft.H.

References ah_invalid_argument_if, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), and k.

Referenced by Aleph::FFT< Real >::bessel_prototype().

◆ reverse_copy()

template<std::floating_point Real = double>
template<typename T >
static Array< T > Aleph::FFT< Real >::reverse_copy ( const Array< T > &  input)
inlinestaticprivate

◆ rfft() [1/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::rfft ( const Array< Real > &  input)
inlinestatic

Computes the compact real FFT of size floor(N/2) + 1.

The returned layout stores bins 0..floor(N/2) only. For odd-length signals, callers must pass the original signal length back to irfft because the compact layout alone is ambiguous.

Definition at line 8470 of file fft.H.

References Aleph::FFT< Real >::compact_real_spectrum(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform().

Referenced by Aleph::FFT< Real >::rfft().

◆ rfft() [2/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::rfft ( const Container input)
inlinestatic

Compact real FFT for real-valued containers.

Definition at line 8560 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::rfft().

◆ rfft_batch()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::rfft_batch ( const Array< Array< Real > > &  input)
inlinestatic

Functional compact real FFT for equal-length real batches.

Definition at line 7952 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::size().

◆ root_groups_impl()

◆ roots_pass_residual_check()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::roots_pass_residual_check ( const Array< Real > &  coefficients,
const Array< Complex > &  roots,
const Real  tol 
)
inlinestaticprivatenoexcept

◆ row_major_layout()

◆ row_major_strides()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::row_major_strides ( const Array< size_t > &  shape,
const char ctx 
)
inlinestaticprivate

◆ satisfies_cola() [1/2]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::satisfies_cola ( const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const size_t  hop_size 
)
inlinestatic

Returns true when the window pair satisfies COLA.

Definition at line 9846 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::overlap_profile_has_cola(), and Aleph::FFT< Real >::window_overlap_profile().

Referenced by Aleph::FFT< Real >::satisfies_cola().

◆ satisfies_cola() [2/2]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::satisfies_cola ( const Array< Real > &  window,
const size_t  hop_size 
)
inlinestatic

Returns true when one window satisfies COLA by itself.

Definition at line 9864 of file fft.H.

References Aleph::FFT< Real >::satisfies_cola().

◆ satisfies_nola() [1/2]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::satisfies_nola ( const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const size_t  hop_size 
)
inlinestatic

Returns true when the window pair satisfies NOLA.

Definition at line 9835 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::overlap_profile_has_nola(), and Aleph::FFT< Real >::window_overlap_profile().

Referenced by Aleph::FFT< Real >::satisfies_nola().

◆ satisfies_nola() [2/2]

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::satisfies_nola ( const Array< Real > &  window,
const size_t  hop_size 
)
inlinestatic

Returns true when one window satisfies NOLA by itself.

Definition at line 9857 of file fft.H.

References Aleph::FFT< Real >::satisfies_nola().

◆ saturating_product()

template<std::floating_point Real = double>
static constexpr size_t Aleph::FFT< Real >::saturating_product ( const size_t  lhs,
const size_t  rhs 
)
inlinestaticconstexprprivatenoexcept

◆ scaled_copy()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::scaled_copy ( const Array< Real > &  input,
const Real  factor 
)
inlinestaticprivate

◆ scaled_tolerance()

◆ scatter_axis_slice()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::scatter_axis_slice ( Array< Complex > &  data,
const size_t  base_offset,
const size_t  axis_stride,
const Array< Complex > &  slice 
)
inlinestaticprivate

Rationale: Writes back a transformed contiguous slice into its original (potentially non-contiguous) memory locations.

Definition at line 5245 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::transform_axis_impl().

◆ section_from_coefficients()

template<std::floating_point Real = double>
static BiquadSection Aleph::FFT< Real >::section_from_coefficients ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const char ctx 
)
inlinestaticprivate

◆ series_zero_tolerance()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::series_zero_tolerance ( const size_t  coeff_count,
const Real  multiplier = Real(256) 
)
inlinestaticprivatenoexcept

◆ should_parallelize_batch_work()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::should_parallelize_batch_work ( ThreadPool pool,
const size_t  batch_size,
const size_t  transform_size,
const size_t  min_work = 8192 
)
inlinestaticprivatenoexcept

◆ signed_binomial()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::signed_binomial ( const size_t  power,
const Real  sign 
)
inlinestaticprivate

Rationale: Computes (1 + sign*x)^power coefficients.

Definition at line 2446 of file fft.H.

References Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), and k.

Referenced by Aleph::FFT< Real >::bilinear_substitute_polynomial().

◆ simd_backend()

template<std::floating_point Real = double>
static SimdBackend Aleph::FFT< Real >::simd_backend ( )
inlinestaticnoexcept

◆ simd_backend_name() [1/2]

template<std::floating_point Real = double>
static const char * Aleph::FFT< Real >::simd_backend_name ( )
inlinestaticnoexcept

◆ simd_backend_name() [2/2]

template<std::floating_point Real = double>
static constexpr const char * Aleph::FFT< Real >::simd_backend_name ( const SimdBackend  backend)
inlinestaticconstexprnoexcept

Returns the human-readable name of a SIMD backend.

Definition at line 6003 of file fft.H.

References Aleph::FFT< Real >::avx2, Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::neon, and Aleph::FFT< Real >::scalar.

◆ simd_preference()

template<std::floating_point Real = double>
static SimdPreference Aleph::FFT< Real >::simd_preference ( )
inlinestaticnoexcept

Returns the runtime SIMD preference requested via environment.

ALEPH_FFT_SIMD=auto|scalar|avx2 is preferred. Legacy compatibility is preserved through ALEPH_FFT_ENABLE_AVX2=1 and ALEPH_FFT_DISABLE_AVX2=1.

Definition at line 6161 of file fft.H.

References Aleph::and, Aleph::FFT< Real >::automatic, Aleph::FFT< Real >::avx2_only, Aleph::divide_and_conquer_partition_dp(), Aleph::mode(), Aleph::FFT< Real >::neon_only, and Aleph::FFT< Real >::scalar_only.

Referenced by Aleph::FFT< Real >::batched_plan_simd_backend(), Aleph::FFT< Real >::Plan::should_use_avx2(), Aleph::FFT< Real >::Plan::should_use_neon(), Aleph::FFT< Real >::simd_backend(), and Aleph::FFT< Real >::simd_preference_name().

◆ simd_preference_name() [1/2]

template<std::floating_point Real = double>
static const char * Aleph::FFT< Real >::simd_preference_name ( )
inlinestaticnoexcept

Returns the requested SIMD policy name.

Definition at line 6250 of file fft.H.

References Aleph::FFT< Real >::simd_preference(), and Aleph::FFT< Real >::simd_preference_name().

Referenced by Aleph::FFT< Real >::simd_preference_name().

◆ simd_preference_name() [2/2]

template<std::floating_point Real = double>
static constexpr const char * Aleph::FFT< Real >::simd_preference_name ( const SimdPreference  preference)
inlinestaticconstexprnoexcept

◆ slice_copy()

◆ solve_dense_system()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::solve_dense_system ( Array< Real matrix,
Array< Real rhs,
const size_t  n,
const char ctx 
)
inlinestaticprivate

◆ solve_elliptic_selectivity_modulus()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::solve_elliptic_selectivity_modulus ( const Real  k1,
const size_t  order,
const char ctx 
)
inlinestaticprivate

◆ solve_remez_cosine_series()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::solve_remez_cosine_series ( const Array< Real > &  omega,
const Array< Real > &  desired,
const Array< Real > &  weight,
const Array< size_t > &  extrema,
const size_t  half_order,
const char ctx 
)
inlinestaticprivate

◆ sos_filtfilt_impl()

◆ sosfilt() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::sosfilt ( const Array< Real > &  signal,
const Array< BiquadSection > &  sections 
)
inlinestatic

One-shot causal filtering of a cascade of second-order sections.

Definition at line 12074 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::SOSFilter::filter().

Referenced by Aleph::FFT< Real >::batched_sosfilt(), and Aleph::FFT< Real >::sosfilt().

◆ sosfilt() [2/2]

◆ spectrum() [1/4]

◆ spectrum() [2/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::spectrum ( const Array< Real > &  input)
inlinestatic

DSP alias for the real forward FFT.

Definition at line 8592 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform().

◆ spectrum() [3/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::spectrum ( const Container input)
inlinestatic

DSP alias for complex-valued container forward FFT.

Definition at line 8609 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transformed().

◆ spectrum() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::spectrum ( const Container input)
inlinestatic

DSP alias for real-valued container forward FFT.

Definition at line 8628 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform().

◆ stability_margin() [1/6]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::stability_margin ( const Array< BiquadSection > &  sections)
inlinestatic

◆ stability_margin() [2/6]

◆ stability_margin() [3/6]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::stability_margin ( const BiquadSection section)
inlinestatic

Definition at line 12446 of file fft.H.

References section(), and Aleph::FFT< Real >::stability_margin().

◆ stability_margin() [4/6]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::stability_margin ( const Container denominator)
inlinestatic

◆ stability_margin() [5/6]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::stability_margin ( const IIRCoefficients coeffs)
inlinestatic

◆ stability_margin() [6/6]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::stability_margin ( const SectionsContainer sections)
inlinestatic

◆ stft() [1/8]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::stft ( const Array< Real > &  signal,
const Array< Real > &  window,
const size_t  hop_size,
const bool  pad_end = true 
)
inlinestatic

Computes a basic STFT for a real signal using a custom window.

Each frame is windowed and transformed with zero-padding to the next power-of-two FFT size when needed.

Definition at line 9925 of file fft.H.

References Aleph::FFT< Real >::STFTOptions::hop_size, options, and Aleph::FFT< Real >::stft_impl().

Referenced by Aleph::FFT< Real >::stft(), Aleph::FFT< Real >::stft(), Aleph::FFT< Real >::stft(), Aleph::FFT< Real >::stft(), Aleph::FFT< Real >::stft(), and Aleph::FFT< Real >::stft().

◆ stft() [2/8]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::stft ( const Array< Real > &  signal,
const Array< Real > &  window,
const STFTOptions options 
)
inlinestatic

Computes an STFT with explicit analysis options.

Definition at line 9970 of file fft.H.

References options, and Aleph::FFT< Real >::stft_impl().

◆ stft() [3/8]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::stft ( const Array< Real > &  signal,
const size_t  frame_size,
const size_t  hop_size,
const bool  pad_end = true 
)
inlinestatic

Computes a basic STFT for a real signal using a Hann window.

Definition at line 9938 of file fft.H.

References Aleph::FFT< Real >::hann_window(), and Aleph::FFT< Real >::stft().

◆ stft() [4/8]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::stft ( const Array< Real > &  signal,
const size_t  frame_size,
const STFTOptions options 
)
inlinestatic

Computes a Hann-window STFT with explicit analysis options.

Definition at line 9990 of file fft.H.

References Aleph::FFT< Real >::hann_window(), options, and Aleph::FFT< Real >::stft().

◆ stft() [5/8]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::stft ( const Container signal,
const size_t  frame_size,
const size_t  hop_size,
const bool  pad_end = true 
)
inlinestatic

Definition at line 9960 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::stft().

◆ stft() [6/8]

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::stft ( const Container signal,
const size_t  frame_size,
const STFTOptions options 
)
inlinestatic

◆ stft() [7/8]

template<std::floating_point Real = double>
and static Is_Real_Container< WindowContainer > Array< Array< Complex > > Aleph::FFT< Real >::stft ( const SignalContainer signal,
const WindowContainer window,
const size_t  hop_size,
const bool  pad_end = true 
)
inlinestatic

Definition at line 9949 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::stft().

◆ stft() [8/8]

template<std::floating_point Real = double>
and static Is_Real_Container< WindowContainer > Array< Array< Complex > > Aleph::FFT< Real >::stft ( const SignalContainer signal,
const WindowContainer window,
const STFTOptions options 
)
inlinestatic

◆ stft_impl()

◆ substitute_rational_polynomial()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::substitute_rational_polynomial ( const Array< Real > &  poly,
const Array< Real > &  numerator,
const Array< Real > &  denominator,
const char ctx 
)
inlinestaticprivate

◆ sum_squares()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::sum_squares ( const Array< Real > &  input)
inlinestaticprivatenoexcept

L2 norm squared.

Definition at line 749 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::window_enbw(), and Aleph::FFT< Real >::window_energy().

◆ sum_values()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::sum_values ( const Array< Real > &  input)
inlinestaticprivatenoexcept

◆ tensor3_shape()

template<std::floating_point Real = double>
static Array< size_t > Aleph::FFT< Real >::tensor3_shape ( const Array< Array< Array< Complex > > > &  input,
const char ctx 
)
inlinestaticprivate

◆ tensor_element_count()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::tensor_element_count ( const Array< size_t > &  shape,
const char ctx 
)
inlinestaticprivate

◆ tensor_max_offset()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::tensor_max_offset ( const Array< size_t > &  shape,
const Array< size_t > &  strides,
const char ctx 
)
inlinestaticprivate

◆ to_array()

template<std::floating_point Real = double>
template<typename T , typename Container >
requires requires(const Container & c) { std::begin(c); std::end(c); requires std::convertible_to<decltype(*std::begin(c)), T>; }
static Array< T > Aleph::FFT< Real >::to_array ( const Container input)
inlinestaticprivate

◆ transfer_function_to_sections() [1/2]

template<std::floating_point Real = double>
static Array< BiquadSection > Aleph::FFT< Real >::transfer_function_to_sections ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const char ctx 
)
inlinestaticprivate

◆ transfer_function_to_sections() [2/2]

◆ transform() [1/4]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::transform ( Array< Complex > &  a,
const bool  invert 
)
inlinestatic

Computes the Fast Fourier Transform (FFT) in-place.

Implements a mixed radix-2/radix-4 iterative Cooley-Tukey algorithm. Power-of-two sizes use the optimized radix-2/radix-4 kernel, while other sizes dispatch to a reusable arbitrary-length plan.

If 'invert' is true, it computes the Inverse Fast Fourier Transform (IFFT), including the 1/N scaling factor.

Parameters
aThe array of complex values to transform. Modified in-place.
invertWhether to perform the inverse transform.
Exceptions
std::invalid_argumentif the size of 'a' is zero.

Definition at line 7822 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_any_size_impl().

Referenced by Aleph::FFT< Real >::rfft(), Aleph::FFT< Real >::spectrum(), Aleph::FFT< Real >::spectrum(), Aleph::FFT< Real >::transform(), Aleph::FFT< Real >::transform_padded(), Aleph::FFT< Real >::transform_padded(), and Aleph::FFT< Real >::transformed().

◆ transform() [2/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transform ( const Array< Real > &  input)
inlinestatic

Computes the FFT of a real-valued input sequence.

The input sequence is first lifted to the complex domain (imaginary parts set to zero) before the transform is applied. Generic iterable containers of real values are accepted through a separate overload.

Parameters
inputThe input array of real values.
Returns
A new array of complex values containing the frequency spectrum.
Exceptions
std::invalid_argumentif the input size is zero.

Definition at line 8440 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_real_optimized().

◆ transform() [3/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transform ( const Container input)
inlinestatic

Forward FFT for complex-valued containers.

Definition at line 8503 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transformed().

◆ transform() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transform ( const Container input)
inlinestatic

Forward FFT for real-valued containers.

Definition at line 8541 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform().

◆ transform_any_size_impl()

◆ transform_axes()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::transform_axes ( Array< Complex > &  data,
const TensorLayout layout,
const Array< size_t > &  axes,
const bool  invert 
)
inlinestatic

◆ transform_axes_impl()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::transform_axes_impl ( Array< Complex > &  data,
const TensorLayout layout,
const Array< size_t > &  axes,
const bool  invert,
ThreadPool pool = nullptr,
const size_t  chunk_size = 0 
)
inlinestaticprivate

Rationale: Internal implementation of a multi-axis tensor transform.

Applies the 1D transform sequentially along each requested axis.

Definition at line 5312 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::normalize_axes(), Aleph::FFT< Real >::normalize_tensor_layout(), and Aleph::FFT< Real >::transform_axis_impl().

Referenced by Aleph::FFT< Real >::ptransform_axes(), and Aleph::FFT< Real >::transform_axes().

◆ transform_axis()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::transform_axis ( Array< Complex > &  data,
const TensorLayout layout,
const size_t  axis,
const bool  invert 
)
inlinestatic

In-place 1-D FFT/IFFT along one tensor axis of a flat buffer.

Definition at line 8012 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_axis_impl().

◆ transform_axis_impl()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::transform_axis_impl ( Array< Complex > &  data,
const TensorLayout layout,
const size_t  axis,
const bool  invert,
ThreadPool pool = nullptr,
const size_t  chunk_size = 0 
)
inlinestaticprivate

◆ transform_batch()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::transform_batch ( Array< Array< Complex > > &  batch,
const bool  invert 
)
inlinestatic

In-place batch transform for equal-length complex inputs.

Definition at line 7889 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::size().

Referenced by Aleph::FFT< Real >::transformed_batch().

◆ transform_impl()

◆ transform_padded() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transform_padded ( const Array< Complex > &  input)
inlinestatic

◆ transform_padded() [2/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transform_padded ( const Array< Real > &  input)
inlinestatic

Computes the FFT after zero-padding the input to the next power of two.

Definition at line 8485 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::next_power_of_two(), Aleph::FFT< Real >::transform(), and Aleph::FFT< Real >::zero_padded_copy().

◆ transform_padded() [3/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transform_padded ( const Container input)
inlinestatic

Zero-pad and forward-FFT a generic complex iterable.

Accepts any container of std::complex<Real> values (e.g. std::vector<Complex>, DynList<Complex>). The input is copied to an internal Array<Complex> via build_complex_input before the transform is applied.

Template Parameters
ContainerAny iterable whose elements are std::complex<Real>.
Parameters
inputThe input container.
Returns
A new Array<Complex> zero-padded to a power-of-two length and transformed.
Exceptions
std::invalid_argumentif the input is empty.
std::bad_allocif memory allocation fails.

Definition at line 8364 of file fft.H.

References Aleph::FFT< Real >::build_complex_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_padded().

◆ transform_padded() [4/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transform_padded ( const Container input)
inlinestatic

Forward FFT with padding for real-valued containers.

Definition at line 8522 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transform_padded().

◆ transform_real_optimized()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transform_real_optimized ( const Array< Real > &  input,
ThreadPool pool = nullptr,
const size_t  chunk_size = 0 
)
inlinestaticprivate

◆ transform_stages()

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::transform_stages ( const size_t  n)
inlinestaticprivatenoexcept

Returns log2(N) stages, used for numerical error scaling.

Definition at line 404 of file fft.H.

References Aleph::divide_and_conquer_partition_dp().

Referenced by Aleph::FFT< Real >::hermitian_tolerance(), Aleph::FFT< Real >::project_real_output(), and Aleph::FFT< Real >::real_projection_tolerance().

◆ transform_stft_frames()

◆ transformed() [1/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transformed ( const Array< Complex > &  input,
const bool  invert = false 
)
inlinestatic

Computes the FFT or IFFT and returns a new array.

Functional wrapper around the in-place transform method. Overloads are also available for generic iterable containers of std::complex values.

Parameters
inputThe input array of complex values.
invertWhether to perform the inverse transform.
Returns
A new array containing the transformed values.
Exceptions
std::invalid_argumentif the input size is zero.

Definition at line 7859 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::FFT< Real >::transform().

Referenced by Aleph::FFT< Real >::inverse_transform(), Aleph::FFT< Real >::inverse_transform(), Aleph::FFT< Real >::spectrum(), Aleph::FFT< Real >::spectrum(), Aleph::FFT< Real >::transform(), and Aleph::FFT< Real >::transformed().

◆ transformed() [2/2]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transformed ( const Container input,
const bool  invert = false 
)
inlinestatic

FFT/IFFT for a generic complex iterable.

Accepts any container of std::complex<Real> values. The input is converted to Array<Complex> via build_complex_input before the transform is applied.

Template Parameters
ContainerAny iterable whose elements are std::complex<Real>.
Parameters
inputThe input container.
invertIf true, computes the inverse transform (IFFT).
Returns
A new Array<Complex> containing the transformed values.
Exceptions
std::invalid_argumentif the input is empty.
std::bad_allocif memory allocation fails.

Definition at line 8404 of file fft.H.

References Aleph::FFT< Real >::build_complex_input(), Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transformed().

◆ transformed2d()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::transformed2d ( const Array< Array< Complex > > &  input,
const bool  invert = false 
)
inlinestatic

◆ transformed2d_batch()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::transformed2d_batch ( const Array< Array< Array< Complex > > > &  input,
const bool  invert = false 
)
inlinestatic

◆ transformed3d()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::transformed3d ( const Array< Array< Array< Complex > > > &  input,
const bool  invert = false 
)
inlinestatic

◆ transformed_axes()

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::transformed_axes ( const Array< Complex > &  input,
const TensorLayout layout,
const Array< size_t > &  axes,
const bool  invert = false 
)
inlinestatic

Functional tensor FFT/IFFT wrapper for flat buffers.

Definition at line 8056 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::FFT< Real >::transform_axes().

◆ transformed_batch()

template<std::floating_point Real = double>
static Array< Array< Complex > > Aleph::FFT< Real >::transformed_batch ( const Array< Array< Complex > > &  input,
const bool  invert = false 
)
inlinestatic

Functional batch FFT/IFFT wrapper.

Definition at line 7914 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, and Aleph::FFT< Real >::transform_batch().

Referenced by Aleph::FFT< Real >::inverse_transform_batch().

◆ transpose_spectrogram_layout()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::transpose_spectrogram_layout ( const Array< Array< Array< Complex > > > &  input,
const SpectrogramLayout  source,
const SpectrogramLayout  target 
)
inlinestatic

Converts multichannel spectrograms between channel-major and frame-major layouts.

Definition at line 8230 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::transpose_spectrogram_layout_impl().

◆ transpose_spectrogram_layout_impl()

template<std::floating_point Real = double>
static Array< Array< Array< Complex > > > Aleph::FFT< Real >::transpose_spectrogram_layout_impl ( const Array< Array< Array< Complex > > > &  input,
const SpectrogramLayout  source,
const SpectrogramLayout  target,
const char ctx 
)
inlinestaticprivate

Rationale: Internal implementation for transposing between multichannel spectrogram layouts (e.g.

Channel-major to Frame-major).

Definition at line 5470 of file fft.H.

References ah_invalid_argument_if, Aleph::FFT< Real >::channel_frame_bin, Aleph::divide_and_conquer_partition_dp(), output, Aleph::Array< T >::size(), and Aleph::size().

Referenced by Aleph::FFT< Real >::transpose_spectrogram_layout().

◆ trim_leading_zeros_copy()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::trim_leading_zeros_copy ( const Array< Real > &  input)
inlinestaticprivatenoexcept

Rationale: Copy utility that removes leading zero coefficients, effectively normalizing the polynomial degree.

Definition at line 2112 of file fft.H.

References Aleph::and, Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::reserve().

Referenced by Aleph::FFT< Real >::extract_repeated_unit_roots(), Aleph::FFT< Real >::trim_polynomial_leading_zeros(), and Aleph::FFT< Real >::zeros().

◆ trim_polynomial_leading_zeros()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::trim_polynomial_leading_zeros ( const Array< Real > &  input,
const char ctx 
)
inlinestaticprivate

◆ trim_to_size()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::trim_to_size ( Array< Complex > &  input,
const size_t  n 
)
inlinestaticprivate

◆ try_aberth_ehrlich_roots()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::try_aberth_ehrlich_roots ( const Array< Real > &  coefficients,
const Real  tol,
Array< Complex > &  roots,
const size_t  max_iterations = 192 
)
inlinestaticprivatenoexcept

◆ try_durand_kerner_roots()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::try_durand_kerner_roots ( const Array< Real > &  coefficients,
const Real  tol,
Array< Complex > &  roots,
const size_t  max_iterations = 192 
)
inlinestaticprivatenoexcept

◆ try_laguerre_roots()

template<std::floating_point Real = double>
static bool Aleph::FFT< Real >::try_laguerre_roots ( const Array< Real > &  coefficients,
const Real  tol,
Array< Complex > &  roots 
)
inlinestaticprivatenoexcept

◆ twiddle_at()

template<std::floating_point Real = double>
static Complex Aleph::FFT< Real >::twiddle_at ( const Real  angle,
const size_t  index 
)
inlinestaticprivate

◆ unwrap_phase()

◆ upfirdn() [1/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::upfirdn ( const Array< Real > &  signal,
const Array< Real > &  coeffs,
const size_t  up = 1,
const size_t  down = 1 
)
inlinestatic

◆ upfirdn() [2/2]

template<std::floating_point Real = double>
and static Is_Real_Container< CoeffContainer > Array< Real > Aleph::FFT< Real >::upfirdn ( const SignalContainer signal,
const CoeffContainer coeffs,
const size_t  up = 1,
const size_t  down = 1 
)
inlinestatic

◆ validate_istft_configuration()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_istft_configuration ( const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const size_t  fft_size,
const ISTFTOptions options,
const char ctx 
)
inlinestaticprivate

Rationale: Validates and normalizes ISTFT parameters, checking window constraints and FFT size.

Definition at line 4863 of file fft.H.

References ah_invalid_argument_if, Aleph::divide_and_conquer_partition_dp(), options, and Aleph::FFT< Real >::validate_overlap_constraints().

Referenced by Aleph::FFT< Real >::ISTFTProcessor::ISTFTProcessor(), and Aleph::FFT< Real >::istft_impl().

◆ validate_no_near_pole_zero_cancellation() [1/7]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_no_near_pole_zero_cancellation ( const Array< BiquadSection > &  sections,
const Real  tolerance 
)
inlinestatic

◆ validate_no_near_pole_zero_cancellation() [2/7]

◆ validate_no_near_pole_zero_cancellation() [3/7]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_no_near_pole_zero_cancellation ( const Array< Real > &  numerator,
const Array< Real > &  denominator,
const Real  tolerance 
)
inlinestatic

◆ validate_no_near_pole_zero_cancellation() [4/7]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_no_near_pole_zero_cancellation ( const BiquadSection section,
const Real  tolerance 
)
inlinestatic

◆ validate_no_near_pole_zero_cancellation() [5/7]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_no_near_pole_zero_cancellation ( const IIRCoefficients coeffs,
const Real  tolerance 
)
inlinestatic

◆ validate_no_near_pole_zero_cancellation() [6/7]

template<std::floating_point Real = double>
and static Is_Real_Container< DenContainer > void Aleph::FFT< Real >::validate_no_near_pole_zero_cancellation ( const NumContainer numerator,
const DenContainer denominator,
const Real  tolerance 
)
inlinestatic

◆ validate_no_near_pole_zero_cancellation() [7/7]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_no_near_pole_zero_cancellation ( const SectionsContainer sections,
const Real  tolerance 
)
inlinestatic

◆ validate_overlap_constraints()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_overlap_constraints ( const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const size_t  hop_size,
const bool  validate_nola,
const bool  validate_cola,
const char ctx 
)
inlinestaticprivate

◆ validate_real_spectrum()

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_real_spectrum ( const Array< Complex > &  input,
const char ctx 
)
inlinestaticprivate

◆ validate_stable() [1/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const Array< BiquadSection > &  sections)
inlinestatic

◆ validate_stable() [2/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const Array< BiquadSection > &  sections,
const Real  min_margin 
)
inlinestatic

◆ validate_stable() [3/12]

◆ validate_stable() [4/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const Array< Real > &  denominator,
const Real  min_margin 
)
inlinestatic

◆ validate_stable() [5/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const BiquadSection section)
inlinestatic

Definition at line 12618 of file fft.H.

References section(), and Aleph::FFT< Real >::validate_stable().

◆ validate_stable() [6/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const BiquadSection section,
const Real  min_margin 
)
inlinestatic

◆ validate_stable() [7/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const Container denominator)
inlinestatic

◆ validate_stable() [8/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const Container denominator,
const Real  min_margin 
)
inlinestatic

◆ validate_stable() [9/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const IIRCoefficients coeffs)
inlinestatic

◆ validate_stable() [10/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const IIRCoefficients coeffs,
const Real  min_margin 
)
inlinestatic

◆ validate_stable() [11/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const SectionsContainer sections)
inlinestatic

◆ validate_stable() [12/12]

template<std::floating_point Real = double>
static void Aleph::FFT< Real >::validate_stable ( const SectionsContainer sections,
const Real  min_margin 
)
inlinestatic

◆ validate_stft_options()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::validate_stft_options ( const Array< Real > &  window,
const STFTOptions options,
const char ctx 
)
inlinestaticprivate

◆ welch() [1/3]

template<std::floating_point Real = double>
static PowerSpectralDensity Aleph::FFT< Real >::welch ( const Array< Real > &  signal,
const Array< Real > &  window,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

Welch one-sided PSD estimate using a custom window.

Definition at line 9621 of file fft.H.

◆ welch() [2/3]

template<std::floating_point Real = double>
static PowerSpectralDensity Aleph::FFT< Real >::welch ( const Array< Real > &  signal,
const size_t  frame_size,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

Welch one-sided PSD estimate using a Hann window.

Definition at line 9662 of file fft.H.

◆ welch() [3/3]

template<std::floating_point Real = double>
and static Is_Real_Container< WindowContainer > PowerSpectralDensity Aleph::FFT< Real >::welch ( const SignalContainer signal,
const WindowContainer window,
const Real  sample_rate,
const WelchOptions options = {} 
)
inlinestatic

Definition at line 9774 of file fft.H.

◆ window_coherent_gain() [1/2]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::window_coherent_gain ( const Array< Real > &  window)
inlinestatic

◆ window_coherent_gain() [2/2]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::window_coherent_gain ( const Container window)
inlinestatic

◆ window_enbw() [1/2]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::window_enbw ( const Array< Real > &  window)
inlinestatic

◆ window_enbw() [2/2]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::window_enbw ( const Container window)
inlinestatic

◆ window_energy() [1/2]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::window_energy ( const Array< Real > &  window)
inlinestatic

Returns the sum of squared window samples.

Definition at line 9512 of file fft.H.

References ah_invalid_argument_if, Aleph::Array< T >::is_empty(), and Aleph::FFT< Real >::sum_squares().

Referenced by Aleph::FFT< Real >::window_energy().

◆ window_energy() [2/2]

template<std::floating_point Real = double>
static Real Aleph::FFT< Real >::window_energy ( const Container window)
inlinestatic

◆ window_overlap_profile()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::window_overlap_profile ( const Array< Real > &  analysis_window,
const Array< Real > &  synthesis_window,
const size_t  hop_size 
)
inlinestatic

Returns the overlap-add normalization profile for one hop period.

Definition at line 9823 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), and Aleph::FFT< Real >::overlap_profile().

Referenced by Aleph::FFT< Real >::satisfies_cola(), and Aleph::FFT< Real >::satisfies_nola().

◆ windowed_spectrum() [1/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::windowed_spectrum ( const Array< Complex > &  signal,
const Array< Real > &  window 
)
inlinestatic

Returns the FFT of a complex signal after applying a window.

Definition at line 9487 of file fft.H.

References Aleph::FFT< Real >::apply_window(), and Aleph::FFT< Real >::spectrum().

◆ windowed_spectrum() [2/4]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::windowed_spectrum ( const Array< Real > &  signal,
const Array< Real > &  window 
)
inlinestatic

Returns the FFT of a real signal after applying a window.

Definition at line 9480 of file fft.H.

References Aleph::FFT< Real >::apply_window(), and Aleph::FFT< Real >::spectrum().

Referenced by Aleph::FFT< Real >::windowed_spectrum().

◆ windowed_spectrum() [3/4]

template<std::floating_point Real = double>
and static Is_Real_Container< WindowContainer > Array< Complex > Aleph::FFT< Real >::windowed_spectrum ( const SignalContainer signal,
const WindowContainer window 
)
inlinestatic

◆ windowed_spectrum() [4/4]

◆ zero_pad_edges()

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::zero_pad_edges ( const Array< Real > &  signal,
const size_t  left_pad,
const size_t  right_pad 
)
inlinestaticprivate

functional zero-padding at both ends.

Definition at line 592 of file fft.H.

References Aleph::divide_and_conquer_partition_dp(), output, Aleph::Array< T >::reserve(), and Aleph::Array< T >::size().

Referenced by Aleph::FFT< Real >::stft_impl().

◆ zero_padded_copy() [1/2]

◆ zero_padded_copy() [2/2]

template<std::floating_point Real = double>
static Array< Real > Aleph::FFT< Real >::zero_padded_copy ( const Array< Real > &  input,
const size_t  n 
)
inlinestaticprivate

Returns a copy of input zero-padded to size n.

Definition at line 4992 of file fft.H.

References ah_invalid_argument_if, Aleph::divide_and_conquer_partition_dp(), output, Aleph::Array< T >::reserve(), and Aleph::Array< T >::size().

◆ zeros() [1/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::zeros ( const Array< BiquadSection > &  sections)
inlinestatic

◆ zeros() [2/6]

◆ zeros() [3/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::zeros ( const BiquadSection section)
inlinestatic

Definition at line 12269 of file fft.H.

References section(), and Aleph::FFT< Real >::zeros().

◆ zeros() [4/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::zeros ( const Container numerator)
inlinestatic

Definition at line 12301 of file fft.H.

References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::zeros().

◆ zeros() [5/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::zeros ( const IIRCoefficients coeffs)
inlinestatic

◆ zeros() [6/6]

template<std::floating_point Real = double>
static Array< Complex > Aleph::FFT< Real >::zeros ( const SectionsContainer sections)
inlinestatic

Member Data Documentation

◆ Is_Biquad_Container

template<std::floating_point Real = double>
template<typename Container >
constexpr bool Aleph::FFT< Real >::Is_Biquad_Container
staticconstexprprivate
Initial value:
= requires(const Container & c)
{
std::begin(c);
std::end(c);
requires std::convertible_to<std::remove_cvref_t<decltype(*std::begin(c))>,
BiquadSection>;
}

Definition at line 377 of file fft.H.

◆ Is_Complex_Container

template<std::floating_point Real = double>
template<typename Container >
constexpr bool Aleph::FFT< Real >::Is_Complex_Container
staticconstexprprivate
Initial value:
= requires(const Container & c)
{
std::begin(c);
std::end(c);
requires Is_Std_Complex<std::remove_cvref_t<decltype(*std::begin(c))>>::value;
}

Definition at line 360 of file fft.H.

◆ Is_Real_Batch_Container

template<std::floating_point Real = double>
template<typename Container >
constexpr bool Aleph::FFT< Real >::Is_Real_Batch_Container
staticconstexprprivate
Initial value:
= requires(const Container & c)
{
std::begin(c);
std::end(c);
requires Is_Real_Container<std::remove_cvref_t<decltype(*std::begin(c))>>;
}
static constexpr bool Is_Real_Container
Definition fft.H:368

Definition at line 386 of file fft.H.

◆ Is_Real_Container

template<std::floating_point Real = double>
template<typename Container >
constexpr bool Aleph::FFT< Real >::Is_Real_Container
staticconstexprprivate
Initial value:
= requires(const Container & c)
{
std::begin(c);
std::end(c);
requires std::convertible_to<decltype(*std::begin(c)), Real>;
requires not Is_Std_Complex<std::remove_cvref_t<decltype(*std::begin(c))>>::value;
}
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.

Definition at line 368 of file fft.H.

◆ twiddle_refresh_period

template<std::floating_point Real = double>
constexpr size_t Aleph::FFT< Real >::twiddle_refresh_period = 32
staticconstexprprivate

Definition at line 393 of file fft.H.

Referenced by Aleph::FFT< Real >::transform_impl().


The documentation for this class was generated from the following file: