Digital Filters That Approximate Analog Filters.

What Do We Want To Do?

        We are going to assume that we have an analog filter that satisfies a first order differential equation like this differential equation.

t(dVout(t)/dt) + Vout(t) = Vin(t)

In this system, we have:

We assume that the problem we face is that we are taking data, and the data exists inside a computer - as digital numbers - not as voltages.  However, we want to filter the signal - which exists as a voltage outside the computer and as digital numbers inside the computer.  We have a choice. Since we already have the data inside whatever program we are using (something written in LabVIEW, C/C++, Visual Basic, etc.) we would not have to buy the hardware - which will involve components, circuit boards, maybe a power supply, etc. - if we could simulate the filter inside the computer program.  In this note we will examine just how you can do that, and try to determine now accurately you can do that.


Digitizing an Analog Filter

        The problem that we face is that we have a differential equation for the filter, and what we want to do (in the simplest statement of our problem) is to get a numerical solution for that differential equation as the data streams in (as it is acquired by the rest of our program).  For a first order system (the simplest system) we can use the Euler integration algorithm.  (That is the simplest algorithm.  There are more complex - and more accurate - algorithms, but this is - by far - the best place to start.)  The algorithm is pretty simple.

Then, the filter output can be approximately calculated as:

Vout((k + 1)T) = Vout(kT) + T*[(dVout(kT)/dt)]
Vout((k + 1)T) = Vout(kT) + T*[Vin(kT) - Vout(kT)]/t

Notice the following points about this expression:

With a little bit of rearrangement, we have:

Vout((k + 1)T) = Vout(kT)[1 - T/t] + [Vin(kT)]*(T/t)

And, using the terms described above, we have:

Outputk+1 = Outputk[1 - T/t] + Datak[T/t]

So, to get the new computed value of the output (Outputk+1)we just need to remember the old value of the output (Outputk) and the new data (Datak).  And, we also need to know the sampling interval, T, and the time constant, t.


NOTE:  In many cases we would use different terminology for this filter.
        The only problem remaining is to figure out how to write program code that implements the difference equation we have as a result above.


Related Links