More Samples, More Control — FIR Filters
Our first filters used two samples. Now remember four. Each remembered sample becomes a tap, and each tap gets a coefficient: simply a number saying how much that sample contributes.
1. Four taps
↓ ×c0 ↓ ×c1 ↓ ×c2 ↓ ×c3
└────────→ Σ → y[n]
2. Coefficient playground
Simple patterns can be intuitive: 0.5, 0.5 averages neighbouring samples and gives us our simple low-pass, while 0.5, −0.5 takes their difference and gives us our simple high-pass.
With more taps, however, every coefficient interacts with every frequency differently. Small changes can create peaks, dips and notches that are difficult to predict just by looking at the numbers.
This is why practical filters are usually designed the other way around: we describe the frequency response we want, and filter-design mathematics calculates suitable coefficients for us.
Think of the stored samples as a delay line. Each tap simply takes a value from a different point in that stored history.
↓ ↓ ↓ ↓
×c0 ×c1 ×c2 ×c3
Our FIR filter taps are only one sample apart, but taps can also be taken much further back in time. Then the same basic idea becomes a multi-tap delay.
Same idea: look into the past → multiply → add. We'll meet this again in early reflections, reverb and convolution.
3. Hear your filter
4. What have we added?
A point in stored input history.
A multiplier: how much that tap contributes.
Finite Impulse Response. No previous output is fed back here.
Four taps have a longest delay of three samples: a 3rd-order FIR.