Le 2012-02-02 à 19:13:00, Mike Moser-Booth a écrit :
a = -r² b = 2r*cos(ω) c = 1 (an overall gain is applied separately, which is like scaling a,b,c all at once)
I don't think this is entirely accurate. I think a and c should be switched here, though of course when finding b²-4ac that doesn't really matter.
It depends whether you write ax²+bx+c or a+bx+cx². Both forms are convenient, and the latter expands better in cases of variable degrees (letters don't get renamed when adding a term), but the former is more common for cases that have only a degree fixed at 2 or 3.
Also, when applying a gain to a recursive filter, it's not really the same as scaling all the coefficients. If you were to scale them first, then the gain would affect the feedback portions of the filter. Applying the gain after means the feedback samples are not scaled by the gain.
Those filters are all linear. This means that you can effectively commute them with a constant gain [*~] without any difference. However, it will make a difference when the gain of [*~] changes quickly while the main input changes too.
If you think of it in terms of its transfer function, it would look more like this: H(z) = g*(1 / (1 - 2r*cos(ω)*(z^-1) + r^2 * z(^-2) ))
Well, I was thinking of it in terms of 1/H(z) or 1/gH(z).
But are you sure that you got the signs right in the denominator ?
It seems that [bp~] is a mere combination of a [lop~], a [hip~] and a [*~] (plus the calculation of their coefficients).
But [hip~] isn't an all-pole filter. It has a zero at DC.
oops.
| Mathieu BOUCHARD ----- téléphone : +1.514.383.3801 ----- Montréal, QC