Forum: Mikrocontroller und Digitale Elektronik Lookup-Table für VU-Meter berechnen


von Chris (Gast)


Lesenswert?

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

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Mike (Gast)


Lesenswert?

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.

von Easylife (Gast)


Lesenswert?

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)

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank!
Ich habe nun diese Tabelle erstellt, es sieht so plausibel aus.

von Easylife (Gast)


Lesenswert?

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

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Easylife (Gast)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

@easylife:
Stimmt, ich habe die Skalierung gerade falsch herum gemacht.
Wie bist du auf deine Werte gekommen?

von Easylife (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.