Perché ci sono colline a forma di pettine in un periodogramma?


8

Sto giocando con il periodogramMATLAB. Ho creato un semplice script per osservare come si comporta:

rng(1);  %# initialize the random number generator

Fs = 1000;  %# Sampling frequency
duration = 0.1; %# seconds

A = 1; %# Sinusoid amplitude
f = 150; %# Sinusoid frequency
eps = 0.01;

t = 0:1/Fs:duration;
x = A * sin(2*pi*f*t) + eps * randn(size(t));

periodogram(x,[],1024,Fs);

inserisci qui la descrizione dell'immagine

Non ho problemi con il codice e posso scrivere la mia periodogramfunzione usando gli algoritmi indicati nella documentazione, ma mi chiedo il motivo teorico dietro le colline a pettine che non sono 150 Hz. Cosa ottengo quelli invece di ottenere un singolo picco oltre 150 Hz? C'è qualcosa di speciale nelle distanze delle vette di queste colline?

Risposte:


5

Non sono del tutto soddisfatto della risposta di Itamar Katz, quindi ecco la mia spiegazione.

Il DFT di un segnale complesso di lunghezza , èNx[n]=eı2πfn/N

X[k]=F{x[n]}=eı2π(fk)1eı2π(fk)/N1

Quindi, la potenza o la risposta al quadrato della grandezza è data da

|X[k]|2=(sin(π(fk))sin(π(fk)/N))2

Come puoi vedere, l'espressione sopra è zero ogni volta che è un numero intero. Puoi convincerti che il denominatore è zero in un solo punto e, a questo punto, prendere i limiti ti dà un valore per il rapporto. Quindi, non vi è alcun punto in cui l'espressione esploda.fkN2

Ora quando prendi il log dell'espressione precedente, è (o del resto, in qualsiasi base) e quindi ottieni valori nulli ovunque tu abbia uno zero. Questo è ciò che si traduce nel "pettine come colline" nella tua trama.log10(0)

Ecco una breve illustrazione in Mathematica:

Clear@X
X[f_, n_] := (Sin[π (f - #)]/Sin[π (f - #)/n])^2 &
Plot[X[3, 10][k], {k, -5, 5}, PlotRange -> All]

inserisci qui la descrizione dell'immagine

La frequenza è sull'asse x e la potenza (lineare) è sull'asse y. Puoi vedere che gli zeri si verificano a valori interi e il picco è a 3, che è la frequenza che avevo scelto. Ora prendendo di quanto sopra, ottieni null che danno origine alla struttura a pettinelog10

inserisci qui la descrizione dell'immagine

Ecco un altro esempio con una più grande , che mostra più null.N

inserisci qui la descrizione dell'immagine


12

Un singolo picco (come lo chiami tu) appare teoricamente solo per una sinusoide di lunghezza infinita. Poiché il segnale è lungo 100 campioni, non è infinito. In realtà hai moltiplicato il tuo segnale infinito con una finestra che ha un valore di 1 su 100 campioni e 0 altrove. Poiché la moltiplicazione nel dominio del tempo equivale alla convoluzione nel dominio della frequenza, il tuo spettro è una convoluzione del singolo picco e della risposta in frequenza della finestra (tra cui si chiama finestra rettangolare). Questa è la funzione che hai.

Ti consiglio di leggere le finestre: http://en.wikipedia.org/wiki/Window_function


+1 Oh, sapevo della finestra ma non riuscivo a creare il collegamento. Grazie!
petrichor,

1
Viene visualizzato un singolo picco indipendentemente dalla finestra utilizzata, se la frequenza corrisponde esattamente alla lunghezza della finestra. gist.github.com/236567
endolith

1
Questo non è corretto Per una finestra rettangolare questo è vero, dal momento che si campiona la funzione finestra nel dominio della frequenza esattamente nei suoi zeri, quindi si è "ciechi" ai lobi laterali. Tuttavia non è vero per una funzione di finestra generale.
Itamar Katz,

vedi esempio git: //gist.github.com/1403819.git
Itamar Katz,

@ItamarKatz: Sì, hai ragione. Intendevo "senza finestra".
endolith
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.