Laden...

Algorithmus zum Interpolieren bestimmter Werte gesucht

Erstellt von Casiopaya vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.498 Views
C
Casiopaya Themenstarter:in
18 Beiträge seit 2006
vor 15 Jahren
Algorithmus zum Interpolieren bestimmter Werte gesucht

Hallo zusammen!

Kennt jemand einen effizienten Alogrithmus, mit dem man ein diskretes Signal (z.B. Zahlen in einem 1D-Integer-Array) auf eine bestimmte Anzahl an Samples stretchen bzw. drücken kann?

Ein Beispiel:

Ich habe ein Array mit 1576 Werten, möchte dies auf ein Array mit 1000 herunterbrechen. -> Skalierung, Extrapolation, Glättung.

Oder: Ich habe ein Array mit 233 Werten und möchte dieses auf ein Array mit 1000 hochrechnen. -> Skalierung, Interpolation.

Die Größen der Eingangarrays sind natürlich jeweils variabel. Natürlich kann ich selbst die Algos schreiben, nur vllt gibt es schon welche, die schneller und besser bezüglich Glättung etc sind.

Für Hilfe bin ich sehr dankbar,

Casiopaya

H
90 Beiträge seit 2007
vor 15 Jahren

Also wenn ich dich richtig verstanden habe willst du eigentlich das Array nur neu dimensionieren.
Das kannst du mit


ReDim ArrayName(Arra länge)

machen.
Das problem an der sache ist es wenn du wie in deinem Beispiel 1444 felder hast und auf 1000 runterbrichst die werte in den feldern 1001 bis 1444 verloren gehn.

Alternativ wenn du diese werte noch brauchen solltest copier das array und breche die Kopie auf 1000 dann haste die restlichen 444 noch im original.

MFG

habeKA

There's no place like 127.0.0.1

C
Casiopaya Themenstarter:in
18 Beiträge seit 2006
vor 15 Jahren

Hi !

genau um dieses Runterbrechen geht es ja. Wie würdest du das machen? Bei z.B. 2000 auf 1000 könnte man zwar jeden 2. Wert nehmen, trotzdem wäre das keine gute Annäherung, da jeder 2. Wert völlig verloren geht.

Nimmt man bei 2000 auf 1000 jeweils den Schnitt der zwei benachbarten Werten wäre das optimal, nur wie macht man das dann bei 1344 auf 1000 ?

Andersrum: Wie Rechne ich 800 Werte auf 1000 Werte hoch? Leider kann man hier nicht so einfach (z.B. linear) interpolieren, da man auf einem diskreten Signalbereich arbeitet.

Grüße Vasi

1.130 Beiträge seit 2007
vor 15 Jahren

Um welche Werte handelt es sich denn? Musik?

Es gibt verschidene Arten von Interpolation:Wikipedia
Am einfachsten ist soweit ich weiß die Lineare.

Bei Musik ist es soweit ich weiß das Beste, eine Fourier-Analyse mit anschließender synthese zu machen. Quelle

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

C
980 Beiträge seit 2003
vor 15 Jahren

Ich habe kürzlich die ganzen Interpolations-Algoritmen in Math.NET Iridium revidiert, vielleicht findest du dort was du suchst. Du solltest dir aber direkt den Sourcecode aus dem Subversion Source Repository holen, denn die Algorithmen sind neuer als die aktuellste release (neue Release wird gegen Ende Woche erwartet).

Aber: Eine hochwertige Interpolation ist wahrscheinlich nicht die beste Lösung hier, ich schätze mit klassischem Resampling wärst du besser bedient: Einfach linear oder sogar nearest-neighbour interpolieren, und dann mit einem tiefpassfilter nachfiltern.