1
$\begingroup$

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

$\endgroup$
  • $\begingroup$ What are the sizes of each array? $\endgroup$ – AnonSubmitter85 Feb 10 '18 at 19:19
  • $\begingroup$ 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. $\endgroup$ – Sam Proctor Feb 10 '18 at 20:21
  • 2
    $\begingroup$ Are you sure that 1024 is enough to ensure linear convolution rather than circular? $\endgroup$ – AnonSubmitter85 Feb 10 '18 at 22:04
  • $\begingroup$ 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. $\endgroup$ – Sam Proctor Feb 12 '18 at 15:56
1
$\begingroup$

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
$\endgroup$
  • 1
    $\begingroup$ You may want to check that none of the x values are zero, just in case. +1 $\endgroup$ – Peter K. Feb 12 '18 at 20:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.