Warum dämpft mein Sperrfilter andere Frequenzen?

12

Hier ist mein Code für ein zweifarbiges Signal, bei dem ich ein Stoppband verwende, um den höheren Ton zu entfernen, und dann das Vorher (in Blau) und Nachher (in Rot) im Frequenzbereich zeichne, nachdem ich mein Signal mit den Filterkoeffizienten gefaltet habe .

Wenn Sie diesen Code in Matlab einfügen, können Sie deutlich erkennen, dass die höhere Frequenz vom Filter erfolgreich entfernt wurde. Aus irgendeinem Grund wurde jedoch die Amplitude der niedrigeren Frequenz halbiert, und je mehr ich die Anzahl der Filterkoeffizienten erhöhe. Je mehr es nur meine ganze Kurve abflacht, warum tritt dies auf? Und wie kann ich das verhindern, damit sich das Sperrband nicht nach außen ausbreitet? Hier ist das Bild und der Code:

Bildbeschreibung hier eingeben

fSampling = 8000;
tSampling = 1 / fSampling;

t = 0: t Abtastung: 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));

Diagramm (Achse, MagXF);
warten Sie mal

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

Handlung (Achse, MagYF, 'r')
Zaubertrank
quelle
1
Die Bandpass- / Bandsperrfilterung ist von Natur aus nicht perfekt und wirkt sich immer auf Bereiche des Spektrums aus, die Sie in Ruhe lassen möchten. Es ist die Natur des Tieres.
Daniel R Hicks
1
Hmm ... gibt es Möglichkeiten, dem entgegenzuwirken? Oder ein anderer relativ einfacher Filter, der besser geeignet wäre? Ich weiß nicht viel über Notch-Filter, aber ich weiß, dass es sich um sehr enge Bandsperren handelt und dass Matlab Befehle für sie hat.
Zaubertrank,
2
Wie ich schon sagte, es ist inhärent. Das Entwerfen eines Filters ist immer ein Kompromiss hinsichtlich der Optimierung einiger Parameter auf Kosten anderer (und auf Kosten der Kosten).
Daniel R Hicks

Antworten:

12

Filter haben immer einen inhärenten "Abfall" in ihrem Frequenzgang, weil Sie praktisch kein Durchlassband realisieren können, das eine perfekte Rechteckfunktion ist. Bei einem Tiefpassfilter wird der Punkt, an dem die Stärke Ihres Frequenzgangs auf -3 dB abfällt, als Durchlassband und alles darüber hinaus als Stoppband bezeichnet (technisch gesehen alles über die Eckfrequenz hinaus, aber wir nehmen das Eckfrequenz auf -3dB). Wie schnell sich Ihr Frequenzgang über das Durchlassband hinaus abschwächt, hängt von der Filterlänge ab.

Wenn Sie sich den Frequenzgang Ihres Filters htansehen, werden Sie feststellen, dass er bei 1000 Hz auf -6 dB abfällt:

Bildbeschreibung hier eingeben

Es ist also sinnvoll, dass die Leistung nach dem Filtern um 6 dB abfällt, was Sie in Ihrer Figur als Halbierung der Amplitude sehen.

Wenn Sie sich die Dokumentation für die von fir1Ihnen verwendete Funktion angesehen hätten, hätten Sie dies auch erkannt (Hervorhebung meiner):

B = fir1(N,Wn)entwirft ein Ndigitales Filter FIR Tiefpass- um -te und liefert die Filterkoeffizienten in N+1Längenvektor B. Die Grenzfrequenz Wn muss zwischen liegen 0 < Wn < 1.0und 1.0 der halben Abtastrate entsprechen. Der Filter Bist real und hat eine lineare Phase. Die normalisierte Verstärkung des Filters bei Wn beträgt -6 dB.

Um schärfere Filter zu erstellen, bei denen die Antworten einem Rechteck sehr nahe kommen, müssen Sie IIR-Filter verwenden, die mit einer Reihe von Stabilitätsproblemen usw. einhergehen, aber definitiv eine Option darstellen. Sie können meine Antwort hier für einige Ideen zur Implementierung eines IIR-Filters zweiter Ordnung mit diskreter Form und sehr scharfen Ecken sehen. Das Beispiel gibt es für einen Bandpassfilter, aber Sie können die Dokumente für die dort verwendeten Funktionen nachlesen und selbst eine Tiefpassversion implementieren.

Lorem Ipsum
quelle
1

Es braucht Zeit, bis ein Filter "entscheidet", ob sich ein Signal gerade innerhalb oder gerade außerhalb eines Filterübergangs befindet. Eine Lösung besteht darin, den Filterübergang nur von einem interessierenden Signal zu entfernen, z. B. auf halbem Weg zwischen Ihren beiden Testsignalen, wo in Ihrem Testfall nur sehr wenig Signal vorhanden ist, das durch eine unvollständige Entscheidung verzerrt werden kann.

hotpaw2
quelle
0

Verwenden

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

Stattdessen ist die Dämpfung bei F0 sehr niedrig und bei F1 sehr hoch.

Bildbeschreibung hier eingeben

Telaclavo
quelle