Filter: Unterschied zwischen den Versionen
(→Digital: bißchen "aufgeräumt") |
|||
Zeile 43: | Zeile 43: | ||
Zuerst berechnen wir die Filterkoeffizienten mithilfe folgender Daten: | Zuerst berechnen wir die Filterkoeffizienten mithilfe folgender Daten: | ||
Filterart | # Filterart | ||
# Ordnung | |||
# Sample-Frequenz | |||
# Grenzfrequenz. | |||
Für die "analogen Koeffizienten" findet man z.B. im Tietze-Schenk Tabellen (nach Art und Ordnung sortiert). | Für die "analogen Koeffizienten" findet man z.B. im Tietze-Schenk Tabellen (nach Art und Ordnung sortiert). Diese rechnet man in "digitale Koeffizienten" um (Verhältnis Sample-Frequenz / Grenzfrequenz geht mit ein). Die Eingangsdaten werden mit diesen Koeffizienten im eigentlichen Filteralgorithmus verarbeitet. | ||
Diese rechnet man in "digitale Koeffizienten" um (Verhältnis Sample-Frequenz / Grenzfrequenz geht mit ein). | |||
Die Eingangsdaten werden mit diesen Koeffizienten im eigentlichen Filteralgorithmus verarbeitet. | |||
Gleich mal ein Beispiel: krit.Filter, 2.Ordnung, Samplefreq 100Hz, Grenzfreq 2Hz (Verhältnis 50:1) | Gleich mal ein Beispiel: krit.Filter, 2.Ordnung, Samplefreq 100Hz, Grenzfreq 2Hz (Verhältnis 50:1) | ||
<pre class="code"> | <pre class="code"> | ||
float afc[] = { /* analoge Filterkoeff. | float afc[] = { | ||
/* analoge Filterkoeff. Art Ordnung */ | |||
1.287188506, 0.414213562, 0.0, /* Krit. 2. */ | |||
0.869958884, 0.189207115, 0.0, /* Krit. 4. */ | |||
0.699891558, 0.122462048, 0.0, /* Krit. 6. */ | |||
0.601690062, 0.090507733, 0.0, /* Krit. 6. */ | |||
1.3617, 0.6180, 0.0, /* Bessel 2. */ | |||
1.3397, 0.4889, 0.7743, 0.3890, 0.0, /* Bessel 4. */ | |||
1.2217, 0.3887, 0.9686, 0.3505, 0.5131, 0.2756, 0.0, /* Bessel 6. */ | |||
0.0 | |||
}; | }; | ||
Ergebnis: | Ergebnis: | ||
AFC: A0= 0.870000 A1= 0.189200 | |||
DFC: C1=-1.494553 C0= 0.558423 D0= 0.015967 D1= 0.031934 D2= 0.015967 | AFC: A0= 0.870000 A1= 0.189200 | ||
(das sind die gesuchten fünf Werte) | DFC: C1=-1.494553 C0= 0.558423 D0= 0.015967 D1= 0.031934 D2= 0.015967 | ||
DFC | (das sind die gesuchten fünf Werte) | ||
DFC: 0x5fa7 0x8ef4 0x0416 0x82d 0x0416 (skaliert mit -16384 bzw. +65536) | |||
</pre> | </pre> | ||
Für höhere Ordnungen speisen wir das Ergebnis wiederholt (Ordnung / 2 mal) durch den Filter, allerdings (außer beim krit.Filter) jede Stufe mit anderen Koeffizienten. | Für höhere Ordnungen speisen wir das Ergebnis wiederholt (Ordnung / 2 mal) durch den Filter, allerdings (außer beim krit. Filter) jede Stufe mit anderen Koeffizienten. | ||
geeignete Literatur: | geeignete Literatur: | ||
www.digitalfilter.com | [http://www.digitalfilter.com www.digitalfilter.com] | ||
Dough Coulter: Digital Audio Processing | Dough Coulter: Digital Audio Processing |
Version vom 24. Februar 2005, 14:21 Uhr
Einführung
Als Filter bezeichnet man eine Schaltung die die Frequenzanteile eines Signals unterschiedlich stark abschwächt.
Tiefpass
Filtert Frequenzen oberhalb der Grenzfrequenz heraus. Der einfachste passive Tiefpass besteht aus einer R/C-Kombination.
R ___ o-----|___|----+----o | | --- --- C | | | GND
Grenzfrequenz
[math]\displaystyle{ f_g = \frac{1}{2 * \pi * R * C} }[/math]
Bei der Grenzfrequenz [math]\displaystyle{ f_g }[/math] besteht zwischen Eingangssignal und Ausgangssignal eine Phasenverschiebung von 45°.
Hochpass
Bandpass
u.a. auch Sender - Phänomen!
Notch-Filter
Realisierung
Analog
Digital
Hier unterscheiden wir zwischen IIR und FIR. Der Effekt ist der selbe, der Algorithmus und der Rechenaufwand verschieden. Speziell beim IIR muss man aufpassen, dass die Filterstufen nicht übersteuern.
Zuerst berechnen wir die Filterkoeffizienten mithilfe folgender Daten:
- Filterart
- Ordnung
- Sample-Frequenz
- Grenzfrequenz.
Für die "analogen Koeffizienten" findet man z.B. im Tietze-Schenk Tabellen (nach Art und Ordnung sortiert). Diese rechnet man in "digitale Koeffizienten" um (Verhältnis Sample-Frequenz / Grenzfrequenz geht mit ein). Die Eingangsdaten werden mit diesen Koeffizienten im eigentlichen Filteralgorithmus verarbeitet.
Gleich mal ein Beispiel: krit.Filter, 2.Ordnung, Samplefreq 100Hz, Grenzfreq 2Hz (Verhältnis 50:1)
float afc[] = { /* analoge Filterkoeff. Art Ordnung */ 1.287188506, 0.414213562, 0.0, /* Krit. 2. */ 0.869958884, 0.189207115, 0.0, /* Krit. 4. */ 0.699891558, 0.122462048, 0.0, /* Krit. 6. */ 0.601690062, 0.090507733, 0.0, /* Krit. 6. */ 1.3617, 0.6180, 0.0, /* Bessel 2. */ 1.3397, 0.4889, 0.7743, 0.3890, 0.0, /* Bessel 4. */ 1.2217, 0.3887, 0.9686, 0.3505, 0.5131, 0.2756, 0.0, /* Bessel 6. */ 0.0 }; Ergebnis: AFC: A0= 0.870000 A1= 0.189200 DFC: C1=-1.494553 C0= 0.558423 D0= 0.015967 D1= 0.031934 D2= 0.015967 (das sind die gesuchten fünf Werte) DFC: 0x5fa7 0x8ef4 0x0416 0x82d 0x0416 (skaliert mit -16384 bzw. +65536)
Für höhere Ordnungen speisen wir das Ergebnis wiederholt (Ordnung / 2 mal) durch den Filter, allerdings (außer beim krit. Filter) jede Stufe mit anderen Koeffizienten.
geeignete Literatur:
Dough Coulter: Digital Audio Processing
Tietze / Schenk: Schaltungstechnik
Fortsetzung / Erweiterung folgt...
Anwendungen
- Entfernen von Störsignalen aus einem Nutzsignal (z.B. bei einem Funkempfänger)
- Unterdrückung eines Wechselpannungsanteils
- ...