www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik log von 16 bit Wert


Autor: Armin Zeitler (arze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich moechte den Ausgang eines 16 bit ADC auf eine Ausgabe in dB mappen, 
mittels logarithmus. Kann man dies irgendwie mit ganzzahligen Werten 
machen? Habe schon einige Loesungen mit double gefunden. Geht es auch 
irgendwie anders?

Autor: veloist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Armin,

ich weiss ja nicht, wie gut deine mathematischen Fähigkeiten sind. Eine 
Potenzreihenentwicklung in Ganzzahlarithmetik wäre möglich. Schau mal 
hier
http://de.wikipedia.org/wiki/Logarithmus
dort steht alles Notwendige drin. Ich würde mittels Basisumrechnung den 
Logarithmus zur Basis 2 berechnen. Über das Produktgesetz musst du 
eigentlich nur den Logarithmus für Zahlen zwischen 0..2 berechnen, und 
das geht recht gut mit der Potenzreihe.
Ich habe das Vorgehen nur knapp angedeutet, aber wenn es dich 
interessiert, kann ich es genauer erklären.

Gruß
Gerd

Autor: antworter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Approximation mittels Taylorreihenentwicklung:

http://www.math.tu-dresden.de/~ganter/inf2005/foli...

Taylor & Verfahren von Briggs

http://www.mathematik.ch/anwendungenmath/logarithmen/

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für PICs gibts hier ein Assembler-Programm:
http://www.dattalo.com/technical/software/pic/piclog.html
Allgemeineres hat derselbe Autor hier:
http://www.dattalo.com/technical/theory/logs.html

Autor: Luigi Rossi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Armin
Wenn Dir eine Auflösung von 16 Werten genügt, schlage ich folgendes vor:
Der 2-er Logarithmus einer 16 Bit Zahl ist ein Wert zwischen 0 und 15, 
nämlich genau die Position des linkesten 1-Bits.
Das sollte auch in Assembler recht einfach sein.

z.B. 10000000 00000000 -> ld=15
     00000000 00111000 -> ld=5


lg
Luigi

Autor: Armin Zeitler (arze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Vielen Dank fuer die Antworten.
Ich moechte insgesamt 70 Stufen haben, mal sehen, wie sich das am Besten 
machen laesst.

Nochmals Danke
Armin

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Armin Zeitler

>Ich moechte insgesamt 70 Stufen haben, mal sehen, wie sich das am Besten
>machen laesst.

Eine Mischung aus Luigi Rossis Ansatz und der Decodierung der 
verbleibenden Mantisse. Sprich, nachdem du die erste '1' gefunden hast 
und die Position in eine 4 Bit Zahl gewandelt hast (Exponent), nimmst du 
die nächsten 2 Bit als Mantisse. Dein LD ist dann Mantisse + 4x 
Exponent. Eigentlich nur Bitschieben. Zu unverständlich? Zwei Beispiele.

1.)

0x00101100xxxxxxxx
    |^^
    |Mantisse = 1
    |
    erste '1' an Position 13

LD = 1+ 13x4 = 53

2.)
0x00011100xxxxxxxx
     |^^
     |Mantisse = 3
     |
     erste '1' an Position 12

LD = 3 + 12 x 4 = 51

Ist quasi eine INT to FLOAT Konverierung. Schau dir mal die A-Law 
Kodierung von Tefephondaten an.

http://en.wikipedia.org/wiki/A-law

Die Beschriebung ist ein wenig kryptisch, aber als Ausgangspunkt 
brauchbar.

MfG
Falk

Autor: Armin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Falk!

Danke fuer Deine Antwort.

Mir ist nicht ganz klar, wie ich dabei die Genauigkeit eventuell noch 
erhoehen kann. Muss ich den Exponenten dann mit einem anderen Faktor als 
4 gewichten?
Danke schon mal im Voraus,

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Armin

>Mir ist nicht ganz klar, wie ich dabei die Genauigkeit eventuell noch
>erhoehen kann. Muss ich den Exponenten dann mit einem anderen Faktor als
>4 gewichten?

Ja. Du kannst den Exponenten mit 8 wichten und 3 Bit Mantisse verwenden, 
oder mit 16 und 4 Bit Mantisse, oder . . . etc.

MfG
Falk


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.