Gast
#487325
Hallo Kollegen,
ich möchte auf einen 8Bit-µC eine Interpolation verwirklichen.
Ich habe ein SuchFeld[265], und zwei uint Input, Output.
Das SuchFeld sieht etwa so aus:
----------------------------------------------------------
const unsigned int SuchFeld[265] = {
1 // Index 1
2 // Index 2
6 // Index 3
11 // Index 4
15 // Index 5
19 // Index 6
22 // Index 7
28 // Index 8
...
----------------------------------------------------------
Die Variable Input hat einen Wertebereich von 0..1023.
Momentan mache ich folgendes:
Input ist der Index, Output ist die Variable des Suchfeldes. Siehe
Programmcode:
----------------------------------------------------------
Input /= 4;
Output = SuchFeld[Input];
----------------------------------------------------------
Ist in meinem oben genannten Programmcode z.B. Input = 10 dann
Erhalte ich als Output = 6.
Dieses Ergebnis ist mir allerdings zu ungenau! (Info: Die Tabelle lässt
sich nicht erweitern!)
Ich muß deshalb Interpolieren.
Allg. Formel: f(x) = f0 + (f1 - f0)/(x1 - x0)*(x - x0)
[wobei x1-x0 immer 1 - Tabelle]
Wende ich diese Formel an müßte ich bei einem Input = 10 ein Output = 4
erhalten.
Ich habe es auch versucht zu implementieren. Allerdings habe ich mit
über 13 if verschachtelungen wohl nicht gerade die Laufzeitoptimierteste
Lösung gefunden. Deshalb wende ich mich hier auch an Profis. ;)
Mein Hauptproblem ist je nach Input Eingangswert das richtige Wertepaar
(f1,f0) zu finden! (Die Tabellengrenze sollte ja mitbeachtet werden.)
Ich hoffe das ganze versteht irgendjemand ich finde ein helfendes Hirn!
Gruß, Mark Toellner