Newsgroup: it.discussioni.ingegneria
Titolo: Spettro "localizzato"

Salve, di un segnale tempo discreto mi servirebbe analizzare le sue 
componenti in frequenza in una precisa banda di frequenze.
Per ora usando il matlab riesco a ricavarmi lo spettro del segnale su tutte 
le frequenze e poi zoommando guardo il range di frequenze che mi interessa. 
Il problema è che per aumentare la "risoluzione" dello spettro in quel range 
devo aumentarla per calcolare tutto lo spettro con ovvio appesantimento 
computazionale.
Come posso fare per avere lo spettro in un range di f desiderato e con la 
risoluzione desiderata?
Grazie per qualunque aiuto 

Non ho capito bene cosa vuoi fare.....
che intendi per aumentare la risoluzione dello spettro in quel range?
se mi spieghi questo concetto forse riesco a darti una mano


Intendo aumentare il numero di punti: vedere 100 punti di uno spettro che va 
da 1Hz a 100Hz č diverso che vederne 1000 sempre nello stesso range. Non so 
se č piů chiaro. Insomma io vorrei focalizzare la FFT solo in una parte 
dello spettro.
grazie per qualunque suggerimento 

 grazie per qualunque suggerimento
Ciao,
credo di aver capito, sostanzialmente vorresti aumentare la
risoluzione in frequenza ma solo su una specifica banda, beh non penso
proprio si possa fare.
Devi fare innanzitutto una distinzione fra segnali periodi e non, per
i primi hai uno spettro discreto e se riesci a campionare un numero di
punti che rappresentano perfettamente la periodicità del segnale il
tuo spettro è praticamente perfetto perchè ogni armonica è multipla
della fondamentale, per cui non hai bisogno di "zoomare" su un range
di frequenza, le armoniche che compongono il segnale le hai già
tutte!!
Credo che l'unica soluzione sia quella di aumentare il tempo di
campionamento per aumentare la risoluzione in frequenza (però
sull'intero range di frequenze), ad esempio se vuoi vedere 1000 punti
invece di 100 devi avere un tempo di campionamento 10 volte più grande.

 risoluzione desiderata?
Ciao, non conosco Matlab né i dettagli del tuo problema, ma penso che quello
che chiedi si possa fare.
Non ho capito se vuoi risolvere il problema via software (cioč utilizzando
qualche funzione specifica di Matlab) o con qualche strumento che agisca sul
segnale, ad esempio filtrando o amplificando una specifica banda. Dovresti
dirci di piů. Come č fatto questo segnale? Da dove proviene? Come avviene in
dettaglio l'acquisizione?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Il segnale è già acquisito ad 1Hz. Quindi la FFT sarà da 0 a 0.5Hz. In 
matlab la funzione per calcolare la FFT necessita di specificare il numero 
di punti che avrà la FFT (ovvero la sua risoluzione). A me interessa 
focalizzare nella banda 0.2-0.3 Hz. C'è un modo per calcolare le componenti 
solo in quella banda? Ovviamente usando un filtro posso, ma mi tocca sempre 
calcolare la FFT per tutta la banda di Nyquist del segnale.

 calcolare la FFT per tutta la banda di Nyquist del segnale.
ciao, il mio precedente post non c'entrava una mazza, evidentemente
non avevo ben capito :/.
Ok ora ci riprovo :D.
La soluzione credo che sia nel non utilizzare la funzione predefinita
di Matlab per il calcolo della fft dato
che ti ritorna lo spettro da 0 a fmax.
Se proprio ti schifa avere lo spettro completo e poi tagliare le
frequenze che non ti interessano semplicemente
calcolati i coefficenti ak e bk dello sviluppo in serie dalla
definizione della stessa.
ak = 2 / T * integrale( h(t) * cos(2*pi*k*df*t) dt   [integrato tra 0
e T]
bk = 2 / T * integrale( h(t) * sin(2*pi*k*df*t) dt    [integrato tra 0
e T]
Xk = sqrt(ak^2 + bk^2)
phi(k) = arctan(b/a)
dove h(t) è il segnale campionato ,df = 1 / T e T è il tempo di
acquisizione del segnale
Quindi se vuoi calcolare lo spettro tra 0.2 e 0.3 Hz con ad esempio T
=100 s
calcoli gli Xk per k che va da 20 a 30 (20 * 0.01 Hz = 0.2 Hz ecc).
Devi praticamente scrivere un programmino che calcola gli integrali
che ho scritto sopra.
Spero finalmente di aver ben compreso =P

 precedente post non c'entrava una mazza, evidentemente
non avevo ben capito :/.
Ok ora ci riprovo :D.
La soluzione credo che sia nel non utilizzare la funzione predefinita
di Matlab per il calcolo della fft dato
che ti ritorna lo spettro da 0 a fmax.
Devi praticamente scrivere un programmino che calcola gli integrali
che ho scritto sopra.
Spero finalmente di aver ben compreso =P
Sì, grazie, credo sia l'unica soluzione. Cercherò mentre di ottimizzare il 
codice.