Qual è una buona funzione della finestra FFT per rifiutare DC?


9

Sto usando un FFT per analizzare quello che è essenzialmente l'inviluppo di potenza di un segnale (vedi qui per informazioni sul progetto contenente) e, poiché i numeri di potenza sono sempre positivi, per eliminare il componente DC mi piacerebbe usare una finestra funzione che è 50/50 positiva e negativa, rispetto alla solita funzione tutto positiva.

Ho preso la funzione " flat top ", rimosso il a0bias e convertito da coseno a seno, ma non sono sicuro che sia ottimale (o addirittura significativo).

Qualche suggerimento?


9
sottrarre la media prima del finestrino?
endolith

Risposte:


1

La prima derivata delle più comuni funzioni di finestra continua (von Hann, ecc.) Rifiuterà DC, ma avrà comunque una risposta in frequenza di magnitudo simile a quella della funzione di finestra originale; quindi puoi ancora usare i tuoi criteri di "bontà" originali per la selezione della finestra, se non è correlato alla fase.


2
Sebbene questa risposta sia principalmente corretta, è più un commento, quindi espandersi su di essa sarebbe molto utile.
Phonon,

Tuttavia, risponde alla mia domanda fino a un certo punto.
Daniel R Hicks,

1
C'è un motivo per farlo invece di sottrarre la media prima del finestrino?
nibot,

Se la risposta di JasonR è corretta, allora l'idea di rifiutare DC tramite la funzione finestra (e ottenere comunque una buona stima spettrale) non funzionerà.
nibot,

@nibot: un possibile motivo potrebbe essere che una somma più sottrazione non è possibile (non disponibile in una pipeline hardware fissa o latenza, per esempio.)
hotpaw2

7

Se ti preoccupi di fare un'analisi spettrale su un segnale con un grande componente DC e vuoi sopprimere quel picco DC, allora una funzione finestra non è quella che desideri. Come notato da altre risposte, un filtro passa-alto (o, visto in modo diverso, un filtro notch con la tacca a frequenza zero) è una soluzione appropriata.

Per capire perché, è necessario pensare a cosa fa l'applicazione di una funzione finestra alla risposta in frequenza di ogni uscita DFT. Il DFT è definito come:

X[K]=Σn=0N-1X[n]e-j2πnKN

Un'interpretazione di come funziona il DFT è come un banco di filtri a frequenze equidistanti tra - f sN efs-fS2 . Rifusione della somma sopra come segue:fS2

X[K]=Σn=0N-1XK[n]

dove:

XK[n]=X[n]e-j2πnKN

Quindi, l' output DFT -th viene generato prendendo prima il segnale di input x [ n ] e moltiplicandolo per un esponenziale complesso in frequenza - 2 π kKX[n] per produrre un segnale convertito verso il bassoxk[n]. Il segnale risultante viene quindi sommato sullafinestraN-sample per produrre l'uscita DFTX[k]. Questo è effettivamente un filtro a media mobile (a volte chiamato filtro boxcar), la cui risposta all'impulso può essere descritta come:-2πKNXK[n]NX[K]

b[n]={1, x=0,1,,N10, otherwise

La risposta di grandezza del filtro boxcar può essere trovata prendendo la trasformata di Fourier a tempo discreto (DTFT) di quella risposta all'impulso:

|H(f)|=|sin(Nπffs)sin(πffs)|

f

x[n]

X[K]=Σn=0N-1w[n]X[n]e-j2πnKN=Σn=0N-1w[n]XK[n]

XK[n]

|H(f)|=|W(f)|

W(f)w[n]X[n]

Quindi, se vuoi davvero solo cancellare il componente DC del segnale, rimuoverlo tramite un altro tipo di pre-elaborazione, non una finestra nel dominio del tempo, è la strada da percorrere. Ad esempio, è possibile utilizzare un filtro passa-alto lineare con una frequenza di taglio molto bassa o sottrarre prima la media stimata dal segnale. La scelta tra questi metodi dovrebbe essere basata su quali altri vincoli ha il tuo sistema.


3

Non penso che usare una funzione di finestra sia un buon modo per rimuovere DC. Come menzionato da Endolith, un metodo comune è solo quello di sottrarre la media prima del finestramento. Un'altra opzione sarebbe quella di applicare un filtro passa-alto al segnale prima dell'analisi, diciamo, con una frequenza di taglio di circa 10 Hz.


L'applicazione di un filtro passa-alto non è un'opzione se il segnale non esiste in forma analogica. Ma credo che tu (e l'endolito) abbia ragione sul fatto che la sottrazione della media dovrebbe funzionare, specialmente se viene usata anche una finestra che porta gli endpoint a zero. (E un filtro passa-alto avrebbe bisogno di un taglio più basso, dato che sto analizzando il segnale fino a forse 0,01 Hz.)
Daniel R Hicks,

2
Perché pensi di aver bisogno di un segnale analogico per applicare un filtro passa-alto? È certamente possibile creare un HPF digitale.
Jason R,

@JasonR - Devo ammettere che sono abbastanza ignorante in queste cose (i miei corsi di segnali erano 40 anni fa, praticamente prima di FFT, et al), ma mi sembra che per creare un filtro passa-alto digitale io dovrei prima produrre la trasformata di Fourier del segnale.
Daniel R Hicks,

1
Non è affatto così; puoi generare un filtro passa-alto così come un passa-basso, passa-banda, ecc. In effetti, ci sono tecniche per prendere un prototipo di filtro passa- basso e trasformarlo in un filtro passa-alto che ha una risposta analoga. La maggior parte dei software per la progettazione di filtri (ad esempio MATLAB) può essere utilizzata per realizzare tutti i tipi di filtri.
Jason R,

1
Non sono sicuro di dove tu abbia avuto l'impressione che l'implementazione di un filtro passa-alto richieda differenziazione. La differenziazione è un'operazione passa-alto, ma non è un'implementazione adatta per un filtro passa-alto (poiché la sua risposta in frequenza è una rampa, il che amplifica le frequenze più alte dove spesso è presente il rumore). L' articolo di Wikipedia sui filtri passa-alto sarebbe un buon inizio.
Jason R,
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.