Darf ich noch einmal zur Aufklärung hinsichtlich des Upsampelns beitragen?
Nehmen wir irgendein 44.1 kHz Signal. Man kann dann über eine Anzahl von Abtastpunkten eine Fouriertransformation durchführen um den Frequenzgang zu erhalten. Das sei im nächsten Bild dargestellt:
Die Frequenzachse geht hier bis 88200 Hz, unser Signal hat aber natürlich nur Frequenzen bis 22050 Hz. Das ist im Bild prima zu sehen, die Frequenzachse wurde bewusst linear und nicht logarithmisch gezeichnet.
Ok, nun machen wir das von amdrax beschriebene Verfahren, vervierfachen also die Punktanzahl = Upsampeln auf 176.4 kHz, indem wir nach jedem Abtastpunkt drei weitere Punkte einfügen. Jeder eingefügte Punkt bekommt den Wert 0. Das Resultat der FFT über dem neuen Signal sieht dann wie folgt aus:
Im Zeitdiagramm erkennen wir einen neuen Verlauf durch die eingefügten Null-Samples. Ooops, der Frequenzgang geht nun aber plötzlich bis 88.2 kHz, wir sehen wunderschön, wie der Bereich von 0 bis 22050 Hz an einer gedachten 22050 Hz-Linie gespiegelt ist und dann der Bereich von 0 bis 44100 Hz wiederum an der gedachten 44100 Hz-Linie gespiegelt ist.
Das neue Signal enthält nun also Frequenzen oberhalb von 22050 Hz bis fs/2. Darf das sein?
Wir wissen doch, dass unser 44.1 kHz-Ausgangssignal
bandbreitenbegrenzt ist, also nur Frequenzen bis 22050 Hz enthält. Demzufolge ist das neue upgesampelte Signal so nicht richtig! Damit es richtig wird, müssen wir also alle Signalanteile über 22050 Hz wegnehmen. Wegnehmen heisst Rausfiltern. Also ein Tiefpass, der alles bis 22050 Hz durchlässt und alles darüber konsequent wegnimmt.
Das Filter sollte also idealerweise unendlich steil sein und in etwa so aussehen wie
die grüne Linie im Bild. Der Vorgang, wie so ein Filter mit dem Signal verrechnet wird, heisst Convolven oder Faltung. Es hat schlichtweg nichts mit "Statik" und "Dynamik" zu tun.
Also benötigen wir so einen Tiefpass, am besten einen perfekten. Bis 22050 Hz ein 1:1 Durchlass, dann ein unendlich steiler Abfall und über 22050 Hz ein perfektes Sperren. Es gibt dieses theoretisch perfekte Filter in der mathematischen Theorie: es ist ein sogenanntes sinc-Filter (Funktion sin(x)/x). Um allerdings die gewünschten Eigenschaften zu erhalten muss es unendlich lang sein, also in grauer Vorzeit beginnen und ewig dauern. Was nicht praktikabel ist. Also wird das Filter durch Abschneiden vorne und hinten auf eine reale Länge gebracht. Damit Start und Ende des Filters dadurch nicht plötzlich passieren, wird mit einer Fensterfunktion (Hamming, Blackman, Kaiser, Gauss ...) ein sanftes Fade-In/Out erzeugt.
Tja, und dieses Einkürzen bringt nun eben so seine Nachteile mit sich. Der Frequenzgang fällt vor 22050 Hz bereits ab, der Übergangsbereich ist nicht mehr unendlich steil, sondern wird flacher, der Sperrbereich sperrt nicht mehr so perfekt und es werden evtl. auch Frequenzen oberhalb von 22050 Hz übertragen (welche ja nicht vorhanden sein sollten). Ich habe hier über verschiedene Filterlängen bei diversen Programmen berichtet, von 194 Samples (Foobar einfach) bis 2180 Samples (Linn) bis hin zu 65536 Samples (das von mir verwendete Testfilter). Je länger das Filter, desto besser die Filtereigenschaften. Aber eben auch desto größer das Ringing.
Was noch verbleibt ist die Frage, wie es mit anderen Interpolationsansätzen aussieht. Hier wurden ja nur Nullen eingefügt.
Es ist wichtig zu wissen, dass das Falten des Musiksignals mit dem Filter ein mathematischer Rechenvorgang ist, der nun genau die sinc-Interpolation bewirkt. Am Ausgang des Filters haben die Samples, die vorher Null waren, die interpolierten Werte, die den gegebenen
bandbreitenbegrenzten Signalverlauf bechreiben! Je perfekter das Filter, desto perfekter der Signalverlauf.
Wenn wir nun hergehen und z.B. den eingefügten Samples den jeweiligen Wert des vorausgehenden Samples zuweisen (Treppenfunktion), oder linear interpolieren (Dreiecksfunktion) oder eine Spline-Interpolation durchführen oder was auch immer noch tun, dann können wir mit dem neu erzeugten Signal wiederum eine Fouriertransformation durchführen. Wir werden dann sehen (bitte erspart mir den Nachweis aus Zeitgründen), dass durch all die anderen Interpolationen der Frequenzgang mehr oder weniger nett aussieht. Je nach Verfahren treten Frequenzen oberhalb von 22050 Hz auf, was aber nicht korrekt ist. Korrekt wäre: der Frequenzgang unter 22050 Hz bleibt unverändert, oberhalb von 22050 Hz sind die Amplituden verschwindend klein.
Wenn das damit hoffentlich alles klar geworden ist, steht vielleicht noch eine Frage aus: Warum gibt es dann die diversen Filterlängen bzw. die diversen Interpolationsarten? Das Rechnen der Filter kostet Zeit und Aufwand. Und die Mathematiker/Techniker denken nun schlichtweg darüber nach, wie ein bestmögliches Ergebnis mit einem minimalen bzw. machbaren Aufwand zu erzielen ist. Genau hierzu haben sich Generationen von Mathematikern beim Filterentwurf mit der Aufgabe befasst, wie z.B. ein optimales Filter gegebener Länge mit gewünschten Eigenschaften entworfen werden kann.
Im Bereich des Upsamplings ist mittlerweile klar, dass sinc-Filter Vorteile haben, die Länge wird mit schnellerer Datenverarbeitung immer unkritischer. Auch FPGAs und DSPs werden immer leistungsfähiger.
Grüsse, Uli