Pitch Shift using DFT?

Started by nearly blind September 19, 2004
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 

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]
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?

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.

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:


This is part of several articles posted in the "Articles" section on 
Stephan M. Bernsee