mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Halfbandfilter zur Dezimierung


Autor: Burkhard K. (buks)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
In der Literatur werden Halfbandfilter im Zusammenhang mit 
Samplerate-Dezimierung als besonders "implementationseffizient" erwähnt. 
Aber sind Halfbandfilter auch wirklich effiziente Antialias-Filter?

In meiner Anwendung sample ich Ultraschallsignale von 15 kHz bis ca. 180 
kHz (zur Zeit noch) mit einem 12-bit, 1MSp/s ADC (AD7476A); für die 
weitere Verarbeitung soll die Samplerate auf 500 kSp/s dezimiert werden.

Zur Vermeidung von Aliaseffekten müsste (untere Frequenz: 15 kHz) das 
Stoppband bei 250+15 kHz = 265 kHz beginnen; ein entsprechendes Filter 
(Kaiser Window, Beta=7.2) benötigt 99 Taps für eine Dämpfung von -36 
dBFS @265 kHz (zur Berechnung siehe Artikel von Roberson [1])

Verzichte ich dagegen auf die Halfbandstruktur und akzeptiere eine 
geringe Absenkung bei 180 kHz (< -1 dB), lässt sich eine vergleichbare 
Performance (-36 dbFS) mit einem 43-Tap FIR-Filter erzielen (ebenfalls 
Kaiser, Beta=7.2).

So gesehen scheinen Halfbandfilter - zumindest für Anwendungen mit 
größerer Bandbreite -  gar nicht mehr so attraktiv. (Mangels Matlab 
stehen mir die von Robertson in seinem Artikel erwähnten Funktionen 
firhalfband() bzw. firpm() nicht zur Verfügung).

DSP-Anfänger-Zusatzfrage: Wieviel Stoppband-Dämpfung will man 
sinnvollerweise in einem Antialias-Filter vor der Dezimierung?

[1] https://www.dsprelated.com/showarticle/1113.php

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> auch wirklich effiziente Antialias-Filter?
Klar sind sie das, weil sich mit HBF u.a. Kaskaden aufbauen lassen, die 
sehr effizient arbeiten. Man muss sich aber klar vor Augen führen, dass 
"effizient" bedeutet, dass man viel Filter für wenig Resourcen bekommt - 
nicht, dass man ein maximales Ergebnis hat. Ist ähnlich wie bei CIC. Die 
zieht auch jeder Zweite spontan aus dem Köcher, wenn er im Hinterkopf 
hat, wie effizient die sein sollen.

> DSP-Anfänger-Zusatzfrage: Wieviel Stoppband-Dämpfung will man
> sinnvollerweise in einem Antialias-Filter vor der Dezimierung?
Die maximale natürlich. Da dies ein weicher Wert ist, stellt sich die 
Frage nach den einsetzbaren resourcen.

Man kann z.B. auch einen Viertelbandfilter bauen, mit der doppelten 
Frequenz abtasten und die Grenzfrequenz (nicht) auf 1/4 setzen. Filter 
bei doppeltem resourcen-Einsatz gefühlt 30% besser.

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Burkhard K. schrieb:
> Zur Vermeidung von Aliaseffekten müsste (untere Frequenz: 15 kHz) das
> Stoppband bei 250+15 kHz = 265 kHz beginnen; ein entsprechendes Filter
> (Kaiser Window, Beta=7.2) benötigt 99 Taps für eine Dämpfung von -36
> dBFS @265 kHz (zur Berechnung siehe Artikel von Roberson [1])

Hm - ich haett' ja eher auf 500kHz-180kHz= 320kHz als Stopbandanfang 
getippt.

Ansonsten sind von den 99 Taps denn ja fast die Haelfte 0, d.h. es 
bleiben dann noch ca. 49 Multiplikationen, die man tatsaechlich machen 
muss - dann ist der Unterschied zu deinem 43 Tap Filter nicht mehr so 
riesig. (Da die Filter wohl symmetrisch aufgebaut sind, halbieren sich 
die Anzahl der Multiplikationen ggf. nochmal, aber dann bei beiden 
Filtertypen).

Burkhard K. schrieb:
> DSP-Anfänger-Zusatzfrage: Wieviel Stoppband-Dämpfung will man
> sinnvollerweise in einem Antialias-Filter vor der Dezimierung?
Soviel man halt braucht, d.h. wieviel Pegel hab' ich in meinem 
Originalsignal noch an der oberen Bandgrenze und was kann ich davon noch 
"runtergefaltet" in meinem dezimierten Signal tolerieren?

Gruss
WK

Autor: Burkhard K. (buks)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dergute W. schrieb:
> Hm - ich haett' ja eher auf 500kHz-180kHz= 320kHz als Stopbandanfang
> getippt.

Du hast natürlich recht, danke für die Korrektur. Damit entspannt sich 
die Lage deutlich, mit 47 Taps komme ich schon bei 300 kHz auf -72 dB.

Jürgen S. schrieb:
> Die maximale natürlich. Da dies ein weicher Wert ist, ...
Dergute W. schrieb:
> was kann ich davon noch
> "runtergefaltet" in meinem dezimierten Signal tolerieren?

Maximal wären bei einen 12bit Wandler -72 dB. Wenn ich über den Daumen 
gepeilt zwei Bit abziehe, die sowieso im Rauschen untergehen, dann -60 
dB. Aber wie kann ich (vorher) abschätzen, wieviel Aliasing meine 
Anwendung vertragen kann? Wenn z.B. ein nachgeschalteter Frequenzzähler 
ab dem 8. MSB oder größer anspricht, reicht dann eine Dämpfung von 8 Bit 
= -48 dBFS?

Autor: engineer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> Maximal wären bei einen 12bit Wandler -72 dB. Wenn ich über den Daumen
> gepeilt zwei Bit abziehe, die sowieso im Rauschen untergehen, dann -60
> dB. Aber wie kann ich (vorher) abschätzen, wieviel Aliasing meine
> Anwendung vertragen kann?

Das müsste schon von der Anwendung her betrachtet werden und kann dir 
keiner sagen. In der Regel sollte der Fehler einen Faktor 10 kleiner 
sein, als das was die Kette insgesamt braucht.

Der Ansatz, es über den Wandler zu definieren, wäre die Ersatzlösung, 
nach dem Motto, "Analogfehler in der Größenordnung des 
Auflösungsfehlers", allerdings musst du den summarischen Fehler 
betrachten, also die digits die sich ergeben, wenn alle Frequenzen 
wirken und "aliasen". Dazu braucht es wieder eine Annahme über das 
Spektrum und wieviel davon im Stoppband liegt

Diese könnte man heranziehen durch
- bei allgemeiner Niederfrequenz einer Pauschalbetrachtung eines weißen 
Rauschens
- bei konkret Audio einer Pauschalbetrachtung eines rosa Rauschens
- bei Impulsübertragungen einer Annahme eines Rechteckspektrums
- bei Radar eine Betrachtung des chirp-Spektrums
- bei einer Einzelfrequenz eben der Energie dieser konkreten Frequenz

Du brauchst also das Verhältnis der beiden Werte, die durch Faltung des 
gewünschten Spektrums bei minimaler Aussteuerung mit dem Passband 
einerseits und Faltung des darüber liegenden unerwünschten Spektrums im 
Stoppband bei maximaler Aussteuerung andererseits entstehen.

Das macht aber kaum jemand, weil sich die meisten nicht so recht klar 
sind, was alles bei ihren Anwendungen im Stoppband herumgeistert und 
ungünstig rückgefaltet wird.

Bei "Normalaudio" aus Mikrofonen, bekommt man kaum mehr, als 20kHz 
geliefert, die Dank der schwachen Aussteuerung des oberen Bandbereiches 
kaum besetzt sind. Da liegt dann bei einem "S" maximal 10% im Stoppband. 
Eine Dämpfung von 40dB sind dann schon ausreichend, um akustisch wenig 
Klirr zu bekommen.

Bei einem Ultraschallton aus einem Ultraschallgeber sieht es etwas 
anders aus.

Ebenfalls anders sieht es aus, will man mit einem digitalen System einen 
Analogsynthesizer modellieren, welcher echte Rechtecksignalformen 
mischt. Man kann durch zwei Überlegungen zeigen, dass man dazu dann sehr 
gut filtern muss, hochfrequent filtern muss und hoch abtasten muss:

1) Oberwellenanteil des Rechtecks im Unhörbaren liegt bei 40%
2) Oberwellenanteil eines Phasingsignals geht in Richtung 90%.

Da man dies Oberwellen nicht hören soll, dürfen sie nicht nach unter 
gefaltet werden. Eine nähere Betrachtung liefert dann, dass man mit ca. 
100kHz Filtern und mit 384kHz abtasten muss. Um es nahezu perfekt zu 
machen komme ich auf 150kHz und 768kHz:

http://www.96khz.org/oldpages/comparison48khzto768khz.htm

Die letzte Grafik zeigt das Problem.

Vielleicht ist das ein Anstoß für deine Ultraschallthematik.

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups nicht eingelogged gewesen.

Einen Nachtrag noch: Warum und wohin soll die Rate eigentlich dezimiert 
werden? Wenn Ultraschall von 180kHz prozessiert werden soll, gibt es 
eigentlich nichts mehr viel zu dezimieren. Es sei denn es wäre ein 
digitales PDM-Signal wie bei deiner damaligen Frage:

Beitrag "MEMS Ultraschallmikro mit PDM"

Autor: Burkhard K. (buks)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Jürgen S. schrieb:
> Warum und wohin soll die Rate eigentlich dezimiert
> werden? Wenn Ultraschall von 180kHz prozessiert werden soll, gibt es
> eigentlich nichts mehr viel zu dezimieren.

Von 1000 auf 500 kSps/s.

Zum einem, da der DDR-Zwischenspeicher auf dem FPGA-Board begrenzt ist, 
statt vielleicht 3.5 Sekunden (2x2x16 Bit) passt das Doppelte rein, zum 
anderen weil es später wohl eh ein 500 kSps/s ADC werden wird - und dann 
im Hinblick auf die Datenmenge, die bei Übertragung zum PC anfällt.

engineer schrieb:
> weil sich die meisten nicht so recht klar
> sind, was alles bei ihren Anwendungen im Stoppband herumgeistert und
> ungünstig rückgefaltet wird.

Eine gewisse Vorstellung habe ich schon, siehe angehängte FFT. Den 
Ansatz PDM-Mikro habe ich aufgegeben (reicht nicht weit genug), 
stattdessen benutze ich meinen eigenen Vorverstärker. Der hat wegen des 
notwendigen Ausgleich des abfallenden Mikrofrequenzgangs (Knowles 
FG-23629, -12 dB/Octave ab 12 kHz) einen nur flach auslaufenden 
Noisefloor, um den sich das Antialiasfilter vor dem ADC kümmern muss.

Zur Messung habe ich Verstärker und Ultraschallgeber in eine mit 
Schaumstoff gepolsterte Kiste gesperrt. Der Peak bei ca. 630 kHz scheint 
eine RF-Einstreuung zu sein, die meisten anderen sind wohl reale 
Verzerrungen aus der Sender-Empfänger-Strecke.

Wie es in der freien Wildbahn aussieht, muss sich dann ab Frühjahr 
zeigen. Fledermausortungsrufe z.B. sind sehr oft Downchirps mit 
vermutlich geringem Oberwellenanteil, der bei Grillen oder Zikaden 
dagegen sehr ausgeprägt sein dürfte (Sägezahn). Es geht also weniger 
darum "perfekt" zu sein, als vielmehr einen guten Kompromiss 
hinzubekommen. Etwas Rauschen darf es schon.

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Burkhard K. schrieb:
> Von 1000 auf 500 kSps/s.
Dann würde ich auf die maximale Frequenz fokussieren, die noch ortbar 
sein soll, also z.B. die 180kHz.
Also z.B. ein einfacher FIR mit GF bei 500/3=166kHz oder 500*3/8=187,5, 
das gibt einfache Koeffizienten.

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Achja - einen habbich auch noch zum Thema:
Bisschen bloed fuer die Anwendung hier ist, dass natuerlich ein 
Halbbandfilter, egal wie steil es auch ist, bei seiner Grenzfrequenz nur 
6dB Daempfung hat...

Gruss
WK

Autor: Markus W. (elektrowagi78) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dergute W. schrieb:
> bei seiner Grenzfrequenz nur
> 6dB Daempfung hat...

Was soll dabei das Besondere sein? Die Grenzfrequenz eines jeden Filters 
ist doch so definiert, dass ein gewisser Abfall da ist?

Autor: Dergute W. (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Ich schrub nix von "Besondere" sondern von "Bisschen bloed". Und jetzt 
ueberleg' mal, wenn du eine 2:1 Dezimation machen willst, wo das 
Aliasspektrum losgeht, und wie ein Tiefpass aussehen sollte, damit das 
sicher um mehr als 6dB gedaempft wird - wenn man das denn will.

Gruss
WK

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.