[LAD] Jack buffer management for block convolution

fons at kokkinizita.net fons at kokkinizita.net
Mon Jun 14 10:16:11 UTC 2010


On Mon, Jun 14, 2010 at 02:17:30PM +1000, Damien Zammit wrote:

> The algorithm I am using is the standard overlap-add method of block
> convolution as defined in Oppenheim and Schafer 1989.  Basically, I take a
> FIR filter of length M taps, zero pad to N=L+M-1 where L is the length of my
> sub-block of convolution. Also zero pad L inputs up to to N, then convolve
> these N inputs with the zero padded filter.
> The first M-1 outputs are added to the last M-1 outputs from the previous
> block, and the output of the current block is truncated to L samples (from
> N).

If the lenght of your filter is M, and the jack period is P,
then in each process callback you have to compute the convolution
of M filter taps and P samples. The result has M + P - 1 samples,
no matter how it is done.

The position of this block of M + P - 1 samples in the output
stream advances by steps of P samples. You need an extra buffer
to store and accumulate the part of each convolution that can't
be output in the current cycle.

Ciao,

-- 
FA

O tu, che porte, correndo si ?
E guerra e morte !



More information about the Linux-audio-dev mailing list