mikrocontroller.net

Forum: Markt Wer programmiert mir gegen Entgeld einige Rechenroutinen?


Autor: Thomas O. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schicker Anhang. Eine Tabelle, 4*4, gefüllt mit Integerwerten. 15
Kilo-Byte. Hochachtung.

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Wegstabenverbuchsler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ASCII-Text hätte es auch getan. Sogar "Inline", ohne seperaten Anhang.

Autor: rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Bartholomäus Steinmayr (sam_vdp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch C wird zuerst in Assembler übersetzt.
Du kannst also auch da taktgenau rechnen und hast noch die
verständlicheren C Befehle als "Kommentar".

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich befürchte das ich nach der Übersetzung nicht weiß welche Register
das beanspruchen wird.

Autor: mc.emi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, sehr konfus..

Autor: HD_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: Daniel Braun (khani)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: mc.emi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Werner Hoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich tippe einfach mal und behaupte er braucht nichts anderes als eine
bilineare Interpolation.

Matthias

Autor: HD_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe dir ne Mail geschickt Thomas

Gruß

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also besser kann ichs nicht erklären, tut mir leid.

Autor: HD_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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, Yahoo oder Facebook? Keine Anmeldung erforderlich!
Mit Google-Account einloggen | Mit Facebook-Account einloggen
Noch kein Account? Hier anmelden.