# Problems with IFFT not being symmetrical

I have two signals, a measurement and a reference which I have performed an FFT on. They have both been windowed with a Hanning window, and now I would like to deconvolve these to get the impulse response.

I have followed these steps:

1. Divide my reference FFT by my measurement FFT. (Point division of complex numbers).
2. I then take the conjugate of this resultant array.
3. I then perform a forward FFT on this.
4. I then take the conjugate again.
5. I then divide by the length to normalise the signal.

If I am to understand correctly, this should give me the symmetrical deconvolution of the two signals. However, for my input of 1024 samples, I get the first 512 samples equal to 0, and then the second half of the samples are a little bit noisy with a definite impulse at the expected delay time.

My measurements are actually completely electronic so should be noise free. I can confirm that my two input FFTs are symmetrical (I am using the full FFT, not just the positive values), I am not doing any 'FFT Shift'.

If anybody has any suggestions or hints, I would greatly appreciate it.

Thanks

• What are the sizes of each array? – AnonSubmitter85 Feb 10 '18 at 19:19
• Both FFT arrays are 1024 bins, and the returned IFFT is 1024. I read somewhere about zero padding the input FFTs if they aren't the same length, however as they are I have not done that here. – Sam Proctor Feb 10 '18 at 20:21
• Are you sure that 1024 is enough to ensure linear convolution rather than circular? – AnonSubmitter85 Feb 10 '18 at 22:04
• I will happily admit I do not know if it is enough. I have not seen anything to state a limitation on the size for the deconvolution. I read somewhere that the minimum length should be the size of the two signals together to allow the full impulse to be calculated. (ie if a long reverberant room, the length should not be shorter so that it cannot equate for all of this). Or have I completely got that wrong? In my current setup I am just doing the delay electronically, so there is no distortion of the original signal, purely just a sample delay of a few samples. – Sam Proctor Feb 12 '18 at 15:56

Here is an example using Matlab/Octave code. There is no need to conjugate.

x = rand(1000,1);
y = rand(1000,1);
z = conv(x,y,'full');
y2 = ifft( fft(z,1999) ./ fft(x,1999) );
norm(y - y2(1:1000)) / norm(y)

ans =

1.5654e-13

• You may want to check that none of the x values are zero, just in case. +1 – Peter K. Feb 12 '18 at 20:42