Cos’è uno spettrogramma e come si impostano i suoi parametri?

Sto cercando di tracciare lo spettrogramma del mio segnale del dominio del tempo dato:

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 dovrebbero essere dati. Questi valori che sto usando, ho fatto riferimento alla documentazione online dello spectrogram di MATLAB. Sono nuovo di MATLAB e non mi viene l’idea. Qualsiasi aiuto sarà molto apprezzato!

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 della Trasformata di Fourier a breve termine . 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 visuale 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 colors 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 temporale, 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 colors. Più scuro è il colore, più bassa è la componente di magnitudine a quella frequenza e viceversa.


Quindi! … ora sei armato di quello, andiamo a vedere come funziona MATLAB in termini di funzione e dei suoi parametri. Il modo in cui chiami spectrogram conforms a questa versione della funzione:

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

Passiamo attraverso ogni parametro uno per uno in modo da ottenere una maggiore comprensione di ciò che ciascuno fa:

  • x – Questo è il segnale di ingresso nel dominio del tempo che si desidera trovare lo spettrogramma di. Non può essere molto più semplice di così. Nel tuo caso, il segnale che vuoi 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 sono il segnale che vuoi trovare lo spettrogramma di.

  • window – Se si richiama, 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. Puoi determinare quanto è grande la finestra in termini di campioni per:

    window_samples = window_time/Ts

    Ts è il tempo di campionamento del tuo 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 qui alcun suggerimento su quale sia la dimensione ottimale … ed è per questo che le wavelet sono preferite quando si tratta di decomposizione tempo-frequenza. Per ogni “chunk”, i blocchi vengono decomposti in blocchi più piccoli di larghezza dynamic in modo da ottenere una miscela di buon tempo e localizzazione della frequenza.

  • noverlap – Un altro modo per garantire una buona localizzazione delle frequenze è che i blocchi si sovrappongono . Un adeguato spettrogramma assicura che ogni chunk abbia un certo numero di campioni che si sovrappongono per ogni chunk e noverlap definisce quanti campioni sono sovrapposti in ciascuna finestra. L’impostazione predefinita è il 50% della larghezza di ogni blocco.

  • nfft – Stai essenzialmente prendendo la FFT di ogni pezzo. nfft ti dice quanti punti FFT vuoi calcolare per pezzo. Il numero predefinito di punti è il più grande tra 256 o floor(log2(N)) dove N è la lunghezza del segnale. nfft fornisce anche una misura di quanto la risoluzione della frequenza sarà a grana fine. 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 è ansible sostituirlo a qualsiasi frequenza di campionamento del segnale.


Pertanto, ciò che probabilmente dovresti prendere da questo è che non posso davvero dirti 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.


In bocca al lupo!