[Fpga-synth] Simple Filter Question

Magnus Danielson magnus at rubidium.dyndns.org
Tue Jun 19 00:37:39 CEST 2007


From: Scott Gravenhorst <music.maker at gte.net>
Subject: [Fpga-synth] Simple Filter Question
Date: Mon, 18 Jun 2007 13:35:14 -0700
Message-ID: <200706182035.l5IKZEcr003383 at linux7.lan>

Hi Scott,

> The terrormouse PDF specifies that the filter used at the end of the delay
> line is a "simple first order IIR".  It then gives this to describe it:
> 
>                        -1
>        0.8995 + 0.1087z
> H(z) = ------------------
>                      -1
>           1 + 0.0136z
> 
> >From what I understand, this makes:
> 
> a0 = 0.8995      a1 = 0.1087
>                  b1 = -0.0136
> 
> There was no explanation for the values chosen except that they "sound like
> an acoustic guitar string".  
> 
> What I don't understand is that this matches neither a first order lowpass
> nor highpass.  Lowpass should have only a0 and b1 terms and highpass has a1
> = - a0 (at least).
> 
> I am assuming this is supposed to be a lowpass filter of some kind.
> 
> When I did my testing, I used the first order lowpass as described at
> www.dspguide.com, in the recursive filters PDF.  It's not the same filter,
> but it works.
> 
> A resource that explains this would be most appreciated ... ?

Will the list-admin do?

Hmm...

       0.8995 z + 0.1087
H(z) = -----------------
         z + 0.0136

z_z = -0.1087/0.8995 = -0.1208
z_p = -0.0136

i.e.

              z + 0.1208
H(z) = 0.8995 ----------
              z + 0.0136

Now, what is this creature? Plot the pole and zero in the z-plane

            
         ^ jw
         |
         |         _
         |        o
---o---x-+-------->
         |
         |
         |

This is a clear case of a low-pass filter.

For low frequency (i.e. z = 1) the pole is nearer than the zero, so the pole
dominates and the gain for this case is 0.9947 (insert z = 1 in H(z)).
As you move along the unit circle you come closer to the zero and at the
Nyquist frequency (i.e. z = -1) the zero dominates and the gain is 0.8017
(insert z = -1 in H(z)). This is similar to a shelving filter.
Midways we have a gain of 0.9125 (insert z = j in H(z) and take absolute
value of complex value) at half the Nyquist frequency.

You can view this as a shelving filter. which lowers the high frequency with
about -1.9 dB.

Did that make any sense?

Cheers,
Magnus


More information about the Fpga-synth mailing list