Welche Interpolation beim Upsampling nehmen?

Gast #4536854
Lesenswert?

Ich möchte einen Datenstrom um 50% vergrößern, also aus jeweils 2 Daten 
3 machen.

Ein Ansatz wäre, von den beiden Punkten 1 und 2 auf A, B und C zu 
kommen, indem ich einfach:

1 = A,  2 = B und 3 = (A+B)/2 nehme, aber das scheint mir nicht so 
prickelnd. Wie könnte ich das besser lösen?
Gast #4536998
Lesenswert?

Markus F. schrieb:
> Wie könnte ich das besser lösen?

Das kommt drauf an, was das für Daten sind, d.h. in welcher zeitliche 
Beziehung die zueinander stehen (wenn überhaupt) und ob das Ergebnis 
hinterher aus äquidistante Samples bestehen soll.

Vielleicht schilderst du mal das Problem und nicht deinen etwas 
eigenwilligen Lösungsansatz?
#4537087
Lesenswert?

Markus F. schrieb:
> 1 = A,  2 = B und 3 = (A+B)/2 nehme, aber das scheint mir nicht so
> prickelnd.

Das stimmt, denn dein 3. Wert wäre zwischen den beiden ersten Werten.

Du müsstest es in 2 Zyklen machen.

also in etwa so:
1
// cycle 0
2
last_sample = current_sample;                        // keep in_0
3
current_sample = get_new_sample();                   // get in_1
4
output_sample(last_sample);                          // out_0
5
output_sample((last_sample + 2 * current_sample)/3); // out 1
6

7
// cycle 1
8
last_sample = current_sample;                        // keep in_1
9
current_sample = get_new_sample();                   // get in_0
10
output_sample((last_sample * 2 + current_sample)/3); // out_2
Angehängte Dateien:
Persönliche Seite #4537160
Lesenswert?

Wenn du rein digital upsamplest, um es dann noch weiterzuverarbeiten 
reicht für einfache Anspüche ein lineares Filter, wie oben, welches eine 
Art verkapptes CIC-Filter darstellt. Praktisch liefert das aber Knicke 
und Artefakte.

Habe sowas vor Kurzem für Video gemacht. Eine direkte 2:3 Abbildung 
sieht man anhand der Ränder, die man auch infolge der Faltung mit einem 
Rechteck annehmen kann.

Will man das richtig machen, braucht es wie immer ein ordentliches 
Interpolationsfilter, das auf die Grenzfrequenz eingestellt wird, die in 
dem Oringinal enthalten ist.

Wenn man die nicht kennt, nimmt man eben Nyquist =f/2. Wenn die 
Interpolation funktionieren soll, muss man wenigstens 3 Punkte ins Spiel 
bringen und eine Kurve durchlegen, je nach gewünschter Genauigkeit auch 
mehr. Beim Audio muss bei hohen Abtastraten schon mal 20 Punkte und mehr 
heranziehen, um von der Samplefrequenz in den Bereich der Oberwelle zu 
kommen.
Gast #4537286
Lesenswert?

SIgnalverarbeiter schrieb:
> Nach jedem Sample zwei Nullen einfügen, danach Tiefpass-filtern, und
> dann jedes zweite Sample wegwerfen.

Das habe ich auch schon öfters gehört und mal durchgespielt:

Wenn ich da ein Filter drauflege, muss ich mit 3 malnehmen, damit 
dieselbe Amplitude entsteht, komme aber nur auf sehr zackige Kurven, die 
nicht wirklich eine gute Interpolation darstellen.
Angehängte Dateien:
#4537317
Lesenswert?

Die Fourier-Methode hat halt den Vorteil dass sie eine gewisse 
mathematische Rigorosität besitzt (erhält die Norm, ist in einem 
bestimmten Sinn die optimale Rekonstruktion des Signals); im Gegensatz 
zu "irgendwo irgendwelche Nullen einfügen und dann irgenwas filtern", da 
kommt halt nacher irgendwas raus was relativ unklare Fehlereigenschaften 
hat ...

Was sind das denn für Daten? Was willst du denn eigentlich erreichen?

Linear interpolieren geht auch, das ist auf jeden Fall besser als das 
mit den Nullen ...
#4537382
Lesenswert?

Moin,

Peterle schrieb:
> Woher kommt eigentlich die lustige Idee, Nullen einzusetzen?

Das waren bestimmt irgendwelche Verrueckten, die keine Ahnung haben, wie 
ein Signal "irgendwie besser" aussieht.

Sven B. schrieb:
> Die Fourier-Methode hat halt den Vorteil dass sie eine gewisse
> mathematische Rigorosität besitzt (erhält die Norm, ist in einem
> bestimmten Sinn die optimale Rekonstruktion des Signals); im Gegensatz
> zu "irgendwo irgendwelche Nullen einfügen und dann irgenwas filtern", da
> kommt halt nacher irgendwas raus was relativ unklare Fehlereigenschaften
> hat

WTF? Relativ unklare Fehlereigenschaften? Macht ihr hier gefuehlte 
Signaltheorie mit Ausdruckstanz, oder was ist das?

Gruss
WK
#4538136
Lesenswert?

Sven B. schrieb:
> wird sicher nicht ganz einfach sein

Das ist sicher nicht einfach.
Denn der Fehler hängt vom Eingangssignal und vom verwendeten Tiefpass 
ab.
Allerdings ist der Umweg über FFT sehr rechenintensiv, ebenfalls 
verlustbehaftet, und der Fehler bei dieser Methode dürfte noch 
wesentlich schwieriger zu berechnen sein.

Insofern ist die Methode mit der Sample-Widerholung sicherlich nicht 
grundfalsch.
Eine weitere Verbesserung könnte das Einfügen von zwei linear 
angenäherten Samples sein (1/3 A + 2/3 B und 2/3 A + 1/3 B). Dann 
Filtern, dann jedes 2. Sample verwerfen.
Je nach Rechenleistung kann man auch noch mehr Samples einfügen, dann 
filtern, dann Samples verwerfen. Das macht das TP Filtern u.U. besser, 
weil man mit die Grenzfrequenz höher ansetzen kann.
#4538520
Lesenswert?

Dann kannst du auch einfach linear interpolieren zwischen den beiden 
nächstgelegenen Punkten, oder? Das ist wahrscheinlich am besten mit 
wenig Rechenaufwand ...

Die FFT hat eben zwei klar gute Eigenschaften: Sie ist die perfekt 
korrekte Rekonstruktion des Signals wenn kein Undersampling 
stattgefunden hat; und sie erhält die Fläche unter der Kurve. Das ist 
schon sehr schön.
Gast #4538610
Lesenswert?

Mir scheint die Lösung von Joe F. (easylife) noch die
vom Aufwand her vernünftigste. Zumindest das, was seine Tabelle
zeigt. - Dem geschilderten Code-Ablauf kann ich leider nicht ganz
folgen.

Der Fehler dürfte eher einem erhöhten Quantisierungsrauschen
entsprechen, als störende Artefakte einzubringen.
Persönliche Seite #4540568
Lesenswert?

Dergute W. schrieb:
> Peterle schrieb:
>> Woher kommt eigentlich die lustige Idee, Nullen einzusetzen?
>
> Das waren bestimmt irgendwelche Verrueckten, die keine Ahnung haben, wie
> ein Signal "irgendwie besser" aussieht.

Die Idee hinter den Nullen ist, einfach dem Signal keine Energie = 
Information hinzuzufügen. Diese Idee ist grundsätzlich richtig, führt 
aber dazu, daß man einen sehr guten Filter braucht, um das Signal zu 
rekonstruieren.

Besser ist es, dem Signal sinnvolle Informationen hinzuzufügen, 
besonders, wenn es sich um ein unsymmetrisches Signal handelt, da dessen 
Mittelwert = Nullwert eben nicht auf die Nulllinie liegt. Das Beste ist, 
dem Signal den lokalen Mittelwert hinzuzufügen, allerdings muss man den 
ja ersteinmal ausrechnen :-)

Ein guter Kompromiss zwischen dem Auffüllen mit demselben Wert und dem 
Optimalwert ist eine lineare Interpolation. Die bringt "nur" 
hochfrequente Knicke in das Signal, die beim Filter leichter wieder 
verschwinden.
Persönliche Seite #4540573
Lesenswert?

Joe F. schrieb:
> Eine weitere Verbesserung könnte das Einfügen von zwei linear
> angenäherten Samples sein (1/3 A + 2/3 B und 2/3 A + 1/3 B).

So in etwa, ja - wobei die im Signal enthaltene Frequenz sich über zwei 
Samples besser darstellen lässt, weswegen man eine Interpolation über 3 
Samples mit entsprechender Gewichtung in Erwähung ziehen sollte.
Persönliche Seite #4578265
Lesenswert?

Joe F. schrieb:
> Jürgen S. schrieb:
>> weswegen man eine Interpolation über 3
>> Samples mit entsprechender Gewichtung in Erwähung ziehen sollte.
> Dies hatte ich ja bereits vorgeschlagen:

Nein, wir meinen nicht das Gleiche. Die Interpolation und Gewichtung 
muss schon eingangsseitig über die Werte in der Quelldomäne erfolgen und 
zwar so, daß der dabei entstehende Tiefpass zu der Abtastung in der 
Zieldomäne passt. Sonst kommt es zu Moiré-Effekten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren