Hi, ich habe ein Vu-Meter mit 16 LEDs gebaut. Die Anzeige ist im Moment linear skaliert, d.h. ich dividiere einfach den ADC-Wert vom Atmega, so dass er in die 16 LEDs passt. Nun möchte ich eine Lookup-Tabelle einbauen, aber wie berechne ich die 16 Werte (z.B. mit Excel)? Danke! Chris
eigentlich ganz genau so, durch das Berechnen, Du musst nur von den Werten noch die Toleranz abziehen, um den untersten Wert zu erhalten, ab dem dein Vergleich dann arbeiten soll. Auf dieselbe Weise kannst Du auch logarithmisch arbeiten. Wenn Du die Ungenauigkeit des Anzeigeergebnisses ins Spiel bringst, ergeben sich daraus meisten vereinfachte Vergleiche auf nur einige obere Bits des Wertes wenn es ein INT ist.
Chris schrieb: > Nun möchte ich eine Lookup-Tabelle einbauen, aber wie berechne ich die > 16 Werte (z.B. mit Excel)? Das kommt drauf an, welchen Verlauf deine Skala haben soll. Gerne wird ein logarithmischer Verlauf gewählt. Der diskrete Zweierlogarithmus entsprich einer Schiebeoperation bzw. dem Exponent der Real-Zahl.
1 | dB value |
2 | 0 1,000000 |
3 | -3 0,707946 |
4 | -6 0,501187 |
5 | -9 0,354813 |
6 | -12 0,251189 |
7 | -15 0,177828 |
8 | -18 0,125893 |
value errechnet sich so: value = 10 ^ (dB / 20) oder dB = 20 * log10(value)
Vielen Dank! Ich habe nun diese Tabelle erstellt, es sieht so plausibel aus.
Chris schrieb: > es sieht so plausibel aus. nö, deine Skala ist recht eigenartig eingeteilt. Ich würde dir eher folgendes empfehlen: dB value (float) ADC-Wert (Schwelle) -0,05 0,994260 1018 -3 0,707946 725 -6 0,501187 513 -9 0,354813 363 -12 0,251189 257 -15 0,177828 182 -18 0,125893 129 -21 0,089125 91 -24 0,063096 65 -27 0,044668 46 -30 0,031623 32 -33 0,022387 23 -36 0,015849 16 -39 0,011220 11 -42 0,007943 8 -45 0,005623 6
So zeigt die LED aber erst an, wenn der Wert überschritten ist. Eigentlich macht ma es aber doch so, dass jede LED ihren Bereich abdeckt. Daher leuchtet in einem 5er System z.B. die erste von 0 .. 20%, ide letzte von 80% bis 100%. Die Zentralpunkte liegen bei 10%, .... 90%. Es braucht also den oben erwähnten offset in der Tabelle.
Jürgen Schuhmacher schrieb: > Eigentlich macht ma es aber doch so, dass jede LED ihren Bereich > abdeckt. Das kenne ich wiederum so nicht. Die dB Angaben beziehen sich eigentlich immer auf die untere Schwelle. D.h. die -9dB LED leuchtet nur dann, wenn das Signal >= -9dB ist, und nicht vorher.
@easylife: Stimmt, ich habe die Skalierung gerade falsch herum gemacht. Wie bist du auf deine Werte gekommen?
Chris schrieb: > @easylife: > Stimmt, ich habe die Skalierung gerade falsch herum gemacht. > Wie bist du auf deine Werte gekommen? Erfahrung ;-) 0dB ist bei digital Audio der Vollausschlag. Das Meter zeigt immer negative dB Werte (Abschwächungen) an. Eine 3dB Skala ist ganz schön anzusehen, da sich Musik meistens so bei -24dB..0dB abspielt. Kannst natürlich auch mit einer anderen Skaleneinteilung experimentieren, z.B. oben etwas feingradiger (-1.5dB Schritte), in der Mitte -3dB Schritte und unten dann -6dB Schritte... Die Formel den Schwellwert aus dem dB Wert zu errechnen, habe ich dir ja bereits gegeben. Um von float auf den ADC Schwellwert zu kommen, musst du ja nur mit 1024 multiplizieren, also ADC_schwelle = 1024 * (10 ^ (dB / 20))
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.
