I am performing dual FFT analysis on a system.
1) I generate a Log Sine Sweep signal and save it as my reference array
2) I then produce an inverse filter to correct for amplitude and save this as inverse array
3) I play this signal through my device under test, and record the result from a measurement microphone and save this as my measurement array.
4) I perform an FFT on all three arrays.
5) I multiply both the measurementFFT and the referenceFFT with the inverseFFT.
6) I then divide the corrected measurementFFT by the corrected referenceFFT
7) finally I perform an inverse FFT on this division product to get back to the time domain and this gives me my impulse response.
If I plot this I have a clear impulse response. If I try and extract the phase from this I have issues.
To do this I find the reference delay time by finding the max absolute value of the impulse. This will be the number of samples I need to delay the reference signal by if I am to extract minimal phase.
So, I go back to square one:
1) I zero pad the array
2) I then move the reference array so it is delayed by the impulse sample number. With zeros each side to equal the length of the measurement array
3) I then FFT both of these, repeating steps 4-6 from before
4) I then extract the phase from the impulse in the frequency domain, by using i = atan2(im(i), re(i)) for each value of the division product.
5) I then convert to degrees by multiplying each value by 180 and then dividing by pi.
If I plot this I end up with a lot of wraps in phase. Playing around a bit, I have discovered if I subtract my impulse delay time from the total count and use that as my new delay time, it gives the expected result. Have I missed something here. (ie if I have 32768 samples, and my impulse is at sample 12, I would delay my reference by 32756 samples using the above method).
Have I missed anything obvious?