Regressiongerade

Gast #125264
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?
Gast #125266
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
Gast #125268
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....
Gast #125269
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!
Gast #125270
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
Gast #125272
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
Gast #125273
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...
Gast #125274
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.