How to shift FFT spectrum by half a bin? I am trying to find a way to shift the outputs of the FFT (any algorithm implementation, currently using radix-2) by half a bin with the same bandwidth.  To put it another way, say you have a 512pt FFT sampling data for a bandwidth of 100 kHz. The frequency bins are going to fall ~390 Hz apart (bandwidth) For example 195 to 585 is effectively the band pass range for bin 2 which happens to fall at the center frequency of 390 Hz. Bin 3 is from 585 to 975 with Fc being 790 Hz.  Say I want Fc to be 585 instead of 790. This represents a shift of all the FFT outputs by half a band.  

I do not want to double the size of the FFT to get the result. I do not want to multiply the signal in time domain prior to FFT by an offset frequency as I don’t want to deal with extra products within bandwidth of the overall FFT. 

Is there a way through modification of the twiddle factors to get the desired effect?
Well, if you're willing to perform multiplications in the time domain, you can cyclically shift the whole spectrum in the frequency domain using:

$$x'[n] = e^{j\pi \frac{f}{F_s/2}n} x[n]$$

Where $x[n]$ is your original input sequence, $F_s$ is your sample rate, and $f$ is the amount of frequency shift you desire.

The DFT of $x'[n]$ will have a spectrum that is cyclically shifted by $f$ Hertz, compared to the DFT of $x[n]$. And there will be no "extra products within the bandwidth of the overall FFT", if by that you meant mixing products, from say multiplying by a cosine to effect a shift.

I suppose you could merge that complex exponential factor into your twiddle factors of a custom FFT implementation, but I would advise against that.  Page 19 of these notes shows how that merge would happen: http://eeweb.poly.edu/iselesni/EL713/zoom/dftprop.pdf if you are dead set on modifying the twiddle factors instead of a separate multiplication.