Forum: FPGA, VHDL & Co. Digitales Audiosignal mit Lautstärkeregler


von Peter (Gast)


Lesenswert?

Hallo,

ich habe da eine Frage. Ich arbeite mich gerade in VHDL und FPGAs ein.
Und da wollte ich nun über einen Sigma Delta DAC digitale Audiodaten 
ausgeben. Die Audiodaten liegen als 16Bit PWM vor.

Meine Frage nun kann ich wenn ich die Lautstärke ändern möchte das 
irgendwie mit den PWM Daten machen? Also die Wertigkeit verändern?? So 
das am Ausgang der Sound leise oder lauter wird? Hardware Technisch über 
einen Amplifier geht nicht.

Danke
Gruß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter schrieb:
> Die Audiodaten liegen als 16Bit PWM vor.
Tatsächlich direkt als PWM-Bitstrom?

Oder eher wie üblich als eine "Audiodatei" mit 16-Bit Werten?
Dann könntest du einfach vor dem Ausgeben der Daten diese "kleiner" 
skalieren. Damit hast du eine geringere Eingangsamplitude für deinen DAC 
und fertig...

von Wissender (Gast)


Lesenswert?

Du verlierst natürlich Dynamik wenn du die Werte kleiner machst.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wie definierst du Dynamik?
Was vorher doppelt so laut war, ist auch nachher doppelt so laut.
Fazit: Dynamik bleibt gleich.

Bestenfalls der Rauschabstand wird geringer:
was vorher fast unhörbar im Rauschen war, ist nachher weg.

von Karim (Gast)


Lesenswert?

Macht auch so schon nicht viel Sinn, von Dynamikverlust zu reden, wenn 
man die Lautstärke reduzieren willst.

Wenn man das Umrechnen will, muss man wenigstens über ein PWM-Period 
hinweg integrieren und rechnen.

von Lattice User (Gast)


Lesenswert?

Lothar Miller schrieb:
> Peter schrieb:
>> Die Audiodaten liegen als 16Bit PWM vor.
> Tatsächlich direkt als PWM-Bitstrom?
>
> Oder eher wie üblich als eine "Audiodatei" mit 16-Bit Werten?

Nennt sich übrigens PCM.

von Marco (Gast)


Lesenswert?

Moin Moin

ich wollte auch sowas ähnliches machen wie der Peter.
Habe aber das mit dem skalieren nicht ganz verstanden.

Ist das in etwa so:
z.B.: ein 16Bit Signal in 24Bit eingebettet.

Mittel:
AUDIO_LEFT_VOL_24BIT(31 + 6 downto 0 + 6)  <= AUDIO_LEFT_VOL_16BIT;
AUDIO_RIGHT_VOL_24BIT(31 + 6 downto 0 + 6) <= AUDIO_RIGHT_VOL_16BIT;

Leiser:
AUDIO_LEFT_VOL_24BIT(31 + 3 downto 0 + 3)  <= AUDIO_LEFT_VOL_16BIT;
AUDIO_RIGHT_VOL_24BIT(31 + 3 downto 0 + 3) <= AUDIO_RIGHT_VOL_16BIT;

Lauter
AUDIO_LEFT_VOL_24BIT(31 + 9 downto 0 + 9)  <= AUDIO_LEFT_VOL_16BIT;
AUDIO_RIGHT_VOL_24BIT(31 + 9 downto 0 + 9) <= AUDIO_RIGHT_VOL_16BIT;

Gruß
Marco

von Alfi (Gast)


Lesenswert?

Du willst mit Faktoren 2 skalieren?
Warum nimmst du nicht den Wert und addierst jeweils die obligaten 0 ... 
3dB?

Du könntest z.B. Faktor 1,125 draufmultiplizieren:

Ergebnis (15downto0) = Input (15downto0) +/-  Input (15downto3)

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.