A collection of various digital filters I’ve designed as they were needed for other projects.
As part of my LF/VLF experiments, I wanted a narrowband 60 kHz filter for receiving the time broadcast by NIST on station WWVB. The bandwidth needed is minimal, as basic time information is only transmitted at 1 bps, so the narrower the filter, the better. I first considered a filter based on the Goertzel algorithm, but set it aside due to its instability and instead decided to use a matched filter.
What I want to share here is not the matched filter itself, as there’s nothing special about that, but rather how it will be implemented. Given my system parameters - 60 kHz filter with a 3 MHz sampling frequency - a straightforward FIR matched filter of only one period in length would require 50 complex-coefficient taps. Using real-valued coefficients, either the sine or cosine rather than
These two equations give the formula for the FIR filter using the z-transform. This could be directly and inefficiently implemented as a 50-tap delay line and 50 multipliers. Examining
We can therefore rewrite the filter more efficiently, as follows.
The first
12 multipliers, 24 two-term adders, and 61 delay elements to implement a full-speed 50-tap filter, as opposed to 50 multipliers, 49 delay elements and 1 fifty-term adder for the naïve implementation. The naïve implementation has less fan-out into the multipliers, but a significantly longer critical path through the final adder.
A single-period matched sine filter will not be narrow enough for WWVB reception. As you can see in the figure below, the single period filter, green, has a 60 kHz bandwidth. Increasing the number of periods will narrow the filter and is best done with a second filter, either a FIR filter such as
The IIR filter results in a sharper filter for a given
Last updated on 2014-09-21, fixed typos in equations
Written with StackEdit using markdown.css, google-code-prettify and MathJax.