mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Regressiongerade


Autor: Meinhof Walters (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle!
Habe ein Problem moechte jeweils einem 8bit Wert aus dem A/D Wandler
einen anderen Wert einer anderen Kurve zuordnen. Bei 256 Werten waere
das ein riesen Programmieraufwand,oder sehe ich das falsch. Habe jetzt
eine Regressiongerade bestimmt mit dem ich den Kurvenverlauf bestimmen
koennte.Problem hierbei sind die
Koeffizienten.y=5,4094E-8*x^4-1,898E-5*x^3+2,4812E-3*x+4,31354347
Nun klar brauch ich nicht alle Stellen und das Ergebnis soll auch keine
Nachkommastellen mehr aufweisen also gerundet sein, aber wie kann ich
das berechnen?

Autor: Meinhof Walters (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Programmiere in Assembler!

Autor: Peter Kasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würd dir schon vorschlagen es mit einer Tabelle zu machen, wenn du
nicht alle Werte benötigst, kannst du deine Tabelle auch
dementsprechend verkleinern. Machst einfach zur Sicherheit eine
Berichsüberprüfung bevor du den Tabellenwert ausliest. Um den
Flashspeicher würde ich mir nicht unbedingt sorgen machen, denn du
sparst einiges wenn du auf Float verzichten kannst.

Gruß
Peter

Autor: Meinhof Walters (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erklaer mir was du mit einer Tabelle meinst! Ich kenn mich noch nicht so
gut aus und brauche dringend Hilfe!

Autor: Peter Kasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach was in der Art:


const int look_up[] = {1,2,5,7,8,45,5,6,...};

Zugriff dann mit

unsigned char ad_wert;
int wert;
 ad_wert = hole_ad_wert();
 wert = look_up[ad_wert];

so, oder so ähnlich, einfach den AD-Wert als index in der Tabelle
verwenden, und dir so den zugehörigen wert holen....

Autor: Meinhof Walters (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versteh das nicht so recht waere dir super damkbar, wenn Du noch etws
genauer erklaeren koenntest.Programmier erst seit 2 wochen in assembler
und muss was fuer die Uni fertigmachen!

Autor: Peter Kasi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, war erst mal mein Fehler, hab nicht gelesen, dass das "Programmiere
in Assembler!" von dir war. Dachte das war mal wieder einer der
hilfreichen Kommentare die man manchmal so liest...
Ich programmiere kein Assembler, von dem her kann ich dir auch bei der
Umsetzung nicht weiterhelfen. Dürfte aber auch nicht weiter schwer
sein, wenn du das Prinzip verstanden hast. Sowas wie Felder sollte es
ja auch in assembler geben ;)
Gruß
Peter

Autor: Meinhof Walters (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dank Dir!

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Da du nicht gesagt hast welcher uC eben mal als PaP:

lade Indexreg.mit Adr.Tabellenanfang
addiere zum Indexreg. AD-Wert
hole Wert,laut Index,aus Tabelle


Tabelle:1;3;5;7;..

Einfacher geht es kaum.

MfG Uwe

Autor: Thomas Burkhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Regressions*gerade* mit Termen bis x^4 :-)

Ansonsten ist natürlich eine Tabelle (LUT) wie bereits beschrieben das
einfachste, wenn Platz genug da ist...

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage stellt sich jetzt nur noch nach der Skalierung.
Die Funktion ist bei 65->66 null, bei 255 hätte sie den Wert -81.67 und
bei einem ADC-Wert von 1 hätte die Funktion dann einen Wert von 4,316
(gerundet).
Villeicht brauchst Du ja Amplituden, die einen anderen Wertebereich von
x bedingen würden. musst das also nochmal mit deinem Wertebereich
multiplizieren. Denn erst bei 348->349 wird die Funktion wieder 0 und
schmeisst dann wieder positive Werte.
Also wenn Du den gesamten wertebereich erfassen musst, und nicht nur
einen Teil der Kurve-

Ich habe eben mal den wertebereich von 1020 -> 1023 (10bit-anschlag vom
ADC) anzeigen lassen. 38929!! Da läuft dir dein Integer über, ist ja
blöd. Aber Du sagtest ja, du hast nur 255 Werte. Trotzdem aufpassen

Casio baut bessere Taschenrechner als Klaviere...
Gruß
Axel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.