2015-03-28 5 views
5

Sto cercando di tracciare lo spettrogramma del mio segnale nel dominio del tempo dato:Che cos'è uno spettrogramma e come si impostano i suoi parametri?

N=5000; 
phi = (rand(1,N)-0.5)*pi; 
a = tan((0.5.*phi)); 
i = 2.*a./(1-a.^2); 
plot(i); 
spectrogram(i,100,1,100,1e3); 

Il problema è che non capisco i parametri e quali valori devono essere riportate. Questi valori che sto usando, ho fatto riferimento alla documentazione online di MATLAB su spectrogram. Sono nuovo di MATLAB e non mi viene l'idea. Qualsiasi aiuto sarà molto apprezzato!

+1

Hai controllato l'aiuto? http://www.mathworks.com/help/signal/ref/spectrogram.html;jsessionid=204fc52302b5fd3f2f47972b67b1 – NKN

risposta

12

Prima di entrare effettivamente in quello che fa il comando MATLAB, probabilmente vorrete sapere cos'è uno spettrogramma. In questo modo otterrai più significato nel modo in cui ogni parametro funziona.

Uno spettrogramma è una rappresentazione visiva dello Short-Time Fourier Transform. Pensa a questo come a prendere pezzi di un segnale di input e ad applicare una trasformazione di Fourier locale su ogni blocco. Ogni chunk ha una larghezza specificata e applichi una Trasformata di Fourier a questo pezzo. Dovresti prendere nota che ogni blocco ha una distribuzione di frequenza associata. Per ogni pezzo che è centrato in un punto temporale specifico nel segnale orario, ottieni una serie di componenti di frequenza. La raccolta di tutti questi componenti di frequenza in ogni blocco e tracciata insieme è essenzialmente uno spettrogramma.

Lo spettrogramma è una mappa di calore visivo 2D in cui l'asse orizzontale rappresenta il tempo del segnale e l'asse verticale rappresenta l'asse di frequenza. Ciò che viene visualizzato è un'immagine in cui i colori più scuri indicano che per un particolare punto temporale e una particolare frequenza, più bassa è la componente di frequenza, più scuro è il colore. Allo stesso modo, più alta è la componente di frequenza, più chiaro è il colore.

Ecco un esempio perfetto di uno spettrogramma:

Fonte: Wikipedia

Pertanto, per ogni punto di tempo, vediamo una distribuzione di componenti di frequenza. Pensa a ciascuna colonna come alla scomposizione in frequenza di un blocco centrato in questo momento. Per ogni colonna, vediamo un diverso spettro di colori. Più scuro è il colore, più bassa è la componente di magnitudine a quella frequenza e viceversa.


Così! ... ora sei armato con quello, andiamo sul modo in cui MATLAB funziona in termini di funzione e dei suoi parametri. Il modo in cui si sta chiamando spectrogram è conforme a questa versione della funzione:

spectrogram(x,window,noverlap,nfft,fs) 

Andiamo attraverso ciascun parametro uno per uno in modo da poter ottenere una maggiore comprensione di ciò che ciascuno fa:

  • x - Questo è il segnale di ingresso nel dominio del tempo che desideri trovare lo spettrogramma di. Non può essere molto più semplice di così. Nel tuo caso, il segnale che si vuole trovare lo spettrogramma di è definito nel seguente codice:

    N=5000; 
    phi = (rand(1,N)-0.5)*pi; 
    a = tan((0.5.*phi)); 
    i = 2.*a./(1-a.^2); 
    

    Qui, i è il segnale che si desidera trovare lo spettrogramma di.

  • window - Se si ricorda, si scompone l'immagine in blocchi e ogni blocco ha una larghezza specificata.window definisce la larghezza di ogni blocco in termini di campioni . Poiché si tratta di un segnale a tempo discreto, si sa che questo segnale è stato campionato con una particolare frequenza di campionamento e periodo di campionamento. È possibile determinare quanto grande la finestra è in termini di campioni:

    window_samples = window_time/Ts

    Ts è il tempo di campionamento del segnale. L'impostazione della dimensione della finestra è in realtà molto empirica e richiede molta sperimentazione. Fondamentalmente, maggiore è la dimensione della finestra, migliore è la risoluzione in frequenza che si ottiene mentre si acquisiscono più frequenze, ma la localizzazione temporale è scarsa. Allo stesso modo, più piccola è la dimensione della finestra, migliore è la localizzazione che si ha nel tempo, ma non si ottiene una grande decomposizione di frequenza. Non ho alcun suggerimento qui su quale sia la dimensione più ottimale ... ed è per questo che sono preferibili wavelets quando si tratta di decomporre la frequenza temporale. Per ogni "chunk", i blocchi vengono decomposti in blocchi più piccoli di larghezza dinamica in modo da ottenere una miscela di buon tempo e localizzazione della frequenza.

  • noverlap - Un altro modo per garantire una buona localizzazione di frequenza è che i blocchi sono che si sovrappongono a. Un adeguato spettrogramma garantisce che ciascun blocco abbia un certo numero di campioni che si sovrappongono per ciascun blocco e noverlap definisce quanti campioni sono sovrapposti in ciascuna finestra. L'impostazione predefinita è il 50% della larghezza di ogni blocco.

  • nfft - Stai praticamente prendendo la FFT di ogni blocco. nfft indica quanti punti FFT si desidera calcolare per pezzo. Il numero predefinito di punti è il più grande tra 256 e floor(log2(N)) dove N corrisponde alla lunghezza del segnale. nfft fornisce anche una misura di quanto sarà elevata la risoluzione in frequenza. Un numero maggiore di punti FFT fornirebbe una risoluzione più alta della frequenza e mostrerebbe quindi dettagli a grana fine lungo l'asse di frequenza dello spettrogramma se visualizzati.

  • fs - La frequenza di campionamento del segnale. Il valore predefinito è 1 Hz, ma è possibile sostituirlo a qualsiasi frequenza di campionamento del segnale.


Pertanto, ciò che si dovrebbe probabilmente prendere da questo è che non posso davvero dirvi come impostare i parametri. Dipende tutto dal segnale che hai, ma spero che la spiegazione sopra ti dia un'idea migliore di come impostare i parametri.


Buona fortuna!

+0

Questa è un'ottima risposta. Vorrei solo aggiungere che 'nfft' fornisce una misura di quanto granulosa sia la risoluzione in frequenza. Un numero più alto di punti FFT fornirebbe una risoluzione più alta della frequenza, mostrando dettagli a grana fine lungo l'asse di frequenza dello spettrogramma se visualizzati. – AruniRC

+0

@AruniRC Questo è molto vero. Lo inserirò. Grazie! – rayryeng