Perché il mio filtro stop band attenua le altre frequenze?


12

Ecco il mio codice per un segnale a due tonalità, dove uso una banda di arresto per rimuovere il tono più alto e quindi tracciato il prima (in blu) e dopo (in rosso) nel dominio della frequenza dopo aver contorto il mio segnale con i coefficienti di filtro .

Se inserisci questo codice in Matlab puoi vedere chiaramente che la frequenza più alta è stata rimossa con successo dal filtro, ma per qualche ragione l'ampiezza della frequenza più bassa è stata dimezzata e più aumento il numero di coefficienti del filtro, più appiattisce la mia intera curva, perché succede? E come posso impedirlo in modo che la banda di arresto non si propaghi verso l'esterno? Ecco l'immagine e il codice:

inserisci qui la descrizione dell'immagine

fSampling = 8000;
tSampling = 1 / fSampling;

t = 0: t Campionamento: 0,005;
F0 = 1000;
F1 = 3000;

xt = sin (2 * pi * F0 * t) + sin (2 * pi * F1 * t);
ht = fir1 (40, .25, 'stop');
yt = conv (xt, ht);

fAxis = -4000: 125: 4000-125;

xF = fft (xt, 64);
MagXF = fftshift (abs (xF));

plot (fAxis, MagXF);
resisti

yF = fft (yt, 64);
MagYF = fftshift (abs (yF));

plot (fAxis, MagYF, 'r')

1
Il filtro passa-banda / passa-banda è intrinsecamente imperfetto e influenzerà sempre le aree dello spettro che desideri lasciare da solo. È la natura della bestia.
Daniel R Hicks,

1
Hmm ... ci sono modi per contrastare questo? O un altro filtro relativamente semplice che sarebbe più adatto? Non so molto sui filtri notch, ma so che sono filtri molto stretti e che Matlab ha dei comandi per loro.
Zaubertrank,

2
Come ho detto, è inerente. La progettazione di un filtro è sempre un compromesso in termini di ottimizzazione di alcuni parametri a spese di altri (ea spese di spesa).
Daniel R Hicks,

Risposte:


12

I filtri hanno sempre un "roll-off" intrinseco nella loro risposta in frequenza, perché non puoi praticamente realizzare una banda passante che sia una funzione rettangolare perfetta. Per un filtro passa-basso, il punto in cui l'entità della risposta in frequenza scende a -3dB viene chiamato banda passante e tutto ciò che viene chiamato banda di arresto (tecnicamente, tutto oltre la frequenza d'angolo, ma prenderemo il la frequenza dell'angolo deve essere al livello di -3dB). La velocità con cui la risposta in frequenza si attenua oltre la banda passante dipende dalla lunghezza del filtro.

Se osservi la risposta in frequenza del tuo filtro, htnoterai che scende a -6 dB a 1000 Hz:

inserisci qui la descrizione dell'immagine

Quindi ha senso che la potenza diminuisca di 6 dB dopo il filtraggio, che vedi nella tua figura come un dimezzamento dell'ampiezza.

Se avessi guardato la documentazione per la fir1funzione che hai usato, lo avresti realizzato anche tu (enfasi sulla mia):

B = fir1(N,Wn)progetta un Nfiltro digitale FIR passa basso di ordine inferiore e restituisce i coefficienti del filtro in lunghezza N+1vettore B. La frequenza di taglio Wn deve essere compresa tra 0 < Wn < 1.0, con 1.0 corrispondente alla metà della frequenza di campionamento. Il filtro Bè reale e ha una fase lineare. Il guadagno normalizzato del filtro a Wn è di -6 dB.

Ora per creare filtri più nitidi, con risposte che si avvicinano molto a un rettangolo, dovrai utilizzare i filtri IIR, che presentano una serie di problemi con la stabilità, ecc., Ma sicuramente un'opzione. Puoi vedere la mia risposta qui per alcune idee sull'implementazione di un filtro IIR di sezione II di secondo ordine di forma discreta che fornisce angoli molto nitidi. L'esempio è per un filtro passa-banda, ma puoi leggere i documenti per le funzioni utilizzate lì e implementare tu stesso una versione passa-basso.


1

Ci vuole tempo perché un filtro "decida" se un segnale è appena dentro o appena fuori da una transizione del filtro. Una soluzione è semplicemente spostare la transizione del filtro lontano da qualsiasi segnale di interesse, come a metà strada tra i due segnali di test, dove, nel tuo caso di test, c'è un segnale molto piccolo da distorcere a causa di una decisione imperfetta.


0

Uso

ht = fir1(40,.5,'stop');

invece, avrai un'attenuazione molto bassa su F0 e un'attenuazione molto alta su F1.

inserisci qui la descrizione dell'immagine

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.