Calculation of mean signal frequency

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 Commento

Hi, where did you get this formula? I would like to understand the concept of this method/code. Thanks

Accedi per commentare.

 Risposta accettata

There are two small errors.
Correcting them:
P2 = abs(Y/L).^2; % Power = Amplitude^2
and:
mean_frequency = sum(power.*frequencies)/sum(power) % Divide By Sum Of Power
producing:
meanfreq =
4.99913568484097
.

6 Commenti

Argh, how could I miss those! Many thanks for your fast and effective reply Start Strider :)
As always, my pleasure!
(I looked up the mean frequency calculation to be certain.)
Btw, can you recommend any specific literature / links / examples to learn more about frequency-domain analyses (in MATLAB)? I honestly would like to learn more about it but I can't seem to find anything good which covers lots of things. I'm now calculating other frequency-domain features and would like to have a little bit more confidence that I'm doing things properly :)
Anything I could recommend would be limited only to my experience.
A much better option would be the MathWorks Academia site For Students, and particularly, Books.
(My personal preference for books is Alibris.)
Hi, where did you get this formula? I would like to understand the concept of this method/code. Thanks
@Abhineet Ram — Probably Wikipedia. (It’s been a few years.)
It would have been easier had I used and linked to the meanfreq function (introduced in R2015a, proving once again that reading the Release Notes is time well-spent, something I obviously did not spend enough time on), that I now refer you to.
The related medfreq function calculates the median frequency.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by