Forum: Mikrocontroller und Digitale Elektronik Welche Interpolation beim Upsampling nehmen?


von Markus F. (Gast)


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?

von Markus H. (markushehn)


Lesenswert?

Kommt drauf an auf was für einem System du das realisieren willst (wg. 
Realisierungsaufwand).
Schau dir mal CIC-Filter an. Die führen auch eine Interpolation durch.

von Wolfgang (Gast)


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?

von Joe F. (easylife)


Angehängte Dateien:

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

: Bearbeitet durch User
von Sven B. (scummos)


Lesenswert?

Du kannst eine FFT machen, mit Nullen auffüllen und rücktransformieren. 
Weiß aber nicht ob das das ergibt was du willst ...

von J. S. (engineer) Benutzerseite


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.

von SIgnalverarbeiter (Gast)


Lesenswert?

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

Das ist einfach:

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

von Peterle (Gast)


Angehängte Dateien:

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.

von Peterle (Gast)


Angehängte Dateien:

Lesenswert?

... kopiere ich hingegen die Werte in die Zwischenräume, so wie es bei 
einem digitalen Signal ja ist, dann sieht das irgendwie besser aus - bis 
auf den Sprung, der durch den Filter weggemacht wird.

Woher kommt eigentlich die lustige Idee, Nullen einzusetzen?

von Sven B. (scummos)


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 ...

: Bearbeitet durch User
von Dergute W. (derguteweka)


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

von Sven B. (scummos)


Lesenswert?

Dergute W. schrieb:
> WTF? Relativ unklare Fehlereigenschaften? Macht ihr hier gefuehlte
> Signaltheorie mit Ausdruckstanz, oder was ist das?
Wenn du Lust hast kannst du die Fehlereigenschaften gern ausrechnen, ich 
hab dazu keine Lust ... wird sicher nicht ganz einfach sein ...

von Joe F. (easylife)


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.

: Bearbeitet durch User
von Sven B. (scummos)


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.

von Jakob (Gast)


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.

von J. S. (engineer) Benutzerseite


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.

von J. S. (engineer) Benutzerseite


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.

von Joe F. (easylife)


Lesenswert?

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:
Beitrag "Re: Welche Interpolation beim Upsampling nehmen?"

;-)

von SIgnalverarbeiter (Gast)


Lesenswert?

Dergute W. schrieb:
> Macht ihr hier gefuehlte
> Signaltheorie mit Ausdruckstanz, oder was ist das?

Hier ja. Schade nur, dass einige Unbedarfte den Mist hier für voll 
nehmen werden.

Aber nun lasst das unsymmetrische Signal wieder um die Nulllinie 
tanzen...

von J. S. (engineer) Benutzerseite


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.

von Markus F. (Gast)


Lesenswert?

Dergute W. schrieb:
> Das waren bestimmt irgendwelche Verrueckten, die keine Ahnung haben, wie
> ein Signal "irgendwie besser" aussieht.

Ich schwanke immer noch, ob das ernst gemeint war, oder nicht.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Markus F. schrieb:
> Ich schwanke immer noch, ob das ernst gemeint war, oder nicht.

Wenn du nach ueber einem Monat noch schwankst, dann sind vielleicht 
deine Polstellen zu nah' am Einheitskreis bzw. der imag. Achse... ;-)

Gruss
WK

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.