Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ames!pasteur!ucbvax!hplabs!hpl-opus!hpnmdla!hpsad!toma From: toma@hpsad.HP.COM (Tom Anderson) Newsgroups: comp.dsp Subject: Re: Re: Adjust-Speed CD player?? Message-ID: <9520001@hpsad.HP.COM> Date: 25 Sep 89 20:20:30 GMT References: <89264.171306P85025@BARILVM.BITNET> Organization: HP Signal Analysis Division - Rohnert Park, CA Lines: 36 >>frequency scaling algorithm, perhaps by doing a digital mix with a reference >>(digital) carrier (i.e. ref = 100 Hz for a 100 Hz shift upward in frequency), >>followed by a carrier and lower sideband suppression (Hilbert transform filter >>are very easy to implement digitally). At a fast glance, I think this might >>work well for moving the spectra of an audio source up/down some arbitrary >>frequency, and should be doable with some of the common DSP chips currently >>available. > >As I've said before: that's not scaling, that's OFFSET ! You can't do that >to MUSIC, because music has a realative overtone spectra. Consider: > >440 Hz + 880 Hz make a (very simple) harmonic note. > >Shift 100 Hz: > >540 + 940 Hz makes two sine notes !!! And imagine the effect this has on >complex waveforms like a violin or a piano ... SHUDDER ! The above technique has the advantage that it doesn't rely on an FFT, so that windowing issues are avoided. The hardware is also easier than an FFT. It seems that an FFT is really called for, so that the frequency shift can be made on a logarithmic frequency axis. An interesting question is: how many FFT points are required? I think that you need to know the maximum frequency to be represented, the minimum frequency to be shifted, and the smallest amount of shift. To shift from C0 at 16.35Hz to C#0 at 17.32Hz requires a shift of about 1Hz, so the FFT bins should be spaced by about 1Hz. An FFT with this spacing covering 0Hz-20kHz would need about 20,000 points. To keep the fidelity high, one transform every few milliseconds or so would be required. Such a brute force technique gets expensive quickly. It seems like you need a logarithmic frequency axis. I have often wished for an FFT type algorithm with logarithmic frequency spacings. Does anyone know of one?