[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Frequency shift to alleviate acoustic feedback
The most likely explanation is that when you shift the FFT by one bin, you (presumably) just copy the real and imaginary parts, so the initial phase of the respective components stays the same at the new frequency. However, by the end of each block, the new signal will have been through a different number of cycles of each sinusoidal component, so the phase at the end of the frequency-shifted block will not match up with the phase at the start of the next block.
Manipulating the phases so that the different components maintain the "correct" phase relationships with the signal components in subsequent blocks could be done by converting the phase of each FFT bin to a time delay (rather than a phase angle), and calculating the phase for the shifted signal which would give the same time delay.
There may be other issues too (e.g. the handling of the first and last DFT bins, where there's no phase information), but I would try setting the phase such that the signal at the centre of each overlapped window is "correct", and hope that the taper of the Hanning window will minimise the effect of any discontinuities near the ends of each block.
Let us know how you get on!
On Wed, 23 Jan 2013 11:05:08 +0100
Zlatan Ribic <zlatan@xxxxxxxxxxx> wrote:
> M. Hartley Jones: "Frequency Shifter for "Howl" Suppression", Wireless World, July 1973. 317-322
> ----- Original Message -----
> From: Siping Tao
> To: AUDITORY@xxxxxxxxxxxxxxx
> Sent: Wednesday, January 23, 2013 9:56 AM
> Subject: Frequency shift to alleviate acoustic feedback
> Dear experts,
> Acoustic feedback can be removed by several methods: frequency shift, phase shift, notch filter, adaptive cancellation. I tried the simplest method I thought, frqeuency shift. However, it's not easy as I thought. In realtime processing scenario, I need to process every 10ms audio sample without significant delay, so I do the following implementation:
> 1. sampling rate is 16K, so I have 160 samples every 10ms.
> 2. do DFT for these 160 samples, the DFT length is 512, pending zeros since I only have 160 samples
> 3. shift the frequency by one fft coefficient, that is, shift 16000/512=31.25Hz (DC is not shifted)
> 4. do IDFT
> After doing that, I can notice the spectrum is shifted in cool-edit, but with some processing noise (not the artifacts due to frequency shift). I guess this noise is caused by different processing for successive10ms data, I am not sure here. However, I try to use overlap processing in my code, hanning window, 50% overlap, then the processing noise is reduced much. Unfortunately, I found that overlap processing sometimes make the frequency shift useless (e.g. 75% overlap by blackman window), what I mean useless is I cannot notice spectrum shift in cool-edit.
> Can anybody help me to understand why overlap processing hurts frequency shift? Or point out the incorrect parts of my implementation.