Total energy in Time and Frequency Dimain

13 views (last 30 days)
Maria Amr
Maria Amr on 12 Dec 2020
Edited: Paul on 10 Nov 2024 at 15:25
I truly appreciated if somebody can direct me how to measure total energy in a certain frequency band?
I have a signal and use this code to measure total enery and the result is reasonable.
E1_timedomain=sum(abs(x.^2))
but it measuers total energy of whole signal. I just want to measure it between [0-100] Hz. Appreciared!

Accepted Answer

Star Strider
Star Strider on 12 Dec 2020
If you have R2018a or later, and the Signal Processing Toolbox, use the bandpass function to selectively filter the frequencies-of-interest. Then do whatever calculations you want to do on the output. If you have an earlier version, it is easy to design filters in MATLAB. I will help you with that, if necessary.
  2 Comments
Maria Amr
Maria Amr on 12 Dec 2020
Star Strider Thank you so much.
As usual, the best and the fast way.BIG like!

Sign in to comment.

More Answers (3)

Maria Amr
Maria Amr on 14 Dec 2020
Star Strider I have applied a bandpass filter and get a reasonable result. Would you please direct me how may I retrive the filtered signal? Appreciated!
that is my code:
bandpass(amp1,[1 78],fs);

Maria Amr
Maria Amr on 14 Dec 2020
Star Strider Appreciated!
  1 Comment
Star Strider
Star Strider on 14 Dec 2020
As always, my pleaure!
(Also, in the future please post comments as Comments, not Answers.)

Sign in to comment.


Paul
Paul on 10 Nov 2024 at 5:34
Edited: Paul on 10 Nov 2024 at 15:25
Define a real-valued, finite duration signal of length N, assumed to be uniformly spaced samples collected as Fs = 2000 Hz
rng(100);
N = 1000;
x = randn(1,N); Fs = 2000; Ts = 1/Fs;
The total energy in this signal is computed in the time domain as
E = sum(abs(x).^2)
E = 1.0063e+03
The total energy computed in the frequency domain is (taking advantage of the symmetry in the frequency domain because x is real-valued)
X = @(f) freqz(x,1,f,Fs);
E = 2*integral(@(f) abs(X(f)).^2,0,Fs/2)*Ts
E = 1.0063e+03
Hence, the energy in the signal between 0-100 Hz is
E100 = 2*integral(@(f) abs(X(f)).^2,0,100)*Ts
E100 = 95.8129
Can also approximate E100 from the DFT samples.
Xdft = fft(x);
fdft = (0:N-1)/N*Fs;
E100 = 2*sum(abs(Xdft(fdft<=100)).^2)/N
E100 = 99.5646
Or better yet
E100 = 2*trapz(fdft(fdft<=100),abs(Xdft(fdft<=100)).^2)/Fs
E100 = 94.7997
Can also apply a very sharp, low pass filter to x and then compute the energy in the filter output as a rough approximation
y = lowpass(x,100,Fs,'Steepness',0.95);
sum(abs(y).^2)
ans = 112.4906

Categories

Find more on Signal Processing Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!