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/Abtastratenkonvertierung http://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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.