Hilfe bei Rechnung für Balancesteller für digtal einstellbaren Lautstärkesteller

Gast #3857666
Lesenswert?

Moin Moin,

ich lese nun schon seit einiger Zeit fleissig hier mit, habe ab und zu 
auch schon gepostet, und nun habe ich auch mal eine (wahrscheinlich 
ziemlich dumme)Frage.

Ich steh grad nämlich total auf dem Schlauch und habe schon leichte 
Kopfschmerzen.

Ich habe zwei digital einstellbare "Potis" mit jeweils 8bit 0x00 
entspricht in meiner Anwendung 0% Dämfung, 0xFF entspricht 100% 
Dämpfung.

Je eines dieser "Potis" ist für einen der beiden Stereokanäle eines 
Verstärkers zuständig.

Nun Habe ich mehrere Größen, die ich miteinander "verwursten" möchte, 
ich komme nur einfach nicht auf eine einfache Lösung, die ich auf einem 
µC in C simpel umsetzen kann:

Eingabe
- Dämpfung Gesamt als 8bit Wert
- Balance als 8bit Wert

Ausgabe
- Dämpfung links
- Dämpfung rechts

Wenn 'Balance' sich genau in der Mittelstellung befindet, soll der 
'Dämpfung links' und 'Dämpfung rechts' exakt gleich gross sein. Weicht 
'Balance' nach links oder rechts ab sollen die Werte von 'Dämpfung 
links' und 'Dämpfung rechts' entsprechend größer/kleiner werden.
Die angehängte Skizze macht es sicher einfach meinem wirren geschreibe 
zu folgen.

Hat irgendjemand einen kurzen Denkanstoss für mich? Ich möchte ungern 
mit Prozenten und dementsprechenden Fließkommazahlen rechnen - Das muss 
doch irgendwie möglich sein...

Mein Problem wurde doch bestimmt schon 10'0000e mal gelöst.

Danke für die Hilfe und Grüße

P.
Angehängte Dateien:
#3857697
Lesenswert?

Hi,

ich würde den Ansatz etwas anders gehen.
Momentan hast du bei Balance = mitte nicht die volle Aussteuerung und 
verlierst dadurch auch an Dynamikumfang deiner Potis.

Ich würde Mitte als 100 % Lautstärke definieren, wenn die Balance nach 
rechts verschoben wird, muss der linke Lautsprecher leiser werden, wenn 
nach links verschoben wird, der rechte Lautsprecher leiser...

Balance würde ich als signed verwenden, das macht die Rechnerei etwas 
einfacher.

Das ganze einfach mal aus dem Kopf runtergeschrieben:
1
uint8_t volume = 42;
2
int8_t balance = -64; //~ 50 % nach links
3

4
uint16_t volR = volume;
5
uint16_t volL = volume;
6

7
if(balance < 0)
8
{
9
  //balance nach links verschoben, rechts muss verringert werden
10
  balance *= -1; //wert invertieren, damit er positiv wird
11

12
  volR -= (volR * balance) / 127
13
}
14
else if(balance > 0)
15
{
16
  volL -= (volL * balance) / 127
17
}

Der Wert +128 darf für die Balance allerdings nicht verwendet werden.

Bei der Multiplikation entsteht höchstens 255*127 = 32385, passt also in 
den uint16, trotzdem sollte volL und volR im Range des uint8 bleiben.

HTH
Gast #3857702
Lesenswert?

Ich würde es mal mit Multiplizieren versuchen.

Balance auf rechts:
 Rechts ( 0-255 ) * 127
 Links  ( 0-255 ) * 0

Balance auf halb rechts:
 Rechts ( 0-255 ) * 127
 Links  ( 0-255 ) * 63

Also neutral:
 Rechts ( 0-255 ) * 127
 Links  ( 0-255 ) * 127

Balance auf halb links:
 Rechts ( 0-255 ) * 63
 Links  ( 0-255 ) * 127

Balance auf links:
 Rechts ( 0-255 ) * 0
 Links  ( 0-255 ) * 127

Ich würde allerdings bei der Balanceverstellung nur Dämpfen und nichts 
anheben.
Damit würde die Gesamtlautstärke die gleiche bleiben.
Gast #3857722
Lesenswert?

Ich verneige mich! Funktioniert. Und natürlich ist es auch viel schlauer 
den jeweils gegenüberliegenden Lautsprecher einfach abzusenken.

Habe Deinen Code mal in mein Projekt verpflanzt und siehe da, es tut was 
es soll. Der Abend ist gerettet.

Danke!
#3857774
Lesenswert?

Das kommt natürlich auf die Charakteristik der elektronischen Potis an. 
Denn für gewöhnlich will man, daß beim Ändern der Balance die Gesamt- 
lautstärke erhalten bleibt. Nur den Pegel eines Kanals absenken ist 
Mist, weil da die Lautstärke absinkt sobald man die Balance aus der 
neutralen Mittelposition dreht.

Am einfachsten ist es, wenn die Potis eine dB-lineare Kennlinie haben. 
Wenn also jeder Schritt den Pegel um einen konstanten Betrag von x.y dB 
anhebt bzw. absenkt. In diesem Fall muß man Lautstärke- und Balancewert 
einfach nur addieren. Die einzige kleine Schwierigkeit ergibt sich 
hierbei daraus, daß der Wert für die Lautstärke i.d.R. vorzeichenlos 
ist, während der Wert für die Balance natürlich ein Vorzeichen braucht.


XL

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren