[Teoria dei Segnali][Matlab] Trovare i periodi in un segnale

Zirq
Salve! Sono una studentessa della magistrale di ingegneria ambientale, quindi premetto che di teoria dei segnali so ben poco (leggasi: vi prego di rendere le spiegazioni più elementari possibile) :oops:

Per un esame devo sviluppare un programma matlab con la seguente traccia:
"Scrivere un programma Matlab che valuti la periodicità di un segnale con una data tolleranza".
Il segnale di partenza può avere un andamento qualsiasi; eventualmente può essere già discretizzato.
So di dover utilizzare la trasformata di Fourier, ma non mi è chiaro come. :?

Qualche anima pia sa spiegarmi come si procede in linea teorica?
Purtroppo né "San Internet" né il professore sono stati d'aiuto. :cry:
Vi ringrazio!

Risposte
gargio
Per cominciare se ti è utile posso darti il codice per la trasformata di Fourier.
Per la richiesta in sé dovrei pensarci un po', ma non assicuro niente :-|
In che senso valutare la periodicità? Scoprire se un dato segnale è periodico o no?

Intanto ecco il codice:
function X = T_Fourier(x,t,f)
% FOURIER TRANSFORM 

dt = abs(t(2)-t(1)); %calcolo dt come differenza tra due valori dell'asse dei tempi
X = zeros(size(f));

for k = 1:length(f)
    X(k) = integrale(x.*exp(-1i*2*pi*f(k)*t),dt);
end


Ecco anche quello dell'inversa:
function x = Inv_T_Fourier(X,f,t)
% INVERSE FOURIER TRANSFORM

df = abs(f(2)-f(1));
x = zeros(size(t));

for k = 1:length(t)
    x(k) = integrale(X.*exp(1i*2*pi*t(k)*f),df);
end

Zirq
"gargio":
Per cominciare se ti è utile posso darti il codice per la trasformata di Fourier.
Per la richiesta in sé dovrei pensarci un po', ma non assicuro niente :-|

Per cominciare...Grazie! Già mi è utile per capirci qualcosa!

"gargio":

In che senso valutare la periodicità? Scoprire se un dato segnale è periodico o no?

Sì.
Il fine teorico sarebbe scoprire se c'è un andamento che si ripete, come per la temperatura (giornalmente, annualmente).


gargio
In linea teorica mi verrebbe in mente di salvare i dati in un array finché non si trova un elemento già presente nell'array, per poi controllare se quello successivo nella mia sequenza/segnale corrisponde a quello successivo nell'array precedentemente salvato. Se non corrispondono si ricomincia ad aggiungere valori nell'array (mantenendo ovviamente quelli già presenti). Penso si possa bloccare la valutazione quando si arriva a metà del segnale/sequenza e non si è ancora verificato che è periodico.
È una soluzione un po' naif ma potrebbe funzionare.


Rispondi
Per rispondere a questa discussione devi prima effettuare il login.