# Documentation about filters in general

I already posted this question on StackOverflow. I got a suggestion to go for a better answer here.

To make the question more concise I'm interested in an introduction to digital filters, any resource is good.

But first I will be satisfied if someone could point me to some resources explaining this filter (used in Android):

http://gitorious.org/rowboat/frameworks-base/blobs/671a6ff4be11b3e2d8eb017e0c7a78e6133fb2b8/services/sensorservice/SecondOrderLowPassFilter.cpp

What I'm interested is the way the filter's parameters are chosen. While I can copy it without thinking, I guess I should understand the basic concept/idea behind before using it.

Thanks,

Iulian

-

You can derive the expression for the coefficients by doing bilinear transformation of the following analog low-pass prototype filter

$$H(s) = \frac{w_0^2}{s^2 + (w_0/Q)s + w_0^2}$$

where $w_0$ is the cut-off frequency.

You can lookup the bilinear transformation on Wikipedia.

The filter used in the Android app is a Butterworth filter because the chosen value of Q is $1/\sqrt{2}$. Note that in the constructor the inverse of Q is computed and assigned to variable iQ which is used in the computation of the coefficients. Note also that the variable K holds the 'frequency-warped' value of the specified cut-off frequency. You can find more information about the frequency-warping phenomenon in the above link.

You can find many examples on digital filter design using bilinear transformation. I found this one, which is quite close to the Android example.

-
Thank you. I start remembering math I did in college; unfortunately no one was there to show me also a good practical example or I was concerned with something else... –  Iulian Şerbănoiu Sep 16 '11 at 10:49