Subtract the average time value by a signal
15 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Guglielmo Giambartolomei
il 11 Lug 2016
Commentato: Walter Roberson
il 11 Lug 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.
0 Commenti
Risposta accettata
Walter Roberson
il 11 Lug 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 Commenti
Walter Roberson
il 11 Lug 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;
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Fourier Analysis and Filtering in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!