Guessing at the discretization, of the Sallen-Key Filter, with Q-Multiplier.

One concept that exists in modern digital signal processing is, that a simple algorithm can often be written, to perform what old-fashioned, analog filters were able to do.

But then, one place where I find lacking progress – at least, where I can find the information posted publicly – is, about how to discretize slightly more complicated analog filters. Specifically, if one wants to design 2nd-order low-pass or high-pass filters, one approach which is often recommended is, just to chain the primitive low-pass or high-pass filters. The problem with that is, the highly damped frequency-response curve that follows, which is evident, in the attenuated voltage gain, at the cutoff frequency itself.

In analog circuitry, a solution to this problem exists in the “Sallen-Key Filter“, which naturally has a gain at the corner frequency of (-6db), which would also result, if two primitive filters were simply chained. But beyond that, the analog filter can be given (positive) feedback gain, in order to increase its Q-factor.

I set out to write some pseudo-code, for how such a filter could also be converted into algorithms…



for i from 1 to n
    Y[i] := ( k * Y[i-1] ) + ((1 - k) * X[i]) + Feedback[i-1]
    Z[i] := ( k * Z[i-1] ) + ((1 - k) * Y[i])
    Feedback[i] := (Z[i] - Z[i-1]) * k * α
    (output Z[i])

for i from 1 to n
    Y[i] := ( k * Y[i-1] ) + ((1 - k) * X[i]) + Feedback[i-1]
    Z[i] := ( k * (Z[i-1] + Y[i] - Y[i-1]) )
    Feedback[i] := Z[i] * (1 - k) * α
    (output Z[i])

for i from 1 to n
    Y[i] := ( k * (Y[i-1] + X[i] - X[i-1]) ) + Feedback[i-1]
    Z[i] := ( k * (Z[i-1] + Y[i] - Y[i-1]) )
    Feedback[i] := Z[i] * (1 - k) * α
    (output Z[i])


k is the constant that defines the corner frequency via ω, And
α is the constant that peaks the Q-factor.

ω = 2 * sin(π * F0 / h)
k = 1 / (1 + ω), F0 < (h / 4)

h   Is the sample-rate.
F0  Is the corner frequency.

To achieve a Q-factor (Q):
α = (2 + (sin^2(π * F0 / h) * 2) - (1 / Q))
'Damping Factor' = (ζ) = 1 / (2 * Q)

Critical Damping:
ζ = 1 / sqrt(2)
Q = 1 / sqrt(2)


(Algorithm Revised 2/08/2021, 23h40. )

(Computation of parameters Revised 2/09/2021, 2h15. )


(Updated 2/10/2021, 18h25… )

Continue reading Guessing at the discretization, of the Sallen-Key Filter, with Q-Multiplier.

Playing with NG-SPICE again, and designing two resonant-circuit bandpass filters.

NG-SPICE is a program designed to simulate circuits. The acronym stands for (Next Generation) Simulation Program, with Integrated Circuit Emphasis. While NG-SPICE is open-source, its cousins such as LT-SPICE and PSpice are proprietary. However, NG-SPICE also uses advanced Mathematical modelling of components and circuits. Sometimes I find it to be an educational toy.

A type of circuit which some people might find interesting, is the IF strip – the Intermediate Frequency stage – of a radio receiver, which receives its signal after the Radio-Frequency signal has been ‘mixed’ with a Local Oscillator, and heterodyned down to the Intermediate Frequencies. And due to modern technology, a final, intermediate frequency of 450kHz can be used both for AM and FM demodulation.

There is a type of resonant circuit that employs capacitors and inductors – i.e., coils, in order to accomplish two things:

  • To act as a bandpass filter, restricting the frequency range,
  • To establish a phase-shift between the incoming carrier wave, and an oscillating, derived wave, that is dependent on the momentary frequency of the carrier wave, so that later in the analog processing of the signal, a phase-discriminator can complete the task of FM demodulation. This task is also referred to as Quadrature Demodulation of an FM carrier.

This type of resonant circuit is also sometimes referred to as a “Tank Circuit”.

In short, I’ve been reinventing the wheel. But I did read an article from elsewhere on the Internet, which inspired me. The subject of that article was, how to design Varactors, which are variable-capacitance diodes, when restricted to only using CMOS transistor-pairs. These diodes would represent a good way to tune circuits and vary the frequency of oscillators, in many types of applications. But I had an application in mind, which this type of varactor would help me solve. The mentioned, “IMOS Varactors” are remarkable because they don’t actually involve any diodes. They involve a way to connect an enhancement-mode P-channel MOSFET, so that the effect of gate-voltage changes on the MOSFET’s gate capacitance, acts as a varactor.


If somebody is designing a tuned circuit using the smallest, most-modern coils, manufactured by high-tech factories, then those coils allow for a high Q-factor to exist, which is a measure of how selective the filter can become, as well as to have good thermal stability, but if they are on a budget, these components will have some amount of tolerance, meaning that in a constant way, each component’s actual inductance value will vary to some degree. This is especially unfortunate since high-quality inductors on a budget, are also unlikely to be tunable. If the inductor in question is of a better sort, that ‘only’ has 5% tolerance, this would mean that with an improperly designed radio tuned to an intended AM frequency of 800kHz, instead, the listener could end up receiving a station at 780kHz, or at 820kHz, just because this one filter’s frequency is off by 5%. Of course, real radios that are designed to any level of satisfaction don’t behave that way.

What can be done, is that in the assembly-process for the radio, some machine calibrates its tuned circuits. But again, a maximal use of the main integrated circuit is assumed, and a minimal expense of external, discrete components is assumed. Here, a trimming potentiometer is a more-affordable way to do, what back in the 1970s and 1980s, tunable inductors would have done. If the assumption was made that for reasons I won’t go in to here, The IC can hold an exact voltage steady, then this voltage can also be applied to varactors internal to the IC, in a way that corrects for whatever amount of error was present in the coil.

Even though today, tunable inductors can be bought in quantity that also offer a Q-factor of 48, those aren’t just more expensive than the fixed variety. In addition, those would be much larger components, measuring maybe ‘half a centimetre’ cubed, and requiring to be soldered in to the circuit-board, while the fixed sort can be much smaller units, soldered onto a circuit-board as a surface-mounted device.

And so, reinventing the wheel in order to educate myself, what I have done was to design two circuits, one of which tunes in to 450kHz with the aid of such monolithic varactors, and the second of which does the same at 10Mhz instead. I’m using transistors that are not the tiniest in existence, but which are still too tiny, for an implementation of these ideas to be attempted with discrete components. Capacitances in picofarads should act as a warning to any reader, not to try this with discrete components. It’s much less-risky financially, just to run some simulations using NG-SPICE…

(Updated 7/27/2019, 12h05 … )

Continue reading Playing with NG-SPICE again, and designing two resonant-circuit bandpass filters.