More Buzz.

From: Robin Davies (robind@MessageWise.com)
Date: Tue Jun 06 2000 - 11:22:14 EDT


John,
 
Ya know, I haven't actually looked at your code, so I'm not sure which
formula you're using.
 
I picked up my copy of Computer Music (Roads) over the weekend, and flipped
to the section on DSF to see what Curtis Roads had to say about it, and to
my surprise the only formula that Roads cites is different from the one
Moorer suggests. Admitedly, Roads is just giving one example of a family of
equations that Moorer seems to have considered. The one that Roads gives is
simpler and less flexible than the one I'm using; however, interestingly,
it's probably slower because the denominator in the equation has to be
checked to make sure it doesn't go to zero.
 
In the back of my heard, I've been carrying around a comment that John made
earlier on this list: that he's doing a great deal of pre-checking for error
conditions in his buzz implementation. I've been over my code and haven't
been able to see where exactly I do need to check for errors.
 
Putting the two together, I'm wondering whether we're using the same
equation.
 
Here's the one I'm using, based on Moorers '73 paper.
 
sum(k=0..N) sin(phi+k*beta) =
    (
        sin(phi)
        - a*sin(phi-beta)
        - a^(N+1) * (sin(phi + (N+1) beta) - a * sin(phi + N * beta))
    ) /
    ( 1 + a^2 - 2*a*cos(beta))
 
To use this identity to implement buzz, set phi = 2*PI*cps*tau + PI/2 and
beta to 2*PI*cps*tau. The PI/2 term is used to convert the identity to the
cosine series that the spec uses. Some simplification is possible.
 
Note that in this form the denominator can only go to zero when a = 1.
However, the SAOL buzz operator as defined can't accept a rolloff of one
since it would make denominator of the buzz scale factor go to zero.
 
Next question: are there in fact singularities in the solution of buzz when
rolloff is equal to 1? A: no, they seem to have limit solutions in each
case. In open form, the equation is clearly continuous. If explicit tests
are made for a zero denominator, sensible values are in fact relatively easy
to calculate.
 
However, I have chosen not to do so.
 
Is that normative behaviour? Is rolloff of 1 explicitly forbidden by the
spec. Well. No. But the spec explicitly states that the scale factor should
be set to NAN in this case.
 
I've taken a couple of cracks at trying to find an equation that doesn't
have zero denominator problems when rolloff == 1, but I haven't found one
yet. Generally, I'm leaning toward the conclusion that the roloff = 1 case
need not (from the spec's point of view) and should not (from a performance
point of view) be handled sensibly.
 
Opinions?
 
 
 
 
 
 
 
 



This archive was generated by hypermail 2b29 : Mon Jan 28 2002 - 12:03:57 EST