ΣSigmaStudio Ask AI Русский Log in

Cascaded filter calculations clarification

SigmaDSP & SigmaStudio TFernandez104 Jan 23, 2020 00:00 3 replies Original on forum ↗
Subscribe
TFernandez104 Question
Jan 23, 2020 00:00

Hi,

I am looking for a quick clarification on how to calculate the frequency response of a given crossover filter. I have been using the FilterMathCalculations.pdf (attached) to calculate my coefficients, so far so good, but when it comes to cascading several filters together the document says things like "Butterworth 18 dB/oct = One Higher order butterworth + One 1st Order".

It was my understanding that to cascade filters together you multiply the H values of each filter together to get the overall cascaded filter H. Then just convert it to dB by 20*log10(H.abs())

Is this correct?

PDF

1.72.png-185x240x2.png
1.72.png-185x240x2.png
TFernandez104 Reply
Jan 24, 2020 00:00

Okay, thinking about it a bit more, does "One Higher order butterworth + One 1st Order" mean that the two filters are in parallel rather than series and thus summed rather than using their product?

I think the document was produced by ADI which is why I'm asking here. The summed response looks far closer to what I am expecting.

KJBob Reply
Jan 25, 2020 00:00

Hello,

The 3rd order Butterworth filter is cascaded 2nd order and 1st-order stages, so it appears your first thought is correct. The 2nd-order filter provides a 12 dB/octave slope, the first-order yields 6 dB/octave, for a total of 18 dB per octave. The project pictured below compares the stock 18 dB crossover to one assembled from discrete filters. The 2nd Order filters have a Q of 1.0 to provide an overall third-order Butterworth response when paired with the first-order filter. The resulting curves compare fairly well:

Best regards,

Bob

Crossover-Butterworth-18-sch.png
Crossover-Butterworth-18-sch.png
TFernandez104 Reply
Jan 26, 2020 00:00

Hi KJBob,

Firstly, many thanks for your reply. Very much appreciated. I think this is the second time you have helped me.

I understand that summing a frequency response once it is in dB is correct because its a log scale. But, when you compute in H(z) multiplication of the different filters is required. So if cascading filters, you can multiply them together when in H(z) and then convert that into dB. Or you can convert H(z) from each filter in dB and then add those together to get the final overall response of the filter cascade.

What I'm struggling with at the moment is getting the correct dB level when cascading filters together. If you look at the low pass crossover in SigmaStudio:

with the coefficients:

If I put those coefficients into python, compute H(z) for the higher order filter and lower order filter, multiply them together and convert to dB. The dB magnitude is -65!! Whereas the SigmaStudio graph shows the early (i.e. well below the 1000Hz cutoff frequency) dB magnitude at 0.

I'm clearly missing something fundamental but I can't see what. Anyone got any further clues?

Screenshot-2020-01-26-at-20.25.14.png
Screenshot-2020-01-26-at-20.25.14.png
Screenshot-2020-01-26-at-20.24.38.png
Screenshot-2020-01-26-at-20.24.38.png
Screenshot-2020-01-26-at-20.23.46.png
Screenshot-2020-01-26-at-20.23.46.png