Article View: comp.dsp
Article #361Re: Pitch Shifting
From: Dean Swan
Date: Tue, 03 Oct 1989 17:03
Date: Tue, 03 Oct 1989 17:03
53 lines
2791 bytes
2791 bytes
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
Technical Details
Message-ID:
<1989Oct3.170307.9734@sun.soe.clarkson.edu>Path:
arc1-ca.pugleaf.net!utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!uwm.edu!rpi!image.soe.clarkson.edu!deanReferences:
<4521@internal.Apple.COM>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!uwm.edu!rpi!image.soe.clarkson.edu!dean From: dean@image.soe.clarkson.edu (Dean Swan) Newsgroups: comp.dsp Subject: Re: Pitch Shifting Message-ID: <1989Oct3.170307.9734@sun.soe.clarkson.edu> Date: 3 Oct 89 17:03:07 GMT References: <4521@internal.Apple.COM> Sender: dean@sun.soe.clarkson.edu (Dean Swan) Organization: Clarkson University, Potsdam, NY Lines: 54