Subtract the average time value by a signal
16 ビュー (過去 30 日間)
古いコメントを表示
Guglielmo Giambartolomei
2016 年 7 月 11 日
コメント済み: Walter Roberson
2016 年 7 月 11 日
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 件のコメント
採用された回答
Walter Roberson
2016 年 7 月 11 日
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 件のコメント
Walter Roberson
2016 年 7 月 11 日
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;
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Fourier Analysis and Filtering についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!