Forum: Digitale Signalverarbeitung / DSP / Machine Learning Null oder nicht Null, das ist hier die Frage


von Signalverarbeiter (Gast)


Lesenswert?

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?

von MaWin (Gast)


Lesenswert?

Das eine ergibt den alten mittleren Pegel, das andere 1/4 davon.

von Joe F. (easylife)


Lesenswert?

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.

von Dergute W. (derguteweka)


Lesenswert?

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

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

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.

von Dergute W. (derguteweka)


Lesenswert?

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

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von J. S. (engineer) Benutzerseite



Lesenswert?

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
von Signalverarbeiter (Gast)


Lesenswert?

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?

von Dergute W. (derguteweka)


Lesenswert?

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

von Signalverarbeiter (Gast)


Lesenswert?

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?

von Karl (Gast)


Lesenswert?

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?

von Dergute W. (derguteweka)


Lesenswert?

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

von J. S. (engineer) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.