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

Uniform partitioned FIR convolver for low-latency streaming. More...

#include <fft.H>

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

Public Member Functions

 PartitionedConvolver (const Array< Real > &kernel, const size_t partition_size=0)
 
size_t partition_size () const noexcept
 
size_t fft_size () const noexcept
 
const Array< Real > & kernel () const noexcept
 
void reset ()
 
Array< Realprocess_block (const Array< Real > &block)
 
Array< Realflush ()
 
Array< Realconvolve (const Array< Real > &signal)
 
template<typename Container >
requires Is_Real_Container<Container>
Array< Realprocess_block (const Container &block)
 
template<typename Container >
requires Is_Real_Container<Container>
Array< Realconvolve (const Container &signal)
 

Private Member Functions

void clear_state ()
 Rationale: Resets all delay-line history and overlap buffers.
 
Array< Complexzero_spectrum () const
 implementation helper for creating zero-filled complex spectra.
 
Array< Realpadded_partition (const Array< Real > &chunk) const
 implementation helper for preparing a padded partition.
 
Array< Realprocess_partition_impl (const Array< Real > &chunk)
 Rationale: Implements the core frequency-domain partitioned convolution logic:
 

Static Private Member Functions

static size_t default_partition_size (const size_t kernel_size)
 Rationale: Selects a partition size that minimizes latency while maintaining FFT efficiency (capped at 256 for low-latency).
 

Private Attributes

Array< Realkernel_
 
size_t partition_size_ = 0
 
size_t fft_size_ = 0
 
Plan plan_
 
Array< Array< Complex > > kernel_partitions_
 
Array< Array< Complex > > input_history_
 
size_t head_ = 0
 
Array< Realoverlap_
 
Array< Realpending_
 
size_t total_input_size_ = 0
 
size_t emitted_output_size_ = 0
 

Detailed Description

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

Uniform partitioned FIR convolver for low-latency streaming.

The partition size controls algorithmic latency directly: each processed partition emits that many time-domain samples.

Definition at line 14804 of file fft.H.

Constructor & Destructor Documentation

◆ PartitionedConvolver()

Member Function Documentation

◆ clear_state()

◆ convolve() [1/2]

◆ convolve() [2/2]

template<std::floating_point Real = double>
Array< Real > Aleph::FFT< Real >::PartitionedConvolver::convolve ( const Container signal)
inline

◆ default_partition_size()

template<std::floating_point Real = double>
static size_t Aleph::FFT< Real >::PartitionedConvolver::default_partition_size ( const size_t  kernel_size)
inlinestaticprivate

Rationale: Selects a partition size that minimizes latency while maintaining FFT efficiency (capped at 256 for low-latency).

Definition at line 14822 of file fft.H.

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

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

◆ fft_size()

template<std::floating_point Real = double>
size_t Aleph::FFT< Real >::PartitionedConvolver::fft_size ( ) const
inlinenoexcept

Definition at line 14950 of file fft.H.

References Aleph::FFT< Real >::PartitionedConvolver::fft_size_.

◆ flush()

◆ kernel()

template<std::floating_point Real = double>
const Array< Real > & Aleph::FFT< Real >::PartitionedConvolver::kernel ( ) const
inlinenoexcept

Definition at line 14955 of file fft.H.

References Aleph::FFT< Real >::PartitionedConvolver::kernel_.

◆ padded_partition()

template<std::floating_point Real = double>
Array< Real > Aleph::FFT< Real >::PartitionedConvolver::padded_partition ( const Array< Real > &  chunk) const
inlineprivate

◆ partition_size()

template<std::floating_point Real = double>
size_t Aleph::FFT< Real >::PartitionedConvolver::partition_size ( ) const
inlinenoexcept

◆ process_block() [1/2]

◆ process_block() [2/2]

template<std::floating_point Real = double>
Array< Real > Aleph::FFT< Real >::PartitionedConvolver::process_block ( const Container block)
inline

◆ process_partition_impl()

◆ reset()

template<std::floating_point Real = double>
void Aleph::FFT< Real >::PartitionedConvolver::reset ( )
inline

◆ zero_spectrum()

template<std::floating_point Real = double>
Array< Complex > Aleph::FFT< Real >::PartitionedConvolver::zero_spectrum ( ) const
inlineprivate

Member Data Documentation

◆ emitted_output_size_

template<std::floating_point Real = double>
size_t Aleph::FFT< Real >::PartitionedConvolver::emitted_output_size_ = 0
private

◆ fft_size_

◆ head_

template<std::floating_point Real = double>
size_t Aleph::FFT< Real >::PartitionedConvolver::head_ = 0
private

◆ input_history_

template<std::floating_point Real = double>
Array<Array<Complex> > Aleph::FFT< Real >::PartitionedConvolver::input_history_
private

◆ kernel_

template<std::floating_point Real = double>
Array<Real> Aleph::FFT< Real >::PartitionedConvolver::kernel_
private

◆ kernel_partitions_

template<std::floating_point Real = double>
Array<Array<Complex> > Aleph::FFT< Real >::PartitionedConvolver::kernel_partitions_
private

◆ overlap_

template<std::floating_point Real = double>
Array<Real> Aleph::FFT< Real >::PartitionedConvolver::overlap_
private

◆ partition_size_

◆ pending_

template<std::floating_point Real = double>
Array<Real> Aleph::FFT< Real >::PartitionedConvolver::pending_
private

◆ plan_

template<std::floating_point Real = double>
Plan Aleph::FFT< Real >::PartitionedConvolver::plan_
private

◆ total_input_size_

template<std::floating_point Real = double>
size_t Aleph::FFT< Real >::PartitionedConvolver::total_input_size_ = 0
private

The documentation for this class was generated from the following file: