Effacer les filtres
Effacer les filtres

How to calculate period of signal with matlab

72 vues (au cours des 30 derniers jours)
Ioannis
Ioannis le 30 Nov 2014
Hi everybody, I have the signal x2(t)=|cos(10*pi*t)|.How can i calculate its period with matlab?I am new matlab so each help will be usefull
  1 commentaire
Azzi Abdelmalek
Azzi Abdelmalek le 30 Nov 2014
This is not clear, do you have samples or what?

Connectez-vous pour commenter.

Réponse acceptée

Mohammad Abouali
Mohammad Abouali le 1 Déc 2014
Modifié(e) : Mohammad Abouali le 1 Déc 2014
use autocorrelation. If your data is periodic you should get high correlation once the lag time matches the period. here is an example:
x=0:0.1:20*2*pi;
y=sin(x); % so we know the period is 2*pi roughly 6.28
ac=xcorr(y,y);
[~,locs]=findpeaks(ac);
mean(diff(locs)*0.1)
ans =
6.2842
In a more complex data set including some noise you need to work around the find peaks a little bit. That might be too noisy.
In the example you gave here is what you will get
x=0:0.01:20*2*pi;
y=abs(cos(10*pi*x));
ac=xcorr(y,y);
[~,locs]=findpeaks(ac);
mean(diff(locs)*0.01)
ans =
0.1000
Another approach is using FFT, particularly if you have a more complex signal.
  3 commentaires
Anuj Patel
Anuj Patel le 26 Avr 2017
What is the other FFT approach , sir?
Lucky Moffat
Lucky Moffat le 22 Fév 2023
Take the FFT of the signal, then compute the power spectrum. Then, determine the frequency index k of maximum power. After this, determine the frequency at index k of maximum power. Once you've found the frequency it's easy to find the period since T = 1/f, e.g.,
t = 0:0.004:4;
sig = cos(2*pi*20*t);
a = fft(sig, 1024);
A = abs(a).^2;
[~, index_max_power] = max(A);
index_freq = index_max_power / ((t(2)-t(1))*length(A));
period = 1/index_freq
So, in that example the period T should be closer to 0.05.

Connectez-vous pour commenter.

Plus de réponses (1)

Firstname Lastname
Firstname Lastname le 21 Août 2017
Modifié(e) : KSSV le 9 Juil 2022
t=0:.01:10;
y=10*sin(10*pi*t);
[idx,idx]=findpeaks(y);
T=t(idx(2))-t(idx(1));
disp(['Time Period =' num2str(T),'seconds']);
  1 commentaire
OSAMA MOHAMED ALI
OSAMA MOHAMED ALI le 23 Avr 2024
Modifié(e) : OSAMA MOHAMED ALI le 23 Avr 2024
can I use it for discrete signals?

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by