|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Uniform partitioned FIR convolver for low-latency streaming. More...
#include <fft.H>
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< Real > | process_block (const Array< Real > &block) |
| Array< Real > | flush () |
| Array< Real > | convolve (const Array< Real > &signal) |
| template<typename Container > requires Is_Real_Container<Container> | |
| Array< Real > | process_block (const Container &block) |
| template<typename Container > requires Is_Real_Container<Container> | |
| Array< Real > | convolve (const Container &signal) |
Private Member Functions | |
| void | clear_state () |
| Rationale: Resets all delay-line history and overlap buffers. | |
| Array< Complex > | zero_spectrum () const |
| implementation helper for creating zero-filled complex spectra. | |
| Array< Real > | padded_partition (const Array< Real > &chunk) const |
| implementation helper for preparing a padded partition. | |
| Array< Real > | process_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< Real > | kernel_ |
| 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< Real > | overlap_ |
| Array< Real > | pending_ |
| size_t | total_input_size_ = 0 |
| size_t | emitted_output_size_ = 0 |
Uniform partitioned FIR convolver for low-latency streaming.
The partition size controls algorithmic latency directly: each processed partition emits that many time-domain samples.
|
inlineexplicit |
Definition at line 14907 of file fft.H.
References ah_invalid_argument_if, Aleph::FFT< Real >::PartitionedConvolver::clear_state(), Aleph::Array< T >::create(), Aleph::FFT< Real >::PartitionedConvolver::default_partition_size(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::PartitionedConvolver::fft_size_, Aleph::FFT< Real >::PartitionedConvolver::input_history_, Aleph::Array< T >::is_empty(), Aleph::FFT< Real >::PartitionedConvolver::kernel_, Aleph::FFT< Real >::PartitionedConvolver::kernel_partitions_, Aleph::FFT< Real >::next_power_of_two(), offset, Aleph::FFT< Real >::PartitionedConvolver::overlap_, Aleph::partition(), Aleph::FFT< Real >::PartitionedConvolver::partition_size(), Aleph::FFT< Real >::PartitionedConvolver::partition_size_, Aleph::FFT< Real >::PartitionedConvolver::plan_, Aleph::Array< T >::size(), Aleph::FFT< Real >::Plan::transform(), and Aleph::FFT< Real >::PartitionedConvolver::zero_spectrum().
|
inlineprivate |
Rationale: Resets all delay-line history and overlap buffers.
Definition at line 14831 of file fft.H.
References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::PartitionedConvolver::emitted_output_size_, Aleph::FFT< Real >::PartitionedConvolver::head_, Aleph::FFT< Real >::PartitionedConvolver::input_history_, Aleph::FFT< Real >::PartitionedConvolver::overlap_, Aleph::FFT< Real >::PartitionedConvolver::pending_, Aleph::Array< T >::size(), and Aleph::FFT< Real >::PartitionedConvolver::total_input_size_.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), and Aleph::FFT< Real >::PartitionedConvolver::reset().
|
inline |
Definition at line 15021 of file fft.H.
References Aleph::FFT< Real >::append_all(), Aleph::FFT< Real >::PartitionedConvolver::flush(), output, Aleph::FFT< Real >::PartitionedConvolver::process_block(), and Aleph::FFT< Real >::PartitionedConvolver::reset().
Referenced by Aleph::FFT< Real >::PartitionedConvolver::convolve(), and Aleph::FFT< Real >::partitioned_convolution().
|
inline |
Definition at line 15040 of file fft.H.
References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::PartitionedConvolver::convolve().
|
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().
|
inlinenoexcept |
Definition at line 14950 of file fft.H.
References Aleph::FFT< Real >::PartitionedConvolver::fft_size_.
|
inline |
Definition at line 14988 of file fft.H.
References Aleph::FFT< Real >::append_all(), Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::PartitionedConvolver::emitted_output_size_, Aleph::Array< T >::is_empty(), Aleph::FFT< Real >::PartitionedConvolver::kernel_, output, Aleph::FFT< Real >::PartitionedConvolver::partition_size_, Aleph::FFT< Real >::PartitionedConvolver::pending_, Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl(), Aleph::FFT< Real >::PartitionedConvolver::reset(), Aleph::Array< T >::size(), Aleph::FFT< Real >::slice_copy(), Aleph::FFT< Real >::PartitionedConvolver::total_input_size_, and Aleph::FFT< Real >::zeros().
Referenced by Aleph::FFT< Real >::PartitionedConvolver::convolve().
|
inlinenoexcept |
Definition at line 14955 of file fft.H.
References Aleph::FFT< Real >::PartitionedConvolver::kernel_.
|
inlineprivate |
implementation helper for preparing a padded partition.
Definition at line 14856 of file fft.H.
References Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::PartitionedConvolver::partition_size_, and Aleph::Array< T >::size().
Referenced by Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
inlinenoexcept |
Definition at line 14945 of file fft.H.
References Aleph::FFT< Real >::PartitionedConvolver::partition_size_.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver().
|
inline |
Definition at line 14966 of file fft.H.
References Aleph::FFT< Real >::append_all(), Aleph::divide_and_conquer_partition_dp(), Aleph::Array< T >::is_empty(), Aleph::FFT< Real >::PartitionedConvolver::partition_size_, Aleph::FFT< Real >::PartitionedConvolver::pending_, Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl(), Aleph::Array< T >::size(), Aleph::FFT< Real >::slice_copy(), and Aleph::FFT< Real >::PartitionedConvolver::total_input_size_.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::convolve(), and Aleph::FFT< Real >::PartitionedConvolver::process_block().
|
inline |
Definition at line 15032 of file fft.H.
References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::PartitionedConvolver::process_block().
|
inlineprivate |
Rationale: Implements the core frequency-domain partitioned convolution logic:
Definition at line 14872 of file fft.H.
References Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::PartitionedConvolver::emitted_output_size_, Aleph::FFT< Real >::PartitionedConvolver::fft_size_, Aleph::FFT< Real >::PartitionedConvolver::head_, Aleph::FFT< Real >::PartitionedConvolver::input_history_, Aleph::FFT< Real >::Plan::inverse_transform_real(), Aleph::Array< T >::is_empty(), Aleph::FFT< Real >::PartitionedConvolver::kernel_partitions_, Aleph::FFT< Real >::PartitionedConvolver::overlap_, Aleph::FFT< Real >::PartitionedConvolver::padded_partition(), Aleph::FFT< Real >::PartitionedConvolver::partition_size_, Aleph::FFT< Real >::PartitionedConvolver::plan_, Aleph::Array< T >::size(), Aleph::FFT< Real >::Plan::transform(), and Aleph::FFT< Real >::PartitionedConvolver::zero_spectrum().
Referenced by Aleph::FFT< Real >::PartitionedConvolver::flush(), and Aleph::FFT< Real >::PartitionedConvolver::process_block().
|
inline |
Definition at line 14960 of file fft.H.
References Aleph::FFT< Real >::PartitionedConvolver::clear_state().
Referenced by Aleph::FFT< Real >::PartitionedConvolver::convolve(), and Aleph::FFT< Real >::PartitionedConvolver::flush().
|
inlineprivate |
implementation helper for creating zero-filled complex spectra.
Definition at line 14846 of file fft.H.
References Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::PartitionedConvolver::fft_size_, and Aleph::FFT< Real >::spectrum().
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), and Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
private |
Definition at line 14816 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::clear_state(), Aleph::FFT< Real >::PartitionedConvolver::flush(), and Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
private |
Definition at line 14808 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), Aleph::FFT< Real >::PartitionedConvolver::fft_size(), Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl(), and Aleph::FFT< Real >::PartitionedConvolver::zero_spectrum().
|
private |
Definition at line 14812 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::clear_state(), and Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
private |
Definition at line 14811 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), Aleph::FFT< Real >::PartitionedConvolver::clear_state(), and Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
private |
Definition at line 14806 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), Aleph::FFT< Real >::PartitionedConvolver::flush(), and Aleph::FFT< Real >::PartitionedConvolver::kernel().
|
private |
Definition at line 14810 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), and Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
private |
Definition at line 14813 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), Aleph::FFT< Real >::PartitionedConvolver::clear_state(), and Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
private |
Definition at line 14807 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), Aleph::FFT< Real >::PartitionedConvolver::flush(), Aleph::FFT< Real >::PartitionedConvolver::padded_partition(), Aleph::FFT< Real >::PartitionedConvolver::partition_size(), Aleph::FFT< Real >::PartitionedConvolver::process_block(), and Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
private |
Definition at line 14814 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::clear_state(), Aleph::FFT< Real >::PartitionedConvolver::flush(), and Aleph::FFT< Real >::PartitionedConvolver::process_block().
|
private |
Definition at line 14809 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::PartitionedConvolver(), and Aleph::FFT< Real >::PartitionedConvolver::process_partition_impl().
|
private |
Definition at line 14815 of file fft.H.
Referenced by Aleph::FFT< Real >::PartitionedConvolver::clear_state(), Aleph::FFT< Real >::PartitionedConvolver::flush(), and Aleph::FFT< Real >::PartitionedConvolver::process_block().