[Teoria dei Segnali][Matlab] Trovare i periodi in un segnale
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)
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.
Vi ringrazio!

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.

Vi ringrazio!
Risposte
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:
Ecco anche quello dell'inversa:
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
"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).
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.
È una soluzione un po' naif ma potrebbe funzionare.