-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Umrechnung in dB Werten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2007
    Beiträge
    13

    Umrechnung in dB Werten

    Anzeige

    Hallo, ich hätte da mal ne Frage,
    weiß irgendjemand hier, wie man aus Werten die ich vom A/D Wandler bekomm, diese in dB umrechnen kann? Die normale Formel lautet (Uout/Uin = 20*log). Nur wenn ich eine Funktion mit log programmier, kennt die lib math.h nur log mit ner Basis 10! Hat zufällig jemand schon ein Programm mit einer entsprechenden Funktion?! Ich steh total auf em Schlauch und versteh nur noch Bahnhof!
    bin für jede Antwort dankbar!

    mfg heikilo

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Man kann doch mit 2 Log-Befehlen (beliebige Basis) den Log zu jeder anderen beliebigen Basis ziehen...
    Wenn nur der Log10 vorhanden ist und man will den Log von 8.5 zur Basis 2, dann kann man ja einfach x = Log(8.5)/Log(2) = Log(Zahl)/Log(Basis) berechnen.

  3. #3
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.372
    Ich hoffe Du erwartest bei der dB Rechung keine andere Basis als 10.

    http://www.uwe-siart.de/lehre/dezibel.pdf

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2007
    Beiträge
    13
    doch eigentlich schon, so hab ich es mal probiert, funktioniert aber nicht wirklich:


    double logarithmus (double, double);

    // Funktion logarithmus()

    void main ()

    {

    double l, n, b ; // Deklaration von Variablen
    b = 20; // Definition der Basis
    n = 5; // Definition des Numerus

    // Aufruf der Funktion und
    l = logarithmus ( b, n ); // Definition von l

    }

    // logarithmus()
    // Definition der Funktion
    // Berechnet den Logarithmus des Numerus zu einer beliebigen
    // Basis


    double logarithmus (double bas, double num)
    {
    return (log10(num)/log10(bas));

    }

    kann sich das jemand mal anschauen.
    Und wie kann ich, um zu überprüfen ob es funktioniert, weiter vorgehen. Kann ich den berechneten Wert einfach einem PORT zuweisen und dann im I/O Register schauen ob es stimmt??

  5. #5
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.372
    http://en.wikipedia.org/wiki/Decibel:

    When referring to measurements of amplitude it is usual to consider the ratio of the squares of X (measured amplitude) and X0 (reference amplitude). This is because in most applications power is proportional to the square of amplitude. Thus the following definition is used:




    Similarly, in electrical circuits, dissipated power is typically proportional to the square of voltage or current when the impedance is held constant. Taking voltage as an example, this leads to the equation:


  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Ähm, Du weißt aber schon, dass zur Berechnung von dB der Logarithmus zur Basis 10 benutzt wird, oder?

    [edit]Was Manf wohl auch gerade sagen wollte...[/edit]

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Ein Atmel Controller hat 10Bit Auflösung also 1024 mögliche Werte.
    Lass doch EXCEL die Berechnung machen und schreib in den Controller eine Tabelle rein.
    Die Auswertung ist rasend schnell, weil ja nichts berechnet werden muss.
    Mit A/D Wandler Wert auf den entsprechenden Speicherplatz in der Tabelle gucken und den Wert der dort steht ausgeben fettich.
    Ich glaub eine log Routine wird auch nicht viel sehr weniger Platz brauchen und math.h brauchst Du dann auch nicht.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2007
    Beiträge
    13
    Hä, meinst du ich soll in Excel ne Tabelle mit den Berechnungen erstellen und diese dann im Programmcode einbinden?! Ich hab ehrlich gesagt keine Ahnung wie das gehn soll! Aber trotzdem danke für den Vorschlag.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Hä, meinst du ich soll in Excel ne Tabelle mit den Berechnungen erstellen und diese dann im Programmcode einbinden?! Ich hab ehrlich gesagt keine Ahnung wie das gehn soll! Aber trotzdem danke für den Vorschlag.
    Ja genau so mein ich das.
    Du entwickelst also mit EXCEL eine Formel, die Dir für jeden möglichen A/D Wert einen dB Wert errechnet.
    Die Spalte für den dB Wert (aus EXCEL heraus) kopierst Du dir in deine Anwendung (STRG-C, STRG-V) in eine Fix Variable in AVR-GCC.
    In Code Vision geht das so:
    flash signed int si_dbwerte[1024]={deine kopierten Werte mit , getrennt };

    Als dB Werte würde ich das 10 oder 100 fache des reellen dB Wertes benutzen und die Kommas erst bei der Ausgabe einsetzen, somit kriegst du eine Auflösung von 0,1 bzw 0,01 dB und das Ganze passt auch noch in eine int Variable inklusive Vorzeichen.
    Allerdings belegt eine int Variable 2 Byte, das bedeutet die Tabelle wird 2048Bytes brauchen. Wenn dir eine Auflösung von 1dB reicht gehen die Werte noch in einen Char, dann hat die Tabelle 1024 Byte.

    Da der Controller die Werte dann nicht nach jedem neuen Messzyklus berechnen muß sollte diese Methode auch ziemlich schnell laufen und Du kommst ohne Gleitkommazahlen (float) aus, was deinem Controller auch gefallen dürfte - Das hatte ich aber schon mal geschrieben.

    Ein bischen Arbeit dürftest Du nur noch bei der Formattierung der Tabelle kriegen, damit das im Programm sauber ausschaut.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2007
    Beiträge
    13
    aha, danke. Was ich aber nicht ganz auf die Reihe bekomme, wie meinst du das mit dem 10 oder 100 fachen des reellen dB Wertes? Ich bekomm doch vom A/D nen Wert, den Teil ich durch die Referenzspannung, dann mal 20 log... Jetzt hab ich mein dB Wert. Aber wie kann ich nun sagen das der Controller nach nem passenden Wert schauen soll?

    mfg

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •