PDA

Visualizza la versione completa : stimare frequenza avendo fft con matlab


davide99cs
13-01-2015, 18:14
Salve. avrei un problema. Devo calcolarmi la fase (in frquenza)di un segnale sinusoidale trasformato con fft . L'obbiettivo è scegliere il numero di bit adatto a misurare questa fase quindi tramite delle prove (8,16,32 bit) volevo vedere quanti bit erano sufficienti per una buona misurazione di fase. Perciò avendo la fft della mia sinusoide e di una sinusoide identica sfasata di tot radianti (es pi/4) volevo quantizzare il mio vettore delle fasi (sto facendo il tutto con matlab) e poi ricostrurimi la mia frequenza(quantizzata) tramite la relazione deltaphi=2*pi*fq*deltaT e vedere se la sinusoide ricostruita con quella fq è sufficientemente simile a quella iniziale. Secondo voi è fattibile come cosa? avete altre idee per stimare il numero adatto di bit per avere una buona misurazione della fase in frequenza di un segnale?
grazie

panta1978
13-01-2015, 18:31
Più che il campionamento è importante la frequenza (secondo la regola di Nyqvist, deve essere maggiore del doppio della frequenza del segnale).

Io farei così. Scegli un segnale con una certa fase (es: pi/4) ed una data frequenza (es: 200 Hz).

Dopodichè lo campioni a 500Hz, 1kHz, 2kHz, 5kHz, 10kHz.
Analogamente fai un resample a 8, 16, e 32 bit (Matlab di default usa 64 bit).

Se hai scelto 5 frequenze e 3 profondità di bit avrai quindi 5x3 = 15 ricampionamenti.

Infine, per ogni coppia di frequenza / numero di bit ti ricalcoli la fase tramite algoritmo fft, e vedi per ogni segnale quanto è distante dall'originale. Mi aspetto una correlazione elevata con il periodo, basso con il numero di bit.

PS: se hai domande specifiche su Matlab e qua non trovi risposte puoi consultare o il forum Mathworks o una delle pagine facebook di Matlab e/o Matlab/Simulink (dove tra l'altro mi trovi :) )

davide99cs
13-01-2015, 18:43
Più che il campionamento è importante la frequenza (secondo la regola di Nyqvist, deve essere maggiore del doppio della frequenza del segnale).

Io farei così. Scegli un segnale con una certa fase (es: pi/4) ed una data frequenza (es: 200 Hz).

Dopodichè lo campioni a 500Hz, 1kHz, 2kHz, 5kHz, 10kHz.
Analogamente fai un resample a 8, 16, e 32 bit (Matlab di default usa 64 bit).

Se hai scelto 5 frequenze e 3 profondità di bit avrai quindi 5x3 = 15 ricampionamenti.

Infine, per ogni coppia di frequenza / numero di bit ti ricalcoli la fase tramite algoritmo fft, e vedi per ogni segnale quanto è distante dall'originale. Mi aspetto una correlazione elevata con il periodo, basso con il numero di bit.

PS: se hai domande specifiche su Matlab e qua non trovi risposte puoi consultare o il forum Mathworks o una delle pagine facebook di Matlab e/o Matlab/Simulink (dove tra l'altro mi trovi :) )

Allora non ho capito benissimo. Comunque il lavoro che mi è stato dato è che ho già prefissati la frequenza di campionamento (4Ghz) e la frequenza della sin la scelgo io (250 Mhz per esempio). Queste cose sono fissate.

A questo punto, il mio compito è di calcolarmi la fase in frequenza (obbiettivo finale del progetto) ma devo riuscire a capire con quanta profondità di bit fare questa cosa.

Poi avevo pensato che facendo le fft di una sinusoide con faseiniziale=0 e una con faseinziale1=pi/4 (esempio, è indifferente), volevo quantizzare i vettori delle due fasi nella fft con un algoritmo apposito con N bit, poi valutarmi questa frequenza quantizzata che mi esce fuori facendo deltafi(quantizzata in frequenza)=2*pi*fq*deltat.

E quindi riuscire a trovarmi fq e vedere quanto è simile all'originale e se soddisfa la misurazione o se è meglio usare un numero maggiore di bit

Era un idea ma volevo sapere se era fattibile e in caso come fare con matlab(ma quello piano piano riesco e sono gia su mathworks :D ), dato che mi è stato consigliato dal ragazzo che mi ha dato il lavoro (sono in tesi triennale). Se hai qualche altra idea per farlo o qualche opinione o cosniglio sul metodo se può funzionare, sono tutto orecchi :D :D
grazie per l'aiuto!

Loading