I coded a quick Matlab script to do a pitch shift using the first method that came to mind and which I'm guessing is the first method that comes to everyone's mind when they first think about this problem. I took the time samples divided them into overlapped frames, took the DFT of each frame, pitch shifted, and took the IDFT, etc. By pitch shifting the DFT I mean: (SHIFT < 1) for i=1: N/2-1 new_dft_bin[i * SHIFT] += old_dft_bin[i] end and the rest of new_dft_bin[] is set to the appropriate conjugate of above such that the IFFT is real. Suprisingly, it sounded pretty good for a wide range of shifts,e.g. SHIFT=0.5, The worst artifact is that a significant reverb effect is introduced. Does anyone know the theoretical reason of why reverb is introduced? Note: If I run all the processing except the actual DFT pitch shift, the output sounds fine with no reverb; this is true even if I change the phases of each DFT bin to zero.
Pitch Shift using DFT?
Started by ●September 19, 2004
Reply by ●September 19, 20042004-09-19
Hi, that won't work right for a couple of reasons. I think instead of repeating it all here you should have a look at my article "Pitch Shifting using the Fourier Transform" which is located at: http://www.dspdimension.com/html/pshiftstft.html This is part of several articles posted in the "Articles" section on http://www.dspdimension.com -- Stephan M. Bernsee http://www.dspdimension.com