I am interested in making a magnitude graph of a variable slope low/high pass filter. I would like to set slope in dB/oct and a cutoff pitch. The y-axis should be amplitude from 0 to 1, and the x-axis should be frequency in Hz.
I have seen people construct very nice variable slope high/low pass filters, where a series of say 16 shelving filters are cascaded to create the desired effect. For example, in Reaktor: https://www.native-instruments.com/forum/threads/3-db-octave-lpf.323734/#post-1611335
These variable slope filters adjust the cutoff frequency of each individual filter to maintain an equally spaced interval between an arbitrary high point and the desired cutoff frequency. They will also evenly adjust the slope of each individual shelving filter to give the final dB/oct slope desired.
Here are the basic magnitude plots of low/high shelves, where c = cutoffFreq, z = zeroFreq, and where I got the equations:
- https://www.desmos.com/calculator/ewvksxpd8v
- https://db0nus869y26v.cloudfront.net/en/Equalization_(audio)
To graph a variable slope filter in the fashion I desire, I can just multiply ~16 of these variable slope equations in the same way, but I need to be able to figure out the parameters.
To elaborate, I know from the Reaktor variable slope filter project that the cutoff frequency per band in an array of shelving filters would be set from a global cutoffHz/cutoffPitch (where pitch means MIDI 1-135) knob as:
c[i] = cutoffHz * 2^((((135-cutoffPitch)/12) / numberBands) * i)
In an array of 16 bands, i = 0...15 and numberBands = 16.
But I am not sure how to get the z parameters per band to finish the graph. Any ideas for what the z formula might be in this case? Or any other suggestions?