Extracting the individual filters in a crossover filter

I have set up a crossover filter like so:
cof = crossoverFilter(1, 5000, 48, 44100);
I know I can visualize the two constituent filters like so:
visualize(cof);
But for publication purposes, I would like to change the visualization quite a bit. That's why I'm looking for a way to extract the individual filters from the crossover filter in some way, but I cannot seem to figure it out. I even tried going through the code of the visualize function, but I am having a hard time making sense of it.
Am I missing something? Or is there really no easy way to get to the filter coefficients?

 Accepted Answer

Hi Simon,
There is no documented way to get the individual filters. However, there is a hidden function that should help you:
numCrossovers = 2;
cof = crossoverFilter(numCrossovers, [300 5000], 48, 44100);
% Get the SOS filter coefficients for the 3 filters
[b1,a1,b2,a2,b3,a3] = getFilterCoefficients(cof,numCrossovers);
% Use fvtool to visualize
fvtool([b1,a1],[b2,a2],[b3,a3])
% Visualize using dynamic filter visualizer
fv = dsp.DynamicFilterVisualizer('SampleRate',cof.SampleRate);
fv(b1,a1,b2,a2,b3,a3)

4 Comments

Brilliant, working like a charm! Exactly what I needed and a huge help. Thank you!
Hello, Thank you so much for this interesting thread. I am also willing to extract coefficient from a Matlab CrossOver Filter object. I have tried the routine you wrote above and it works. However I would like to have more information on how the function getFilterCoefficients() works especially what are the possible outputs (SOS coefficents, a b coefficients etc.). I can't manage to find the documentation for this function in Matlab. Is there any on this function ? If yes could you send me a link to there?
Thank you
This method is not documented as of yet.
[b1,a1,b2,a2,b3,a3] = getFilterCoefficients(cof,numCrossovers);
b1 represents the numerator coefficients of the filter filter. a1 represents the denominator of the first filter. Each filter is a SOS filter, so b1 is N-by-3, where N is the number of sections in the SOS filter. a1 is N-by-3.
b2 and a2 represent the numerator and denominator coefficients of the second SOS filter, and so on.
Hi, perfect ! Thank you very much for this info! :)

Sign in to comment.

More Answers (0)

Categories

Find more on Audio Processing Algorithm Design in Help Center and File Exchange

Asked:

on 7 May 2021

Commented:

on 6 Dec 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!