Audio samplen und mit µC wiedergeben

Feb 17, 2008 26 Replies

Hallo NG,



ich steh grad irgendwie auf der Leitung :-)



Ich würde gerne ein Audiosample (liegt als MP3 vor) mit einem µC wieder ausgeben; dazu habe ich es in RAW-Werte konvertiert und in den Speicher des µC übertragen.



Die Ausgabe hätte ich über PWM gemacht; meine Frage ist jetzt, wie ich von den Audiodaten (die ja z.B. als 16-Bit signed int vorliegen) auf die PWM-Werte komme - mit der PWM kann ich ja nur positive Werte ausgeben...? Soll ich die negativen einfach weglassen?



Wäre super wenn mir jemand helfen könnte...



Schönen Sonntag noch, Martin


Das würde einen ziemlich schlechten Klirrfaktor geben. Addiere einfach den größtmöglichen negativen Wert zu allen Werten hinzu und schon hast du nur noch positive Werte. 16 Bit Auflösung wirst du aber wohl nicht hinbekommen, da dann die Taktfrequenz je nach Samplerate sehr hoch sein muß.

Frank Buss, fb@frank-buss.de http://www.frank-buss.de, http://www.it4-systems.de

Martin Hinterdobler schrieb:

MSB invertieren.

Das wird grausig klingen.

Gruß Henning

henning paul home: http://home.arcor.de/henning.paul PM: henningpaul@gmx.de , ICQ: 111044613

Hallo Martin,

Nein. Du musst zum signed Wert 2^15 dazuaddieren. Dann hast Du nur noch positive Werte. Das ganze dann auf den PWM und wichtig: PWM mit einem Tiefpass filtern und anschließend einem Hochpass auskoppeln. Dein µC kann ja keine negativen Spannungen wiedergeben. Durch die Addition vo

2^15 hast Du alles ins positive geschoben. 0V Audio entspricht dann Vcc/2, also vermutlich 2,5V. Mit einem Hochpass mit niedriger Grenzfequenz (10Hz) machst Du dann wieder +-2,5V draus. Aber mit 16-Bit Genauigkeit wird das nichts, schon 8-Bit werden eng (je nach Samplerate). Mit reiner digitaler PWM ist einfach nicht viel mehr zu machen.

Michael

Frank Buss schrieb:

und das ist 0x8000...

Also MSB invertieren.

Gruß Henning

henning paul home: http://home.arcor.de/henning.paul PM: henningpaul@gmx.de , ICQ: 111044613

Michael Rübig schrieb:

aka DC-Entkopplungskondensator, 1 bis 10uF.

Gruß Henning

henning paul home: http://home.arcor.de/henning.paul PM: henningpaul@gmx.de , ICQ: 111044613

Es gibt auch noch den "Poor Man's DAC". Wenn Du ein paar frei Port Pins hast oder ein Serial-Parallel Register spendieren kannst: R2R an 4, 5 oder 6 Pins haengen und Stromsumme erzeugen.

Gruesse, Joerg http://www.analogconsultants.com/

Joerg schrieb:

Auch eine nette Variante des R-2R-Wandlers:

formatting link

Wenn es wirklich nur um die Ausgabe des Samples und keine weiteren Steueraufgaben geht könnte man den µC sogar noch durch einen passenden Zähler ersetzen...

Gruß

Jochen

Jochen Reegschrieb: "

Das ist ja nun wirklich ein völlig krankes Beispiel.

- Mikrocontroller, der lediglich als einfacher Counter betrieben wird

- 16bit Ausgabe, aber nur 0.1% Widerstandstoleranz, ach nein ich lese gerade, er hat 1%ige ausgemessen. Welchen TK die wohl haben mögen?

- der pseudo DA-Wandler wird direkt aus die EPROMS geschaltet. Was da wohl herauskommt?

- TDA7053 mit B-Endstufe und 10% Klirrfaktor bei 1,2W

Dirk

Dirk Ruth schrieb:

...

Lag halt in der Kiste.

8 wollte er nicht, 16 waren dann das nächstliegende, lag halt in der Kiste....

Hast Du mal einen Originool-Baumarkt-Big-Ben-Gong gehört?

Mir fällt auf Anhieb keine Möglichkeit ein, _dieses_ Geräusch zu erzeugen :-)

Falk

1 Bit nehmen. :-)

Gruß Henning

Hallo Dirk,

nun mach den Jung doch nicht gleich rund. Das war ein Bastelprojekt, da kam es sicher nicht auf -100 dB Rauschen und 0,0000x % Klirr an. Das Teil funktioniert mit den Teilen, die der Jung in der Krabbelkiste gefunden hatte offensichtlich nach Wunsch. Er hat die Software nicht geheimgehalten, Ein anderer darf das gerne mit einem TTL-Grab machen, oder wie auch immer. Ich glaub zwar auch, dass der Jung die erreichbare Qualität von 8 Bit Sound unterschätzt (ich staune immer wieder über die 4 Bit 8 kSps in meinem MP3 Player, wenn er aufnehmen soll), aber was solls. Ein nettes Hobbyprojekt, das am Ende erfolgreich funktioniert.

Marte

Du kannst es ja mal ausprobieren: Wenn du die untersten 8 Bit weglässt, wirst du keinen Unterschied hören. Am besten im Doppelblindversuch, um es objektiv beurteilen zu können.

Frank Buss, fb@frank-buss.de http://www.frank-buss.de, http://www.it4-systems.de

Dirk Ruth schrieb:

Und auch das Filter und die Anpassung zwischen D/A-Wandler und Verstärker ist alles andere als optimal. So wie die meisten Schaltungen lässt sich auch diese anders und besser bauen. Mir ist auch klar, dass die Genauigkeit von 16 Bit nie erreicht wird. Aber 8 Bit sind bei linearen Abstufungen definitiv zu wenig, optimal wären 12. Aber da die Anschlüsse vorhanden und Widerstände übrig waren, habe ich mir erlaubt, diese auch noch zu verdrahten. Man möge mir verzeihen :-)

Ich habe auf diese Weise versucht, einen brauchbaren Gong aufzubauen und er erfüllt seinen Zweck. Er lässt sich auch relativ einfach nachbauen, erfordert keine Spezialteile und ist nicht teuer. Natürlich würde so eine Schaltung bei den Spezialisten unter euch nicht durchgehen, aber das war auch nicht das Ziel. Mit den meisten typischen China-Teilen kann das Gerät durchaus mithalten, außerdem macht selber bauen mehr Spaß als fertig kaufen.

Tschüs, Scott-Falk Hühn

Scott-Falk Hühn's Elektronik-Projekte: http://s-huehn.de/elektronik/

Schonmal ausprobiert, wie es sich mit dem Low-EPROM mit lauter Nullen gefüllt anhört? Bei 1% Toleranz bei den Widerständen hast du nämlich noch nicht mal 8 Bit, alles darunter geht sowieso im Rauschen unter. Und wie bereits geschrieben, Doppelblindversuch, damit du dich nicht selber täuschst, also wenn du noch ein EPROM zuviel hast, dann mischen, beide ausprobieren im Vergleich und dann die EPROMs auslesen, um zu sehen, wo die Nullen drin waren.

Frank Buss, fb@frank-buss.de http://www.frank-buss.de, http://www.it4-systems.de

Frank Buss schrieb:

Er kann ja auch ein leeres nehmen, lauter Einsen sollten es genau so tun. :-)

Gruß Henning

henning paul home: http://home.arcor.de/henning.paul PM: henningpaul@gmx.de , ICQ: 111044613

Frank Buss schrieb:

Die Widerstände wurden zwar mit einer Toleranz von 1% gekauft, sind aber nachträglich selektiert worden. Der erste Prototyp war mit einem EPROM und nur 8 Bit D/A-Wandler aufgebaut, das klang deutlich schlechter.

Tschüs, Scott-Falk Hühn

Scott-Falk Hühn's Elektronik-Projekte: http://s-huehn.de/elektronik/

Am Mon, 18 Feb 2008 21:19:56 +0100 schrieb Scott-Falk Huehn:

Hi!

Ganz schön akademische Diskussion um so einen Gong :-)

Na ja, unten beschnittene 16Bit sind ja auch nicht das selbe wie 8Bit. Mit beschnittenen 8Bit machst du sozusagen primitiv mp3, du schneidest alles unhörbare (sofern es wirklich unhörbar ist, was es ja zu testen gilt) ab.

Liebe Grüße, Thorsten

Das habe ich jetzt nicht verstanden. Übrigens: MP3 arbeitet auch in Zeitrichtung.

Gruß Henning

Thorsten Oesterlein schrieb:

Ich sehe da keinen Unterschied. Das höchstwertigste Bit eines DAC (egal ob 8 oder 16 Bit) entspricht Vref/2, das zweite Bit Vref/4 usw. Das achte Bit entspricht Vref/256. Setzt man beim 16-Bit-DAC nun alle folgenden Bits zu 0, so ist das äquivalent zum 8-Bit-DAC. (Sind die Bits 9-16 nicht 0, aber konstant, so entspricht das einem

8-Bit-ADC + Gleichanteil.)

Die ganzen MPEG-Audiocodecs funktionieren doch noch einmal deutlich anders.

CU Christian

Christian Zietz - CHZ-Soft - czietz (at) gmx.net WWW: http://www.chzsoft.com.ar/ PGP/GnuPG-Key-ID: 0x6DA025CA

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required