For the HiFiBerry DSP project we need a compact, but flexible configuration of a network of filters. Therefore I created an XML configuration that models the different parts of the filter network.
<network samplerate="48000">
<input name="input1"/>
<biquad name="bq1" input="input1" type="allpass" frequency="200" q="1" />
<biquad name="bq2" input="bq1" type="lowpass" frequency="1000" q="0.7" />
<biquad name="bq3" input="bq2" type="highpass" frequency="100" q="0.7" />
<biquad name="bq4" input="bq3" type="notch" frequency="400" q=".1" />
<biquad name="bq5" input="bq4" type="peaking_eq" frequency="700" q="4" dbgain="3" />
<output name="out1" input="bq5" />
</network>
Here you see a simple DSP configuration with one input and one output and 5 biquad filters processing the data. Today, no other filters are supported, but I will add other types soon. I plan to also support FIR filters.
Using our software you can now calculate the frequency response of this filter chain:
out1
Freq Mag Phase
10 -40.27db 151.26°
15 -33.54db 137.31°
20 -28.95db 123.77°
30 -22.92db 98.07°
40 -19.11db 73.96°
50 -16.52db 51.02°
75 -13.06db -3.32°
100 -12.19db -54.31°
150 -13.86db -148.08°
200 -16.87db -232.90°
300 -24.77db -340.74°
400 -298.86db -480.46°
500 -26.91db -242.30°
750 -16.50db -310.78°
1000 -16.52db -346.21°
1500 -17.48db -391.49°
2000 -19.60db -58.47°
3000 -23.71db -89.23°
4000 -27.23db -107.29°
5000 -30.26db -119.52°
7500 -36.41db -137.98°
10000 -41.23db -148.30°
15000 -48.77db -159.52°
20000 -54.92db -165.64°
Now let’s do a nice graph from it using Matplotlib.

Note, this is not the filter that we used before, because the response of that filter is really nasty – it was just for demonstration of the different biquad filters.
Now, we only have to merge this with our DSP upload software with this code and we already have a simple command line tool to upload and modify filters on the HiFiBerry DSP.