I'm currently working on a phaser implementation with the intention of adding some parameters that generate unique effects, namely effects that involve the precise placement of the phaser notches (e.g., "squashing" the phaser notches so the more central notches' center frequencies are biased up or down, while the outer notches retain their position). At current, the implementation is a group of 2-pole IIR allpass filters processed in sequence. In their base state, they all share the same cutoff frequency and Q factor (which are converted to IIR allpass coefficients). I've been able to vaguely simulate the effects I'm looking for by twiddling the cutoff/Q of individual allpasses with some success, but it's becoming more and more frustrating how unpredictable the results can be.
What I'd like to know is if/how one can take a set of desired notch frequencies and bandwidths for a phaser, and turn that into a set of coefficients for the phaser's allpass filters. I had almost no exposure to the theory of IIR filters in general before I started work on this, but from what I've collected over the past couple weeks this would be, at minimum, very difficult. The closest I've come to some kind of method for this is mentioned in this CCRMA article:
"The phaser will have a notch wherever the phase of the allpass chain is at $ \pi$ (180 degrees)."
To my understanding, however, this would involve plugging the generalized transfer function of each phaser into the next, in sequence, finding the poles of this amalgamated transfer function, and then breaking the equation down in reverse to find the coefficients of the individual filters. This seems impractical to do on paper and almost impossible to do programmatically, but I'm not familiar enough with the math to know if I'm missing something. I'd greatly appreciate any guidance on how this problem could be solved, or if it's just wholly impractical and should be abandoned.
Thank you!