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?
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
Approximation mittels Taylorreihenentwicklung: http://www.math.tu-dresden.de/~ganter/inf2005/folien/Taylor2.pdf Taylor & Verfahren von Briggs http://www.mathematik.ch/anwendungenmath/logarithmen/
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
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
Hallo! Vielen Dank fuer die Antworten. Ich moechte insgesamt 70 Stufen haben, mal sehen, wie sich das am Besten machen laesst. Nochmals Danke Armin
@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
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,
@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
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.