0
$\begingroup$

I have a measured signal (time domain) which I take the FFT of. I have a measured frequency dependent sensitivity (magnitude and phase (radians) as a function of frequency) which I need to apply to the measured signal. In effect perform a frequency dependent weighting to the measured signal's FFT. I calculate the complex signal for the sensitivity magnitude and phase before dividing this into the FFT of the original signal. I then take the IFFT of this which should give me something like the original signal shape but it does not.

Is my method correct?

$\endgroup$
1
$\begingroup$

There are several things that could be going wrong here.

Check your FFT lengths

If you do multiplication or division in the frequency domain, your frequency domain data needs to be at least as long as $N+M-$ where $N$ is your signal length, $M$ is your weighting length.

In matlab pseudo code this means you need:

N = length(x);
M = length(w);
freq_length = N + M - 1;

X = fft(x,freq_length);
W = fft(x,freq_length);

y = ifft(X./W);

So your resulting y will be longer than x.

If you don't do this, you will get time-domain aliasing because of the circular nature of convolution using the FFT.

Is your weighting real-valued in the time domain?

You may need to use conj(W) in the above, but you also need to check that w (the time domain version of the frequency weighting) is real-valued. If it's not, you will get a complex-valued signal.

Also note that you may get a small imaginary component. Often times all that is required to remove this is:

yr = real(y);
$\endgroup$

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.