8 kHz peaking eq
Boosts or cuts a band around f0 and leaves both ends of the spectrum at unity. Solved at 6 sample rates, with the poles, the real −3 dB point and the word length it stops working at.
Magnitude response at 48 kHz
Every vertex is 20·log₁₀|H(ejω)| evaluated on the unit circle — not a sketch of the filter's shape. The faint traces behind it are the same corner at every Q in the sweep below.
Gain at f0 (8 kHz)
+6.00 dB
exact at every sample rate — the bilinear transform maps this value, not just the frequency
Pole radius at 48 kHz
0.7285256
conjugate pair at ±58.31°, 0.271 from the circle
−3 dB point
5226.8 Hz
0.653× f0 at Q = 1.0000
16-bit fixed point
holds
largest pole 0.7285340 in Q1.14
Coefficients, at every sample rate
The cookbook computes w₀ = 2πf₀/Fs, so the same filter is a different set of numbers at every rate. Rates whose Nyquist limit is at or below 8 kHz are absent because the filter does not exist there — equivalently, the f₀/Nyquist column never reaches 100%. That is why this table is 6 rows and a 20 Hz page is 8.
| Sample rate | b0 | b1 | b2 | a1 | a2 | Pole r | f₀/Nyquist |
|---|---|---|---|---|---|---|---|
| 22.1 kHz | 1.210796 | 1.026137 | 0.365606 | 1.026137 | 0.576402 | 0.759211 | 72.6% |
| 32 kHz | 1.260194 | -0.000000 | 0.216940 | -0.000000 | 0.477134 | 0.690749 | 50.0% |
| 44.1 kHz | 1.242190 | -0.632217 | 0.271123 | -0.632217 | 0.513314 | 0.716459 | 36.3% |
| 48 kHz | 1.233514 | -0.765375 | 0.297236 | -0.765375 | 0.530749 | 0.728526 | 33.3% |
| 96 kHz | 1.149660 | -1.471598 | 0.549595 | -1.471598 | 0.699255 | 0.836215 | 16.7% |
| 192 kHz | 1.083528 | -1.769719 | 0.748619 | -1.769719 | 0.832148 | 0.912221 | 8.3% |
const float b0 = 1.23351368f, b1 = -0.76537474f, b2 = 0.29723581f;
const float a1 = -0.76537474f, a2 = 0.53074948f; // a0 == 1What word length this filter survives
The fixed-point rows round all five coefficients to one shared scale, which is what a q15/q31 biquad section does with its post-shift.Pole radius is solved from the quadratic, not taken as √|a₂| — once rounding pushes the poles onto the real axis those two disagree, and the convenient one reports a comfortable margin on a filter that has already left the unit circle. Error is the worst deviation from float64 across frequencies where the response is within 40 dB of its own peak; below that it is measuring the −200 dB floor.
| Word format | Q format | Largest pole | √|a₂| says | Stable | Worst error in band |
|---|---|---|---|---|---|
| float64 | — | 0.7285256 | 0.7285256 | yes | reference |
| float32 | — | 0.7285256 | 0.7285256 | yes | 0.0000 dB |
| 32-bit fixed | Q1.30 | 0.7285256 | 0.7285256 | yes | 0.0000 dB |
| 24-bit fixed | Q1.22 | 0.7285256 | 0.7285256 | yes | 0.0000 dB |
| 16-bit fixed | Q1.14 | 0.7285340 | 0.7285340 | yes | 0.0002 dB |
What Q does at 8 kHz
f₀ does not move with Q — the −3 dB point does. They are the same frequency only at Q = 1/√2, which is why a Butterworth corner is the one people quote and why every other Q surprises somebody.
| Q | At f₀ | Peak | −3 dB | Pole r | Group delay at f₀ |
|---|---|---|---|---|---|
| 0.5 | +6.00 dB | +6.00 dB @ 7.93 kHz | 14511 Hz | 0.489744 | 0.017 ms |
| 0.7071 | +6.00 dB | +6.00 dB @ 7.93 kHz | 12850 Hz | 0.628618 | 0.024 ms |
| 1 | +6.00 dB | +6.00 dB @ 7.93 kHz | 11496 Hz | 0.728526 | 0.034 ms |
| 2 | +6.00 dB | +5.99 dB @ 7.93 kHz | 9742 Hz | 0.856850 | 0.068 ms |
| 4 | +6.00 dB | +5.96 dB @ 7.93 kHz | 8866 Hz | 0.926086 | 0.136 ms |
| 10 | +6.00 dB | +5.73 dB @ 7.93 kHz | 8369 Hz | 0.969801 | 0.339 ms |
What gain does at 8 kHz
A peaking filter puts its full gain at f₀ and returns to unity at both ends of the spectrum.
| Gain | At f₀ | b0 | a1 | a2 | Pole r |
|---|---|---|---|---|---|
| -12 dB | −12.00 dB | 0.652917 | -0.536488 | 0.072976 | 0.270141 |
| -6 dB | −6.00 dB | 0.810692 | -0.620483 | 0.240967 | 0.490884 |
| -3 dB | −3.00 dB | 0.900767 | -0.660224 | 0.320449 | 0.566082 |
| +3 dB | +3.00 dB | 1.110165 | -0.732958 | 0.465916 | 0.682580 |
| +6 dB | +6.00 dB | 1.233514 | -0.765375 | 0.530749 | 0.728526 |
| +12 dB | +12.00 dB | 1.531588 | -0.821679 | 0.643358 | 0.802096 |
Questions this filter answers
What are the biquad coefficients for a 8 kHz peaking EQ filter at 48 kHz?
b0 = 1.233514, b1 = -0.765375, b2 = 0.297236, a1 = -0.765375, a2 = 0.530749, with a0 normalised to 1 — the RBJ Audio EQ Cookbook form at Q = 1.0000 and +6 dB of gain. Every other sample rate in the table above gives different numbers for the same filter, because w0 = 2πf0/Fs and every cosine and sine downstream of it moves.
Is a 8 kHz peaking EQ filter stable in 16-bit fixed point?
Yes. Rounding the five coefficients to a shared 1.14 scale leaves the largest pole at 0.7285340, against 0.7285256 exact, and the response drifts by at most 0.000 dB inside the band. 24-bit takes that to 0.0000 dB.
Where is the real −3 dB point of a 8 kHz peaking EQ filter?
5226.8 Hz, which is 0.653× the 8 kHz corner. f0 and the −3 dB point are the same frequency only at Q = 1/√2; this page is designed at Q = 1.0000, and the Q sweep above shows the point moving from 14511.0 Hz to 8369.0 Hz across the sweep while f0 never moves.
How close to the unit circle are the poles of a 8 kHz peaking EQ filter?
0.7285256 at 48 kHz, as a conjugate pair at ±58.31°. Pole radius rises toward 1 as the corner frequency falls relative to the sample rate — the same filter at 192 kHz sits at 0.9122214 and at 8 kHz it is above Nyquist. That distance is the whole story of the fixed-point table: a pole a few parts in 10⁵ from the circle has nowhere to be rounded to.
The neighbouring corners
One third-octave either side, and the same 8 kHz corner as every other filter type.
Method and limits. Coefficients follow the RBJ Audio EQ Cookbook, the bilinear transform of the analog prototype prewarped so the corner lands exactly on f0 — which is why +6.00 dB at 8 kHz holds at every sample rate in the table rather than only at low f0/Fs. Shelves fix the slope at S = 1, matching Web Audio's BiquadFilterNode, so Q is not read for those two types. Pole and zero radii are the roots of the quadratic, not sqrt(|a2|). The fixed-point rows model a single shared coefficient scale and no other quantisation: they say nothing about signal-path headroom, limit cycles or the accumulator width your implementation uses, all of which can make a filter that passes this table still misbehave. Nothing on this page is fetched or estimated — it is solved from the type and the frequency in the URL.