Calculation of mean signal frequency
Show older comments
Hi everyone,
I'm trying to perform an analysis in the frequency domain, but I'm confused regarding how to obtain the PSD signal.
Currently, I'm using the following to obtain the PSD:
L = length(data);
% Compute Fast Fourier Transform
Y = fft(data);
% Compute the two-sided spectrum P2
P2 = abs(Y/L);
% Compute the single-sided spectrum P1 based on P2
P1 = P2(1:ceil(L/2)+1);
P1(2:end-1) = 2*P1(2:end-1);
power = P1;
% Define the frequency domain axis
frequencies = fs*(0:ceil(L/2))/L;
I have tested this with the following signal:
fs = 200;
x = 0:1/fs:20
data = sin(2*pi*5*x);
And I get the following PSD:

I'm trying to calculate the mean frequency using the following formula:
mean_frequency = sum(power.*frequencies)/sum(frequencies)
Where I obtain
mean_frequency = 5.0587e-04
which is obviously wrong. However, when I use MATLAB's meanfreq function, I get meanfreq(data, fs) = 4.999Hz, which is the expected.
Can please anyone tell me what I'm doing wrong? After this I want to perform a complete analysis in the frequency domain (e.g, median frequency, total power, etc) and I need to make sure my PSD data is correct.
Many thanks for your attention,
Diogo
1 Comment
Abhineet Ram
on 15 Sep 2022
Hi, where did you get this formula? I would like to understand the concept of this method/code. Thanks
Accepted Answer
More Answers (0)
Categories
Find more on Spectral Measurements 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!