|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Reusable overlap-save convolver for streaming real FIR filtering. More...
#include <fft.H>
Public Member Functions | |
| OverlapSave (const Array< Real > &kernel, const size_t block_size=0) | |
| size_t | block_size () const noexcept |
| Returns the processing block size (the hop size). | |
| size_t | fft_size () const noexcept |
| Returns the FFT size used internally (block_size + kernel_size - 1 padded to power of 2). | |
| const Array< Real > & | kernel () const noexcept |
| Returns the current FIR kernel. | |
| size_t | overlap_size () const noexcept |
| Returns the internal overlap history size. | |
| void | reset () |
| Resets the internal filter state and history. | |
| Array< Real > | process_block (const Array< Real > &block) |
| Processes an input block and returns the corresponding filtered output. | |
| Array< Real > | flush () |
| Flushes all buffered samples and returns the final tail of the convolution. | |
| Array< Real > | convolve (const Array< Real > &signal) |
| Convolves the input signal with the kernel (one-shot convenience). | |
| template<typename Container > requires Is_Real_Container<Container> | |
| Array< Real > | process_block (const Container &block) |
| Processes an input block from a real-valued container. | |
| template<typename Container > requires Is_Real_Container<Container> | |
| Array< Real > | convolve (const Container &signal) |
| Convolves an input signal from a real-valued container. | |
Private Member Functions | |
| void | clear_history () |
| Rationale: Resets the state for a new filtering process. | |
| void | update_history (const Array< Real > &padded_chunk) |
| Rationale: Maintains the sliding window of historical samples required to correctly compute the linear convolution prefix of the next block. | |
| Array< Complex > | build_segment_spectrum (const Array< Real > &chunk) const |
| Rationale: Prepares a frequency-domain segment by combining historical samples with the current signal chunk. | |
| Array< Real > | padded_chunk_copy (const Array< Real > &chunk) const |
| Internal helper for zero-padding chunks. | |
| Array< Real > | process_chunk_impl (const Array< Real > &chunk) |
| Rationale: Implements the core Overlap-Save logic for one block: | |
Static Private Member Functions | |
| static size_t | default_block_size (const size_t kernel_size) |
| Rationale: Heuristic for choosing a block size that provides a good balance between algorithmic latency and FFT efficiency. | |
Private Attributes | |
| Array< Real > | kernel_ |
| size_t | block_size_ = 0 |
| size_t | fft_size_ = 0 |
| Plan | plan_ |
| Array< Complex > | kernel_spectrum_ |
| Array< Real > | history_ |
| Array< Real > | pending_ |
| size_t | total_input_size_ = 0 |
| size_t | emitted_output_size_ = 0 |
Reusable overlap-save convolver for streaming real FIR filtering.
The configured block size controls both algorithmic latency and the number of valid samples emitted per internal FFT block.
|
inlineexplicit |
Definition at line 14650 of file fft.H.
References ah_invalid_argument_if, Aleph::FFT< Real >::OverlapSave::block_size(), Aleph::FFT< Real >::OverlapSave::block_size_, Aleph::FFT< Real >::OverlapSave::clear_history(), Aleph::Array< T >::create(), Aleph::FFT< Real >::OverlapSave::default_block_size(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::OverlapSave::fft_size_, Aleph::FFT< Real >::OverlapSave::history_, Aleph::Array< T >::is_empty(), Aleph::FFT< Real >::OverlapSave::kernel_, Aleph::FFT< Real >::OverlapSave::kernel_spectrum_, Aleph::FFT< Real >::next_power_of_two(), Aleph::FFT< Real >::OverlapSave::plan_, Aleph::Array< T >::size(), and Aleph::FFT< Real >::Plan::transform().
|
inlinenoexcept |
Returns the processing block size (the hop size).
Definition at line 14680 of file fft.H.
References Aleph::FFT< Real >::OverlapSave::block_size_.
Referenced by Aleph::FFT< Real >::OverlapSave::OverlapSave().
|
inlineprivate |
Rationale: Prepares a frequency-domain segment by combining historical samples with the current signal chunk.
Definition at line 14586 of file fft.H.
References ah_invalid_argument_if, Aleph::FFT< Real >::OverlapSave::block_size_, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::OverlapSave::fft_size_, Aleph::FFT< Real >::OverlapSave::history_, and Aleph::Array< T >::size().
|
inlineprivate |
Rationale: Resets the state for a new filtering process.
Definition at line 14549 of file fft.H.
References Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::OverlapSave::history_, and Aleph::Array< T >::size().
Referenced by Aleph::FFT< Real >::OverlapSave::OverlapSave(), and Aleph::FFT< Real >::OverlapSave::reset().
|
inline |
Convolves the input signal with the kernel (one-shot convenience).
Definition at line 14772 of file fft.H.
References Aleph::FFT< Real >::append_all(), Aleph::FFT< Real >::OverlapSave::flush(), output, Aleph::FFT< Real >::OverlapSave::process_block(), and Aleph::FFT< Real >::OverlapSave::reset().
Referenced by Aleph::FFT< Real >::OverlapSave::convolve(), and Aleph::FFT< Real >::overlap_save_convolution().
|
inline |
Convolves an input signal from a real-valued container.
Definition at line 14793 of file fft.H.
References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::OverlapSave::convolve().
|
inlinestaticprivate |
Rationale: Heuristic for choosing a block size that provides a good balance between algorithmic latency and FFT efficiency.
Definition at line 14539 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 >::OverlapSave::OverlapSave().
|
inlinenoexcept |
Returns the FFT size used internally (block_size + kernel_size - 1 padded to power of 2).
Definition at line 14683 of file fft.H.
References Aleph::FFT< Real >::OverlapSave::fft_size_.
|
inline |
Flushes all buffered samples and returns the final tail of the convolution.
Zero-padding is applied to complete the final processing block if necessary. The filter is reset after flushing.
Definition at line 14738 of file fft.H.
References Aleph::FFT< Real >::append_all(), Aleph::FFT< Real >::OverlapSave::block_size_, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::OverlapSave::emitted_output_size_, Aleph::Array< T >::is_empty(), Aleph::FFT< Real >::OverlapSave::kernel_, output, Aleph::FFT< Real >::OverlapSave::pending_, Aleph::FFT< Real >::OverlapSave::process_chunk_impl(), Aleph::FFT< Real >::OverlapSave::reset(), Aleph::Array< T >::size(), Aleph::FFT< Real >::slice_copy(), Aleph::FFT< Real >::OverlapSave::total_input_size_, and Aleph::FFT< Real >::zeros().
Referenced by Aleph::FFT< Real >::OverlapSave::convolve().
|
inlinenoexcept |
Returns the current FIR kernel.
Definition at line 14686 of file fft.H.
References Aleph::FFT< Real >::OverlapSave::kernel_.
|
inlinenoexcept |
Returns the internal overlap history size.
Definition at line 14689 of file fft.H.
References Aleph::FFT< Real >::OverlapSave::history_, and Aleph::Array< T >::size().
|
inlineprivate |
Internal helper for zero-padding chunks.
Definition at line 14608 of file fft.H.
References Aleph::FFT< Real >::OverlapSave::block_size_, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), and Aleph::Array< T >::size().
Referenced by Aleph::FFT< Real >::OverlapSave::process_chunk_impl().
|
inline |
Processes an input block and returns the corresponding filtered output.
Input samples are buffered until a full block is available. Multiple blocks might be emitted if the input is large.
| block | Input signal block. |
Definition at line 14709 of file fft.H.
References Aleph::FFT< Real >::append_all(), Aleph::FFT< Real >::OverlapSave::block_size_, Aleph::divide_and_conquer_partition_dp(), Aleph::Array< T >::is_empty(), Aleph::FFT< Real >::OverlapSave::pending_, Aleph::FFT< Real >::OverlapSave::process_chunk_impl(), Aleph::Array< T >::size(), Aleph::FFT< Real >::slice_copy(), and Aleph::FFT< Real >::OverlapSave::total_input_size_.
Referenced by Aleph::FFT< Real >::OverlapSave::convolve(), and Aleph::FFT< Real >::OverlapSave::process_block().
|
inline |
Processes an input block from a real-valued container.
Definition at line 14784 of file fft.H.
References Aleph::FFT< Real >::build_real_input(), and Aleph::FFT< Real >::OverlapSave::process_block().
|
inlineprivate |
Rationale: Implements the core Overlap-Save logic for one block:
Definition at line 14625 of file fft.H.
References Aleph::FFT< Real >::OverlapSave::block_size_, Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::OverlapSave::emitted_output_size_, Aleph::FFT< Real >::OverlapSave::fft_size_, Aleph::FFT< Real >::OverlapSave::history_, Aleph::FFT< Real >::Plan::inverse_transform_real(), Aleph::Array< T >::is_empty(), Aleph::FFT< Real >::OverlapSave::kernel_, Aleph::FFT< Real >::OverlapSave::kernel_spectrum_, Aleph::FFT< Real >::OverlapSave::padded_chunk_copy(), Aleph::FFT< Real >::OverlapSave::plan_, Aleph::Array< T >::size(), Aleph::FFT< Real >::slice_copy(), Aleph::FFT< Real >::Plan::transform(), and Aleph::FFT< Real >::OverlapSave::update_history().
Referenced by Aleph::FFT< Real >::OverlapSave::flush(), and Aleph::FFT< Real >::OverlapSave::process_block().
|
inline |
Resets the internal filter state and history.
Definition at line 14692 of file fft.H.
References Aleph::FFT< Real >::OverlapSave::clear_history(), Aleph::FFT< Real >::OverlapSave::emitted_output_size_, Aleph::FFT< Real >::OverlapSave::pending_, and Aleph::FFT< Real >::OverlapSave::total_input_size_.
Referenced by Aleph::FFT< Real >::OverlapSave::convolve(), and Aleph::FFT< Real >::OverlapSave::flush().
|
inlineprivate |
Rationale: Maintains the sliding window of historical samples required to correctly compute the linear convolution prefix of the next block.
Definition at line 14560 of file fft.H.
References Aleph::Array< T >::create(), Aleph::divide_and_conquer_partition_dp(), Aleph::FFT< Real >::OverlapSave::history_, Aleph::Array< T >::is_empty(), and Aleph::Array< T >::size().
Referenced by Aleph::FFT< Real >::OverlapSave::process_chunk_impl().
|
private |
Definition at line 14526 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::OverlapSave(), Aleph::FFT< Real >::OverlapSave::block_size(), Aleph::FFT< Real >::OverlapSave::build_segment_spectrum(), Aleph::FFT< Real >::OverlapSave::flush(), Aleph::FFT< Real >::OverlapSave::padded_chunk_copy(), Aleph::FFT< Real >::OverlapSave::process_block(), and Aleph::FFT< Real >::OverlapSave::process_chunk_impl().
|
private |
Definition at line 14533 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::flush(), Aleph::FFT< Real >::OverlapSave::process_chunk_impl(), and Aleph::FFT< Real >::OverlapSave::reset().
|
private |
Definition at line 14527 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::OverlapSave(), Aleph::FFT< Real >::OverlapSave::build_segment_spectrum(), Aleph::FFT< Real >::OverlapSave::fft_size(), and Aleph::FFT< Real >::OverlapSave::process_chunk_impl().
|
private |
Definition at line 14530 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::OverlapSave(), Aleph::FFT< Real >::OverlapSave::build_segment_spectrum(), Aleph::FFT< Real >::OverlapSave::clear_history(), Aleph::FFT< Real >::OverlapSave::overlap_size(), Aleph::FFT< Real >::OverlapSave::process_chunk_impl(), and Aleph::FFT< Real >::OverlapSave::update_history().
|
private |
Definition at line 14525 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::OverlapSave(), Aleph::FFT< Real >::OverlapSave::flush(), Aleph::FFT< Real >::OverlapSave::kernel(), and Aleph::FFT< Real >::OverlapSave::process_chunk_impl().
|
private |
Definition at line 14529 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::OverlapSave(), and Aleph::FFT< Real >::OverlapSave::process_chunk_impl().
|
private |
Definition at line 14531 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::flush(), Aleph::FFT< Real >::OverlapSave::process_block(), and Aleph::FFT< Real >::OverlapSave::reset().
|
private |
Definition at line 14528 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::OverlapSave(), and Aleph::FFT< Real >::OverlapSave::process_chunk_impl().
|
private |
Definition at line 14532 of file fft.H.
Referenced by Aleph::FFT< Real >::OverlapSave::flush(), Aleph::FFT< Real >::OverlapSave::process_block(), and Aleph::FFT< Real >::OverlapSave::reset().