# [music-dsp] Re: Revisiting C++ Filtering Classes

Martin Eisenberg martin.eisenberg at udo.edu
Wed Jun 3 09:31:23 EDT 2009

```Vinnie wrote:

> Here is the low pass to band pass transform:
>
> s = f(z) = ( 1 - 2*c*z[-1] + z[-2] ) / ( 1 - z[-2] )
>
> What the heck is z[-2]?

It means z^(-2) = 1/z^2. Does your reference really write it like
that?

> What is z?

It's discrete-time complex frequency, the discrete-time transfer
function's independent variable. It's also the transfer function
of the time-domain operator that advances a sequence by one one
position, so z^(-1) corresponds to a unit delay.

> But now I am lost, how do I take
>
> s = f(z) = ( 1 - 2*c*z[-1] + z[-2] ) / ( 1 - z[-2] )
>
> and use it to transform the same s-pole to get the bandpass
> pole?

Augment the right-hand fraction by z^2 giving polynomials in z,
move the denominator over to the left, and solve the resulting
quadratic equation for z as a function of s (and c). Evaluate
both solutions at each s-domain root to get the set of z-domain
roots. That is, each s-plane pole gives rise to two z-plane
poles. Also, you can check that conjugating the input s
conjugates each z solution too, so that mapping just one member
of each s-plane conjugate pair is enough.

Martin

```