dean@image.soe.clarkson.edu (Dean Swan) (10/04/89)
Well, I have been having a miserable time trying to get this file to post, so if anyone gets this, let me know. -Dean > In article <1989Sep25.172140.27543@sun.soe.clarkson.edu> dean@image.soe.clarkson.edu (Dean Swan) writes: >> Assume that your input is of the form: >> Y=Sin( F*A ) > >> Then F = ArcSin(Y)/A >> Next do F=F+pitch shift amount > ^^^ > That should be a * ! a * ! a * ! > >> and reconstruct with Y=Sin(F*A). Forget I ever said this. I did the math, and it only works right for sine waves. I use the angular frequency analysis (the F=arcSin(y)/A) iteratively to decompose an input wave into parameters for an F.M. based synthesis system. I also remove the amplitude envelope and adjust the (instantaneous) DC offset to 0 at each step of the way. Also, since the arcSin is NOT a function, the actual number that makes sense is usually at Y + n*2*pi where n is an arbitrary integer. Anyway, I don't think this is useful for real time pitch shifting. The rate conversion filter is probably the "best" way I can think of, and in fact, the table with two pointers is a simplification of that filter anyway. One thing that might be worth thinking about though, if you've got the bandwidth to do it is taking the inverse FFT of a high pass filtered cepstrum, pitch shifting it, and pumping it through a transversal filter with an impulse response that is the inverse FFT of the same cepstrum , but low pass filter the cepstrum first. Ok, so I'm running on here... My point is to separate the excitation function from the system function before pitch shifting, and re-applying the system function after pitch shifting. This would preserve the formants of the input, and avoid (or at least lessen the severity of) the MM/DV (Mickey Mouse/Darth Vader) effect. Also, removing the amplitude envelope after separating the system function and re-applying it before re-applying the system function would be a good idea. This should give just about the best pitch shifter possible, although it would be a bit cpu intensive. The sound generation model that I'm assuming here is: excitation function -> system function -> output (oscillator) (filter) Any takers? -Dean Swan dean@sun.soe.clarkson.edu