Subtract the average time value by a signal

18 visualizaciones (últimos 30 días)
Guglielmo Giambartolomei
Guglielmo Giambartolomei el 11 de Jul. de 2016
Comentada: Walter Roberson el 11 de Jul. de 2016
Hello everyone, I performed a FFT of an accelerometric signal and I found a peak at 0 Hz in the abs of the FFT. In order to remove this nonsense I have to create the temporal average of the original signal (integral of the signal over time, divided by the time) and then I have to subtract it from the original signal. How can I perform this task? Thamk you very much.

Respuesta aceptada

Walter Roberson
Walter Roberson el 11 de Jul. de 2016
Why not just zero that component of the fft? You will get the same result.
To get 0 in the 0 Hz bin, you should not be performing a temporal average in the manner you indicate. Instead for a single channel signal you should use
new_signal = signal - mean(signal);
This will differ from trapz(signal)/length(signal) by the weighting given to the first and last datapoint. To clarify, mathematically, the first bin output by fft() is the unweighted sum of the signal.
  2 comentarios
Guglielmo Giambartolomei
Guglielmo Giambartolomei el 11 de Jul. de 2016
Thank you Walter. Some clarification if possible: so I have to subtract the mean signale from the original signal (the simple mean)? I didn't understand your assertion "This will differ from trapz(signal)/length(signal) by the weighting given to the first and last datapoint". Thank You!
Walter Roberson
Walter Roberson el 11 de Jul. de 2016
trapz(signal) = 1/4 * (2 * signal(1) + 4 * signal(2:end-1) + 2 * signal(end) ) = sum(signal(2:end-1)) + 1/2 * (signal(1) + signal(end)) = sum(signal) - 1/2 (signal(1) + signal(end))
So trapz(signal) is sum(signal) except with the first and last signals given half weight.
I mention trapz(signal) because it is one of the most common numeric integration techniques.
Yes, to have the first bin of fft(signal) come out as 0, use
fft_of_signal = fft(signal - mean(signal));
To within round-off error, this will be exactly the same as
fft_of_signal = fft(signal);
fft_of_signal(1) = 0;

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Spectral Measurements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by