Hallo, ich habe eine kleine Tabelle siehe Anhang und suche jemanden der mir eine Interpolation in AVR-Assembler programmiert, da ich von Mathematik und Assembler null Ahnung habe. Die Werte werden von einem EEPROM gelesen und in ein paar Regsitern gesetzt damit müsste man dann weitermachen. Kleines Beispiel: EingangswertA=1250 EingangswertB=14 Das ganze soll jetzt so ausgewertet werden. 1500 - 1000 = 500 1500 - 1250 = 250 12 - 10 =2 2 / 500 = 0,004 0,004 x 250 = 1 20 - 10 = 10 14 - 10 = 4 11 - 10 = 1 1 / 10 = 0,1 0,1 x 4 = 0,4 10 + 1 + 0,4 = 11,4 interpolierter Ausgangswert Eine weitere Aufgabe wäre es einen Wert(max 16bit) durch 3600 zu teilen um 0,1° Winkelauflösung zu bekommen und diesen dann mit dem interpoliertem Ausgangswert zu multiplizieren. Also wenn jemand interesse daran hätte bitte per Mail melden um alles weitere zu besprechen.
Schicker Anhang. Eine Tabelle, 4*4, gefüllt mit Integerwerten. 15 Kilo-Byte. Hochachtung.
hättest es in Schwarz/Weiß GIF gewollt? Mein Corel tut nicht so stark komprimieren. Die Tabelle wird natürlich auch größer sein war nur ein Beispiel
ASCII-Text hätte es auch getan. Sogar "Inline", ohne seperaten Anhang.
Hallo homas, hört sich dochinteressant an. Wieso willst denn das ganze in Assambler haben. Den angeblichen Geschwindigkeitsvorteil von Assambler und C gibt es den in der heutigen Zeit, dank der tollen Compiler nicht mehr wirklich, ausser du bist begnadeter Assambler guru :-). Um deine Poeblemstellung nochmals zu prezisieren: du willst eine 2d Tabelle einlesen und die fehlenden Werte INterpolieren. In C würde ich das ganze machen. Gruß
@wegstabenverbuchsler: achso meinste das, hatte befürchten das es als Text nicht 100% untereinandersteht und es dann etwas verwirrend wirkt, aber anscheinend gehts wie meine Rechnungsaufstellung zeigt. In Assembler deswegen weil ich mich da besser auskenne wie in C(eigentlich garnicht) und 2tens weiß ich genau wie lange das ganze dauert, kann also auf den geneuen Takt rechnen wenn ich weiß wieviel Takte zum Ausführen der Befehle/Bedingungen nötig sind. Aber C wird doch am Ende auch in Maschinencode umgewandelt könnte man das deassemblieren um daraus Assembler zu machen.
Auch C wird zuerst in Assembler übersetzt. Du kannst also auch da taktgenau rechnen und hast noch die verständlicheren C Befehle als "Kommentar".
ich befürchte das ich nach der Übersetzung nicht weiß welche Register das beanspruchen wird.
irgendwie schnall ich den zusammenhang zwischen der zahlendarstellung und der aufgeführten rechnung nicht... 15 werte (z.t. kommen sie in der tabelle vor, grösstenteils aber nicht) und 11 rechnungen um auf 11.4 zu kommen. ...und wozu ist 11.4 gut? ist nicht böse gemeint, aber so kann ich leider auch nicht helfen, wenn ich weder start noch ziel verstehe ;)
So wie ich das verstanden habe, gibt er ne Tabelle vor mit 3x3 Werten dann noch jeweils nen x und nen y Wert und hierfür sollen dann die Werte interpoliert werden !!! hat er doch eigentlich sehr gut in seinem Besipiel erklärt ! Gruß
Hallo Thomas, kann an die Tabelle auch umstellen ? Sprich, etwas andere Informationen speichern ? Bleibt die Tabelle immer 3x3 oder nimmt die auch mal andere Ausmaße an ? Ist die Tabelle nach dem Kompilieren in ihrer Größe noch variabel ? Dann kann man das ganze mit sehr wenig Aufwand auch sehr leicht in Assembler programmieren. Antworte mal einfach hier im Forum. Wenn Du die obigen Fragen beantwortest, dann sehe ich gute Chancen, dass man Dir bei der Lösung des Problems ihne Entgelt behilflich ist. Allerdings wirst Du dann dabei auch etwas lernen ;-) MfG, Daniel
Hallo, die Tabelle wird größer als 3x3 eher 16x16 oder noch größer. Habe das vielleicht nicht ganz so verständlich erklärt. Ich möchte einen interpolation in der Hirizontalen als auch in der Vertikalen haben, da die Eingangswerte ja nicht 100% dem Spalten oder Zeilenwert entsprechen. Ich würde also die benötigten Werte aus dem EEPROM auslesen und diesen in Registern (oder falls man das an eine feste/reservierte Stelle im SRAM setzen kann) zur Verfügung stellen, damit müsste man dann die Interpolation ausführen.
guten abend allerseits entschuldigt mich, aber wenn ich's richtig verstanden habe, bekommt man 2 anfangswerte und muss einen neun wert berechnen (interpolierter wert) dazu gibt es eine 4x4-matrix (siehe anhang), in der ein wert fehlt. anderseits ist hier immer die rede von einer 3x3-matrix (wo die wohl zu finden ist?)... für mich ist der rechenweg immernoch ein rätzel trotz mathe-lastigem studium und spass am knobbeln :( ich habe keine ahnung in der rechnung, woher die werte für die einzelnen teilrechnungen herkommen, meist gibt es mehrere mölichkeiten: #1: 1500 - 1000 = 500 eindeutig, auch wenn ich nicht weiss, wes- halb gerade diese werte: D1-C1 #2: 1500 - 1250 = 250 D1-EingangswertA weshalb nicht z.b. A3-EingangswertA ? #3: 12 - 10 = 2 (A3 oder C2)-D2 #4: 2 / 500 = 0,004 #3 / #500 #5: 0,004 x 250 = 1 #4 x #2 #6: 20 - 10 = 10 A4-(A3 oder C2) #7: 14 - 10 = 4 (EingangswertB oder C4)-(A3 oder C2 oder #6) #8: 11 - 10 = 1 C3-(A3 oder C2 oder #6) #9: 1 / 10 = 0,1 (#5 oder #8) / (A3 oder C2 oder #6) #10: 0,1 x 4 = 0,4 #9 x #7 #11: 10 + 1 + 0,4 = 11,4 (A3 oder C2 oder #6)+(#5 oder #8)+#10 ich glaube, das einfachste ist, wenn man eine anfangstabelle, soll angeblich 3x3 sein, mit fixen werten angibt und auch sagt welcher wert gesucht ist. mit 11.4 kenne ich jetzt zwar die lösung, aber nicht das anfangs-problem: welcher fehlende wert wurde nun berechnet? der, der in der 4x4-matrix fehlt? sorry für meine abwanderung vom auftrag, aber der knobbel-spass juckt mich eben...
Ich hab die Aufgabe so verstanden: Gegeben ist eine Interpolationstabelle für das Problem z=f(x,y) Z=[Z11, Z12, Z13, ..., Z21, Z22, Z23, ... ] Wobei Zij=f(Xi,Yj) ist. Für ein (x,y)-Paar wird der interpolierte z-Wert gesucht. Schritt 1: Der (x,y)-Wert ist umgeben von einer Teilmatrix von Z [Zi,j Zi,j+1 Zi+1,j Zi+1,j+1] Es muß hier erstmal i und j ermittelt werden. (Lösbar mit Dreisatz und floor-Funktion) Schritt 2: Berechnung des Wertes z aus x, y, Xi, Xi+1, Yj, Yj+1 und der Teilmatrix Z. Der OP sollte für diesen Schritt IHMO die mathematische Formel vorgeben und nicht irgendwelche Werte aus der Tabelle.
also dann hätte ich nochmal nen anderen Lösungsvorschlag. EingangswertA=1250 in der Tabelle kann man dann entnehmen das der nächst niedrigere und der nächst höhere Wert 1000 und 1500 ist. 1000+1500=2500 2500/1250=2 10+12=22 22/2=11 Da ich aber den EingangswertB=14 habe und nicht 0 muss ich die Rechnung mit den Werten aus der 3ten und 4ten(nächst niedrigere und nächst höhere) Spalte machen und dann von der Differenz 4/10 nehmen um auf den gewünschten EingangswertB von 14 zu kommen.
Ich hätte mich schon längst gemeldet, wenn die "Aufgabe" nicht so wirr wäre. So ist es wirklich eine Knobelsache, was Du genau machen willst. Werner hat ja den ersten Teil schon herausgeknobelt. Nun muss der OP in der Tat wirklich mal sagen, wie die Interpolation genau berechnet werden soll.
Hi ich tippe einfach mal und behaupte er braucht nichts anderes als eine bilineare Interpolation. Matthias
Hi, habe dir ne Mail geschickt Thomas Gruß
also besser kann ichs nicht erklären, tut mir leid.
Also ich finde es klar verständlich, schon die erste Beispielrechnung war klar genug, um erkennen zu können was wie berechnet werden soll ! Gruß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.