www.mikrocontroller.net

Forum: PC-Programmierung Logarithmische Darstellung


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Kann mir jemand sagen wie ich einen Punkt auf einem Display berechene.

Gegeben ist:

Display_Xmin = 0
Display_Xmax = 640

Value_Xmin = 0
Value_Xmax = 25000

SollPosition = X  (0 - 25000)

So das ganze soll nun aber nicht linear sondern logarithmisch auf das 
Display gebracht werden.

Bei mir ist gerade nur noch Luft im Kopf und ich finde keine passende 
Lösung.

Hat jemand eine Formel oder Quelle zum nachlesen / kopieren?

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Pascal auch verstaendlich ist :
http://www.ibrtses.com/delphi/dmcs.html

rene

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Rene.

Pascal kann ich! Ist aber bei dem bisschen Code nicht erforderlich.

Werde mir den Code nach dem Ausschlafen ansehen.

Melde mich (Samstag nachmittag) mit dem Ergebnis!
Dirk


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich habe es getestet.

Die Funktion zum berechnen hat nur ein Problem Realwerte (xLow == 0) 
ergibt einen super Fehler.
Stellt sich auch die Frage, warum ich überhaupt mit xLow teilen muss.
Das hebt sich doch auf.

Auch einen Punkt an Position 0.0 anzeigen gibt Probleme.


Was ist wenn meine Realwerte (World) von zB. 10 bis -90 gehen. Wie muss 
ich dann damit umgehen?



Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine logarithmische Skala kenn kein Null, und negative Werte schon gar 
nicht. Das ist von der Mathematik her so.

rene

Autor: Theo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht mal die Funktionentheorie (komplexe Analysis) kennt den 
Logarithmus von 0.

Das ist eigentlich schon im ersten Semester (erste Hälfte) Mathe fällig!

http://de.wikipedia.org/wiki/Koordinatentransformation



Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ich wollte doch nur wissen wie ich damit umgehen soll.
Das ein Logarithmus von 0 nicht geht ist mit schon bekannt.

Ich habe halt Werte (+10 bis -90 dB) im Bereich 16Hz - 24KHz und will 
sie Darstellen.

Darum suche ich eine Lösung um:
1.) die dB Werte sauber Logarithmisch darzustellen

2.) die Frequenz erst ab 10Hz (nicht ab 0) auch Logarithmisch 
darzustellen

Bei der Frequenz Funktioniert es ab 0Hz ja schon ganz gut.
Aber ich möchte halt einen Ausschnitt von x1 - x2 Darstellen.



Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha. -90..+10dB ist aber alles groesser Null. Diese Zahlen koennen 
entweder als dB in einer linearen dB Skala dargestellt, oder auf reale 
Werte umgerechnet in der logarithmischen Skala dargestellt werden. Wo 
ist das Problem ?

rene

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist zwischen den Ohren!!!!!

Die dB Anzeige bleibt linear. Das habe ich gerade beschlossen, sieht 
besser aus.

Mir reicht es, wenn ich weiß wie ich die Frequenzen darstellen muß.

Also Anzeige 10 ... 25000  umgerechnet auf Pixel (min(0) - max(640)).

Ich verliere im bereich 0-10Herz einfach schon zu viele Pixel.
Kann sogar sein das ich erst bei 100Hz anfangen sollte.



Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der logarithmischen Darstellung kriegt jede Dekade gleich viel Platz. 
Dh, 20 Hz-20kHz sind 3 Dekaden, da bekommen 20-200, 200-2k, und 2k bis 
20k jeweils gleich viel. Und 10-20 sind auch schon wieder 1/3 Dekade.

rene

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach der Formel (so wie sie auf der Homepage steht):
x = 0 + (log(Pos) / log(25000)) * (640-0)

Habe ich halt bei:
Pos =     1   -> x =   0
Pos =    10   -> x = 145
Pos =   100   -> x = 291
Pos =  1000   -> x = 436
Pos = 10000   -> x = 582
Pos = 25000   -> x = 640

So weit so gut. Ok jede Dekade hat hier den gleichen Platz (145 Pixel)
Nur ich möchte halt nicht bei 1 sonder bei 10 anfangen.
Anders gesagt die ersten 145 Pixel müssen irgend wie weg.

Pos =   <10   -> x = -? ist egal wird angefangen
Pos =    10   -> x = 0
Pos =   100   -> x = ?
Pos =  1000   -> x = ?
Pos = 10000   -> x = ?
Pos = 25000   -> x = 640


Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das XLow =10 und XHigh=25000 machen das.

rene

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So einfach???

Man bin ich blöd!!!!
Zum Glück bekommt das mein Ex-Mathelehrer nicht mit.


Danke, werde ich gleich ausprobieren.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ich es schon vermutet hatte:

ES GEHT!

Danke!

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.