Beim upsampling von einer Abtastfrequenz zu z.B. der 4 fachen gibt es die Möglichkeit, die neuen samples dadurch zu gewinnen, dass man die alten stehen lässt, oder auch mit Nullen auffüllt und filtert. MATLAB bietet dazu beide Möglichkeiten in den einschlägigen toolboxen. Die Frage lautet nun: Wann nimmt man das eine und wann das andere?
Das eine ergibt den alten mittleren Pegel, das andere 1/4 davon.
Ich nehme bevorzugt ersteres (altes Sample stehen lassen), wg. genannter Pegeländerung, und weil der hochfrequente Anteil durch die hinzugefügten Samples im Pegel geringer ausfällt als bei 0-Samples. Demzufolge ist das zu erwartende Ergebnis nach einem Filter mit begrenzter Steilheit besser.
Moin, Beide Methoden unterscheiden sich z.B. im Spektrum des neuen Signals. Wenn du die Nullen einfuegst, entstehen gleichhohe Aliasspektren. Diese Spektren sehen anders aus, wenn du die Originalsampels wiederholst. Dieses Wiederholen ist nix anderes als die Null-einfueg-Methode mit nachgeschaltetem FIR Filter mit z.B. diesen Koeffizienten (fuer dein Beispiel mit ver4fachung): [1 1 1 1]. Diesen Filterfrequenzgang siehst du dann in deinem Ausgangssignal. Gruss WK
Dergute W. schrieb: > Diese > Spektren sehen anders aus, wenn du die Originalsampels wiederholst. > Dieses Wiederholen ist nix anderes als die Null-einfueg-Methode mit > nachgeschaltetem FIR Filter mit z.B. diesen Koeffizienten (fuer dein > Beispiel mit ver4fachung): [1 1 1 1]. > Diesen Filterfrequenzgang siehst du dann in deinem Ausgangssignal. Oh wow. Wieder was gelernt. Werde wohl in Zukunft doch lieber die Nullen einfügen.
Moin, Joe F. schrieb: > Werde wohl in Zukunft doch lieber die Nullen einfügen. Naja, jenachdem was du eigentlich haben willst. Oft will man nach dem Upsampeln nur das Originalsignal haben, dann muss man die 3 halben Aliasspektren mitm Tiefpass niederringen - da kann so ein [1 1 1 1] Filter, wenn's nix kostet, ja schonmal ein Anfang sein. Macht halt am oberen Ende deines Nutzsignals schon mehr als 3dB Daempfung und die Sperrdaempfung ist mit min. -11 dB nun auch nicht geeignet, um in Extase zu geraten. Also wird man wohl noch irgendein anderes Tiefpassfilter brauchen, um die Aliasspektren aus dem upgesampleten Signal rauszukriegen und die >3 dB Durchlassdaempfung muss man auch im Auge behalten. Solltest du aus irgendeinem Grund aber z.B. das oberste Aliasspektrum nach dem Upsamplen haben wollen, dann wuerde sich so ein Filter anbieten [1 -1 1 -1] oder jeder andere, bessere Hoch- oder ggf. auch Bandpass. Gruss WK
Das Auffüllen mit Nullen ist mathematisch das Richtige, da keine falschen Informationen hinzugefügt werden und das anschließende Filtern dann eine perfekte Interpolation ergibt. Allerdings ist es so, dass das nur bei guten Filtern auch der Fall ist. Reale Filter, besonders die billigen und kurzen kriegen da Probleme, insbesondere bei unsymmetrischen Datenströmen, bei denen die Null zwar eine Nullinformation ist, aber bei unvollständiger Filterung einen wesentlichen Signalbeitrag liefert, da der Datenstrom ein offset hat und die signaltechnische 0 den auch haben müsste. (dann ist der Fehler minimal). Bei Daten mit geringer Amplitude und hohem Offset ist das besonders eklatant. Da ist es in der Tat besser, man kopiert die Daten weiter, was einer Art von Vorfilterung entspricht. Für lineare Daten ist es z.B. eine perfekte Interpolation mit einem überlagerten Sägezahn mit der Grundfrequenz der Abtastfrequenz. Dessen Spektrum bekommt man schon durch eine einfache Summierung der Werte gut herunter.
Hier ist ein Beispiel von meiner HP eines Sinus mit Darstellung des Fehlers in 20facher Verstärkung. Im Bild inks mit jeweils 8 Werten bei 8-fach Überabtastung. Selbst bei doppelter Zahl der TAPs kriegt man bei der Version mit den Nullen erst einmal nur Rechtecke (bzw Geraden, wenn man die TAPs ausdehen würde). Es braucht also einen besseren Filter. Für die Billig-Interpolationen mit wenigen TAPs bietet sich auch eine direkte lineare Interpolation und anschließende Filterung zum "Abrunden" der Ecken an. Da ist der Aufwand in Summe am Kleinsten. Im dritten Bild werden z.B. nur 4 TAPs verwendet. Der Interpolator benötigt zwei Speicher: Bei einem 4-Fach-Interpolator wie hier akkumuliert man dazu einfach die Differenz der beiden letzten Samples der langsamen Domain, bekommt einen dreiecksartigen Anstieg gemäß der Steigung (ohne zu Dividieren) und filtert mit einem einfachen Summen über die letzten 8 Werte der neuen Domain. Diesen Wert teilt man durch 4 und durch 8 und bekommt einen geglätteten Wert. Die Mimik entspricht einem Hogenauer mit einer Stufe. Den 8er Filter kann man durch einen echten FIR ersetzen, wenn es besser sein soll, oder durch einen 6dB-IIR erster Ordnung, wenn es kleiner sein muss und noch einfacher sein darf. Ohne die linearisierende Vorstufe braucht es mindestens einen 24TAP-FIR oder auch 32. Bei nur einem Faktor 4 kann man mit der Methode aber nicht viel sparen. Im Gegenteil: Ein mittelmäßig langer FIR wird das besser tun, braucht weniger resourcen und hat die Interpolation quasi mit drin. Die Betrachtung wird dann interessant, wenn es an höhere Interpolationsstufen geht und es auf gewaltige TAPs hinauslaufen würde. Da werden bekanntlich mehrstufige Integrationsfilter eingesetzt, aka "CIC" und mit kurzen FIRs glattgebügelt. Der CIC übernimmt dann die Rolle der Vorinterpolation und füllt "richtig" auf. Wenn die Architektur richtig aufgezogen ist, bringt sie im Mittel bessere Werte. Siehe auch das Argument mit den Spektren. Man könnte es so zusammenfassen, dass ein händisches Auffüllen immer dann besser ist, wenn der Filter dahinter kein besonders guter ist.
:
Bearbeitet durch User
Dergute W. schrieb: > Dieses Wiederholen ist nix anderes als die Null-einfueg-Methode mit > nachgeschaltetem FIR Filter mit z.B. diesen Koeffizienten (fuer dein > Beispiel mit ver4fachung): [1 1 1 1]. > Diesen Filterfrequenzgang siehst du dann in deinem Ausgangssignal. Ist das nun von Nachteil? und warum? Bin nochmals in MATLAB eingestiegen und habe was probiert. Mir scheint es doch wirklich besser zu sein, die Daten einfach weiterlaufen zu lassen. Das wäre doch schon ein einfacher Filter. Möglich, daß es meinem Filter liegt. Jürgen S. schrieb: > Bei einem 4-Fach-Interpolator wie hier akkumuliert man dazu einfach die > Differenz der beiden letzten Samples der langsamen Domain, bekommt einen > dreiecksartigen Anstieg gemäß der Steigung Das habe ich versucht, kriege aber nichts raus, was nach Interpolation aussieht. Wie ist das gemeint, bitte?
Moin, Signalverarbeiter schrieb: > Ist das nun von Nachteil? und warum? Naja, wenn dir dieser Filterfrequenzgang taugt, dann wohl nicht. Mir geht's eher drum, darzustellen, dass es nicht "2 Arten von Upsampling" gibt, die irgendwie magisch unterschiedlich sind. Sondern eben 2x genau das selbe sind, naemlich Einfuegen von 0 samples und bei der einen Art (widerholung der Samplewerte) entsteht dabei eben automatisch ein nachgeschalteter, "parasitaerer" Tiefpass. Wenn das genau das Ding ist, was man haben will, warum nicht. Man kann in der Richtung noch weitermachen und kommt dann bei CIC-Filtern und ihren Vor- und Nachteilen raus. https://en.wikipedia.org/wiki/Cascaded_integrator%E2%80%93comb_filter Das ist eine Art Filter, die sich je nach Hardware manchmal recht einfach einbauen lassen. In der simpelsten Form ist nur ein Kammfilter und ein Integrator "kaskadiert", dann waere eben die Impulsantwort sowas: [1 1 1 1] (also Widerholung der Samples). Kaskadiert man 2 Kaemme und 2 Integratoren, dann gibt das eine linerare Interpolation (die Impulsantwort waere dann z.b. [1 2 3 4 3 2 1]. Bei 3 Kaemmen und 3 Integratoren hintereinander gibt's ne quadratische Interpolation [ 1 3 6 10 12 12 10 6 3 1] usw. Aber eigentlich ist's voellig wurst, was fuer ein Tief/Band/Hochpass nach dem Einfuegen der Samples kommt, er muss halt nur das machen, was du grad brauchst. Also ueblicherweise das "richtige" Spektrum genuegend gut durchlassen und die "falschen" Spektren genuegend gut daempfen. Gruss WK
Dergute W. schrieb: > Also ueblicherweise das "richtige" Spektrum genuegend > gut durchlassen und die "falschen" Spektren genuegend gut daempfen. Tja, gut gesagt. Das ist naheliegend. Nur was sind jeweils richtige und falsche Spektren?
Signalverarbeiter schrieb: > Tja, gut gesagt. Das ist naheliegend. Nur was sind jeweils richtige und > falsche Spektren? Ähm, wenn du das nicht weißt, füll einfach auf ?. Sieht schöner aus. Irgendwas an deinem Signal muss dich doch interessieren, oder?
Moin, Signalverarbeiter schrieb: > Nur was sind jeweils richtige und > falsche Spektren? So eine Interpolation macht man ja nicht aus Jux und Dollerei, von daher wird man dann schon wissen, in welchem Frequenzbereich man die Ergebnisse haben will. OK, wenn mans so garnicht weiss, dann wird man wohl mit einem Tiefpass am besten fahren. Bei einer 4fach Interpolation sollte das dann also ein Tiefpass sein, der alle Originalfrequenzen des uninterpolierten Signals durchlaesst, alle anderen sperrt. Wenn du z.B. ein Telefonsignal, mit 8kHz abgetastet, auf Samplingrate 32kHz bringen willst, brauchst du nach dem Einfuegen von jeweils 3 Nullen nach jedem Sample ins Signal also einen Tiefpass in der 32kHz Domaene, der von 0..4kHz durchlaesst (ggf. sogar um den Faktor 4 verstaerkt) und ab 4kHz sperrt. Naja, und da ist so ein [1 1 1 1] Filter halt eine grobe Annaehrung an dieses Verhalten. Und wenn man's eben durch Samplewiderholung umsonst und gratis kriegt...warum nicht. Aber es macht dir z.B. ueber 3dB Daempfung bei 3.99kHz. Und im Bereich um 12kHz macht es nur -11.3 dB Sperrdaempfung. Ist natuerlich besser als nix, aber sicher nicht der Weisheit letzter Schluss. Gruss WK
Ich würde sagen, dass man praktisch immer einen Tiefpass braucht und zwar einen im Bereich der vorherigen Bandbreite. Beim Upsampeln wäre ein "falsches Spektrum" in jedem Fall das Auftreten von neuen Frequenzen oberhalb der Nyquistfrequenz der vorherigen niedrigeren Abtastrate und das ist mit dem händischen Interpolieren ja der Fall! Beim Befüllen mit alten Werten wird ein Rechteck erzeugt, beim einfachen linearen Filter ein Sägezahn. Deren Oberwellengehalt ist nach Fourier evident und beim Rechteck größer. Der genaue Fehler hängt vom Originalsignal ab, das mal abgetastet wurde. Das ist ja in keinster Weise bekannt. In den wenigen Fällen, in denen man das kennt, kann man den Filter darauf abstellen, also die Eckfrequenz weiter herabsetzen. Dabei muss man ein wenig mitdenken: Beim Audio mit 48kHz -> 192kHz wird man einen 16kHz-Filter nehmen, in der Annahme, dass man nicht nur die typischen 20% head room hat, sondern über 16kHz nichts gehört wird. Bei 96kHz auf 192kHz wird man einen 24kHz Filter einsetzen, weil sich der bei 96k leicht bauen lässt und nicht mehr abschneidet, als im Original wahrscheinlich drin ist. Es gibt hier Spezialisten, die auch dann mit 18kHz killen und andere, die einen HBF bei 96kHz einsetzen :-) Umgekehrt, kann man Filter auch präzisieren und betonen, um sie steiler zu machen oder gar diskrete Filterinterpolationen verwenden. In wenigen Fällen wird man neue Frequenzen tolerieren, um z.B. Signale mit Rechtecken interpolieren. Rechteckgeneratoren in Musiksynthesizer z.B. kann man so absampeln und interpolieren ohne Fehler zu machen. In den meisten Fällen wird man sich auf das Spektrum unterhalb N/2 beziehen und den üblichen Kompromiss zwischen Passband-Durchlass und Stoppbanddämpfung suchen. Wie gesagt, ist es so, dass wenn man einen dafür optimierten Filter hintendran hat, der das gut kann, ist eine Vorinterpolation nicht nötig. Die kann sogar ein Problem darstellen, besonders wenn nicht ganzzahlig überabgetastet wird, sondern so etwas wie 2:3 oder 4:5 weil sich dann alte und neu Frequenz falten und das niederfrequente Mischprodukt den Sprung des Samples alt/neu allein abbildet. (ist jetzt bildlich im Zeitbereich schwer zu beschreiben, aber es führt dazu, dass auch Frequenzen weit unterhalb von N/2 entstehen, die durch das Filter nicht behandelt werden können. In den ganzzahligen Fällen ist es unproblematischer, weil die tiefste auftretende Frequenzkomponente des Störspektrums eben auf der alten Samplefrequenz liegt und dafür der Filter passt. Welchen Filter man da einsetzt, hängt auch von der Technologie ab: Im FPGA wird man bei Streamingdaten mit einem simplen Geradeaus-Design noch eher füllen, als bei einem parallelen Design oder gar einem Mikroprozessor, wo die Berechnung mit Nullen einiges an Rechnung einsparen kann.
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.