I am trying to synthesize sinusoids by using window function in the frequency domain.
It involves:
- In frequency domain, shift the window to center around the peak frequency
- To generate a DFT frame, sample a few values of the window around the peak as the spectral motif
- Inverse-Fourier transform the spectral motif, to generate the sinusoid in the desired frequency
This approach works great in general, except for synthesising low frequencies. Because when shifting the window to the low frequency, the left side of the window will sit in the negative frequency domain.
The figure in the middle demonstrates the issue (T(k) sits in the negative domain)
I found a solution here, it suggested to add the complex conjugate value of the left tail of the window (in the negative domain) to the DFT bin that’s on the right tail of the window (in the positive domain). Which I can’t make sense of, and following this solution creates even more distortion. So I wonder if anyone knows how to do it properly. Any suggestions would be very appreciated!
Some excerpt from the aforementioned solution:
The reflection about the k=0 axis is due to the specific embodiment described herein for synthesizing a sinusoid. For each real sinusoid, one peak exists in the positive frequency bins and another peak exists in the negative frequency bins. In the embodiment wherein only the peak in the positive frequency bins is synthesized, a peak centered about a low positive frequency bin spills into the negative frequencies (as shown by the plot for Ht(k−bc) in FIG. 3). Similarly, a peak centered about a low negative frequency bin spills into the positive frequencies. The portion of Ht(k−bc) in the negative frequencies that is reflected, or T*(−k), represents the portion of the peak centered about the negative frequency bin that spills into the positive frequencies.
PS. Some time ago I've raised this question on DSP-related forum. I've got very detailed suggestion from Robert, to ignore the bins lying on negative domain to specify the whole positive frequency, and then complex conjugate to reflect it to the negative frequency, which has improved the problem but it still can’t go down below 80 Hz. So I thought I’ll post again here.