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