FIR convolution¶
FirConvolver copies 1..=65,536 finite impulse taps and allocates a history ring
during construction. Its f64 direct convolution has zero algorithmic block
latency and an impulse-length-minus-one tail. Processing cost is O(taps) per
sample: this is suitable for short responses and does not establish a deadline
for the maximum size. Response replacement requires re-preparation; no live
crossfade is supplied. Tests compare an independent
finite convolution sum and verify reset/partition continuity.
PartitionedConvolver supplies a separate uniform overlap-add FFT engine for
1..=262,144 finite f64 taps. A power-of-two partition of 16..=4,096 samples sets
the exact algorithmic latency; caller block sizes can vary freely. Each boundary
transforms the new input, sums delayed input spectra against response partitions,
and combines inverse-transform output with the previous overlap. Feed zeros to
flush the declared tail of latency plus taps minus one. Reset clears every
history buffer while retaining the prepared response. Preparation owns the
response spectra, input spectrum ring and scratch; processing/reset allocate
nothing. Work is concentrated at partition boundaries, with no deadline claim,
zero-latency head, nonuniform partitioning, crossfade or automatic worker setup.
Tests compare against independent direct sums, exercise arbitrary caller blocks,
maximum-length delayed impulses, reset and heap instrumentation. See
decision 0031.