Für eine Berechung sollen Daten von 10kHz bis 10MHz durch einen Bandpass
gehen, der möglichst genau ist. Die Überabtastung beträgt 10,
die Daten werden also mit 100 MHz gesampelt. Mit einem Designer gelange
ich zu einer TAP-Zahl von 512, was von der Berechnungsgeschwindigkeit
reicht.
Die Filterantwort sieht bezüglich der Dämpfung gegen HF auf den ersten
Blick mehr als ganz gut aus,
wenn ich aber reinzoome, ist es nicht steil genug denke ich. Besonders
unten fällt das Filter gegen f=0 hin nur wenige dB ab.
Ich denke, dass es an der TAP-Zahl liegt, denn eine 10kHz-Welle wird vom
Filter nur mit 10% der Periode erfasst. Brauche ich jetzt 10.000 TAPs,
um unten genug Steilheit zu bekommen?
>>Brauche ich jetzt 10.000 TAPs, um unten genug Steilheit zu bekommen?
Wenn das mal reicht. Der FIR kommt bei den kleinen Frequnzen nicht so
schneller runter im Betragsfrequenzgang. Ein IIR als Hochpaßanteil
könnte es bringen: Nullstelle bei 0, konjugiert komplexe Pole, die den
Frequenzgang bei 10kHz hochzwingen. Der macht dann aber üble
Phasenverzerrungen. Außerdem muß man für solche 'Steilheiten' im
Frequenzgang mit sehr großen Bitbreiten rechnen.
Das Problem ist der mismatch zwischen den 100Mhz Abtastrate und der
10kHz Grenzfrequenz, das paßt nicht zusammen.
Cheers
Detlef
Üblicherweise wird die Abtastfrequenz durch Nutzung ovn Multiratenfiler
passend herabgesetzt, um weiter herabreichende Filter zu bauen. Wenn man
mit HBF arbeitet, wird je Oktave die Stufenzahl quasi verdoppelt.
Während die oben dann durchaus 64 taps reichen, hättest Du bei Deinen 10
Oktaven quasi 64*128 = 65536. Allerdings hat die Filterreduktion
entsprechende Artefakte.
Stichwort "Abtatstratenkonvertierung" mit der Nutzung mehrerer Filter.
Damit brauchst du keine so steilflankigen Filter und sparst
Rechenleistung. Wenn du schon 10 fach abgetastet hast, könntest du im
ersten Schritt mit einem TP und großer Flankenbreite filtern (wg.
Aliasing), dann mit der Abtastfrequenz um das 5fache runtertasten und
nochmals filtern. Diesmal steilflankiger. Danach nochmals um die Hälfte
runtertakten und du hast ein schönes, sauberes Spektrum das mit
einfachen Mitteln gefiltert wurde.
Ansonsten fallen mir noch CIC- und Polyphasenfilter zu dem Thema ein.
Einfach zu integrieren und schnell, da keine Multiplikationen nötig
sind.
http://de.wikipedia.org/wiki/Abtastratenkonvertierunghttp://de.wikipedia.org/wiki/Cascaded-Integrator-Comb-Filter
Pascal O. schrieb:> Damit brauchst du keine so steilflankigen Filter und sparst> Rechenleistung.
Da muss ich widersprechen. Aufgrund der Unzulänglichkeiten realer Filter
wird bei gringerem Abstand von fs zu fg eher ein steileres Filter
benötigt. Das ist mithin der Grund für die Forderung nach
Abtastratenerhöhung bei digitalen Messystemen.
Das gilt für das analoge Antialiasingfilter, nicht aber für digitale
Filter. Die sind um so einfacher, je größer die relative Bandbreite der
Filter ist. Also besser mehrstufig filtern und dazwischen eine
Abtastratenwandlung, als in einem Schritt ein sehr schmales Filter zu
implementieren.
Für den 10 kHz-Hochpass hilft das hier aber nichts, da ja 9,99 MHz
Bandbreite erhalten bleiben sollen. Da kommt man nicht um ein steiles
Filter herum.
Andreas Schwarz schrieb:> Für den 10 kHz-Hochpass hilft das hier aber nichts, da ja 9,99 MHz> Bandbreite erhalten bleiben sollen. Da kommt man nicht um ein steiles> Filter herum.
Sicher?
Man kann mit einem Multirate-FIR-Tiefpass 10KHz Grenzfreq. arbeiten.
Dann ein FIR Allpass der die Gruppenlaufzeit dieses Filters (im
Passband) nachbildet und wieder auf die Originalrate upsampled.
Differenz zwischen beiden und man hat einen Hochpass mit weniger
Rechenaufwand als der FIR Hochpass.
Auslegung ist wohl zeitraubender, man muss mehr auf Rechen- /
Rundungsfehler achten.
Oder Alternativ mit "FFT Konvolution" arbeiten?
Andreas Schwarz schrieb:> Die sind um so einfacher
Die Frage ist, was jetzt "einfacher" heissen soll. Dass bei geringeren
Raten weniger TAPs benötigt werden, ist ja einleuchtend, weil jedes TAP
einen mehrfach grossen zeitlichen Bereich umspannt. Wenn aber auf der
höheren Rate dieselbe Spanne (mit eben mehr Taps) verwended werden, ist
das Filter definitv genauer. Die Zahl der Stützstellen, mit der die
Filterkoeffizienten abgebildet werden steigt ja an.
Auch vom Implementierungsaufwand ist das einfacher, es werden nur mehr
Resourcen (RAMs und auch MULs) verwendet und viel mehr Berechungen
durchgeführt. Dies schläft vor allem bei DSP-Plattformen zu Buche, weil
dort jede Berechung sofort in die Zeit geht und Filterkoeffizienten aus
dem RAM holen IO-Leistung fordert.
Bei FPGAs z.B. ist das völlig anders: Man kann die Berechungen (sowohl
für mehrere Daten innerhalb eines Filterdurchlaufs, als auch für mehrere
Frequenzen, als auch für mehrere Filter!) parallel instanzieren und sich
die benötigten Filterkoeffizienten in Echtzeit berechnen lassen. Die
ganze Geschichte geht dann nur die Fläche, man spart sich aber die
aufwändige Behandlung der Phasen mittels Delays, wenn man phasenlineare
Filter erzeugen will.
Der Grund der Ratenreduktion ist also vornehmlich der, der
Resourceneinsparung, da durch das verminderte Rechnen erheblich Leistung
gespart werden kann, während sich die zusätzlichen Fehler in Grenzen
halten. Ausserdem kommt man irgendwann an den Punkt, dass es von den
Resourcen gar nicht mehr geht.
Wenn im vorliegenden Fall mit einer Ratenverviertelung gearbeitet würde,
müssten 3 Stufen implementiert werden, um auf eine sinnvolle Rate für
die geringen Frequenzen zu kommen. Dann würden 128 TAPs reichen, um
jeweils noch ein ca 8-16 fach oversampling zu haben. (Momentan sind es
ja 100/10 = Faktor 10) für die höchste Frequenz. Das ergäbe einen
relativ kleinen, optmierten Filter. Die 128 TAPs auf der untersten Stufe
müssten aber mit rechnerisch bis zu 4*4*4*128 = 8192 TAPS abgebildetet
werden.
Kast schrieb:> denn eine 10kHz-Welle wird vom Filter nur mit 10% der Periode erfasst.
Die 8192 TAPs mit 100 MHz brächten es auf ca 3/4 der Welle. Das reicht
für eine ausreichende Dämpfung gegenüber Nachbarfrequenzen. Wenn es
steiler sein soll, dann eben mehr. Ich würde 3 Wellenlängen der tiefsten
Frequenz nehmen, das hat sich bei meinen Audio-Apps bewährt. -> 32768
Taps :-)
Ansonsten müsste man über eine zusätzliche Vorfilterung nachdenken: Eine
zweistufige Filterarchitektur aus Tiefpässes mit geringer Rate, die
zunächst alles unterhalb von z.B. 5kHz ermittelt mit einem kaskadierten
Filter bei 7kHz, um ein sauberes Stoppband zu generieren, und diesen
tiefrequenzen Anteil dann abziehen. Danach das höhergradiges Filter, das
den Rest bearbeitet.
J. S. schrieb:> Die Frage ist, was jetzt "einfacher" heissen soll. Dass bei geringeren> Raten weniger TAPs benötigt werden, ist ja einleuchtend, weil jedes TAP> einen mehrfach grossen zeitlichen Bereich umspannt. Wenn aber auf der> höheren Rate dieselbe Spanne (mit eben mehr Taps) verwended werden, ist> das Filter definitv genauer. Die Zahl der Stützstellen, mit der die> Filterkoeffizienten abgebildet werden steigt ja an.
Naja, was heißt genauer... das sind einfach zusätzliche Freiheitsgrade,
die man nicht braucht. Solange das Filter im Sperrbereich ausreichend
unterdrückt ist's ja egal wie genau das aussieht.
Andersrum hat man bei der Implementierung von schmalbandigen IIR-Filtern
sogar massive Probleme mit der Genauigkeit, weil die Pole und
Nullstellen alle dicht beisammen liegen und man zig Bits braucht alleine
schon um die Koeffizienten zu quantisieren.
Andreas Schwarz schrieb:> Andersrum hat man bei der Implementierung von schmalbandigen IIR-Filtern> sogar massive Probleme mit der Genauigkeit
Ich gebe die Frage zurück: Welche Form der Genauigkeit war gemeint, bei
der es Probleme gibt?