ich möchte mit einem Xmega ein Lied abspielen welches auf einem Flash mit 8mb sitzt. Die Hardware ist super, es ist kein Rauschen, weder im Hintergrund noch beim abspielen zu hören. 16khz Abtastrate.
Problem ist aber: Die Ausgabe soll per 8 bit unsigned erfolgen, direkt über den integrierten 12 bit dac. Die 8 bit Daten schiebe ich um 4 nach oben.
Jetzt ist das Problem:
mp3 Datei super Qualität (klar, ist das Original).
Konvertierung zu 16 bit PCM, super Qualität (ich kann es aber nicht abspielen, ich vermute das ist signed 16 bit, es ist nur Krach).
Konvertierung zu unsigned 8 bit PCM - ich kann es abspielen. Allerdings habe ich ein ziemliches Rauschen im Hintergrund. Ich dachte der Fehler liegt erst an der Hardware wenn ich die Datei aber am PC abspiele mit höherer Lautstärke, hört man genau das Rauschen hier.
Jetzt meine Frage: Wie bekomme ich die Datei konvertiert, OHNE dieses Rauschen? Ich verstehe auch nicht woher das kommt, wenn ich eine 16 bit PCM habe, habe ich das nicht, bei 8 bit habe ich das auf einmal? Müssen doch nur jedes 2 Byte genommen werden.
Konvertierung zu 16 bit PCM, super Qualität (ich kann es aber nicht
abspielen, ich vermute das ist signed 16 bit, es ist nur Krach).
Bei 16 Bit ist signed üblich, bei 8 Bit eher unsigned mit entsprechendem
Offset.
Jetzt meine Frage: Wie bekomme ich die Datei konvertiert, OHNE dieses
Rauschen?
Auf 8 Bit linear? Gar nicht. Rate mal, warum man normalerweise lieber 16
Bit nutzt, falls möglich.
Ich verstehe auch nicht woher das kommt, wenn ich eine 16 bit
PCM habe, habe ich das nicht, bei 8 bit habe ich das auf einmal?
Dachtest du, es gibt keinen Verlust, wenn du auf 8 Bit reduzierst?
Ja, dachte ich, weil es einfach jedes 2. Byte wäre.
Jetzt aber die spannende Frage:
Wie bekomme ich die 16 bit entweder unsigned oder alternativ, wie gebe ich die signed wieder über einen 12 bit DAC. Ich habe nur positive Werte, ich kann keine negativen verarbeiten.
12 oder 16 ist egal, dann fallen halt die unteren 4 bit weg, das ist ok.
Nur das signed macht mir Probleme.
Wie bekomme ich die 16 bit entweder unsigned oder alternativ, wie gebe
ich die signed wieder über einen 12 bit DAC. Ich habe nur positive
Werte, ich kann keine negativen verarbeiten.
Wenn du die Werte von 0…200 hast und daraus sollen -100…+100 werden…
oder
Wenn du die Werte von -100…+100 hast und daraus sollen 0…200 werden…
Also da gibt Rechenanweisungen welche im Additions- bzw. Subtraktionsmilieu angesiedelt sind. ;-)
Den Wertebereich anpassen. Und zwar nicht nur dehnen/stauchen sondern auch verschieben indem ein Offset addiert wird.
Signed 16 Bit gehen von -2^15 bis +2^15-1.
Dein 12 Bit DAC geht von 0 bis +2^12-1.
Du musst also die 16 Bit Werte durch 2^4 teilen, den Wertebereich als um Faktor 16 stauchen. Dann sind das Werte von -2^11 bis +2^11-1. Und dann musst du noch den Wertebereich verschieben um 2^11. Damit die Mitte vom Wertebereich nichtmehr bei 0 sondern in der Mitte deines DACs liegt.
Wie bekomme ich die 16 bit entweder unsigned oder alternativ, wie gebe
ich die signed wieder über einen 12 bit DAC. Ich habe nur positive
Werte, ich kann keine negativen verarbeiten.
Wenn du die Werte von 0…200 hast und daraus sollen -100…+100 werden…
oder
Wenn du die Werte von -100…+100 hast und daraus sollen 0…200 werden…
Also da gibt Rechenanweisungen welche im Additions- bzw.
Subtraktionsmilieu angesiedelt sind. ;-)
Korrekt. Allerdings habe ich noch ein Brett vor dem Kopf dort etwas.
Ich weiß ja nicht in welchem Bereich die Werte sind. Ich convertiere die Daten in 16 bit PCM signed, dann schiebe ich den data Chunk einfach auf den flash.
theoretisch können die Werte dann -32768 bis 32767 sein. Addiere ich dann einfach max. negativen Wert drauf, also 32768 + PCM Wert?
Gustl hat's schon richtig beschrieben.
Dividiere (mit passender Rundung) durch 16 -> -2048…+2047
Addiere 2048 -> 0…+4095
Errotisch.
Danke, funktioniert perfekt OHNE Rauschen, herrlich!
Einziger Nachteil ist jetzt, durch die Stauchung ist es deutlich leiser
als vorher. Wie bekomme ich das wieder ausgeglichen?
Indem Du es wieder mal 16 nimmst ...
Jetzt mal im Ernst - was vergleichst Du hier eigentlich?
Als Du noch 16bit hattest, ging das ja sicherlich noch über einen 16bit DAC raus.
Jetzt sind es 12bit über einen 12bit DAC.
Wenn danach derselbe Audioverstärker folgt (also gleiche Verstärkung in beiden Fällen), dann arbeiten offensichtlich beide DACs mit unterschiedlichen Referenzen, was zu unterschiedlicher Lautstärke führt.
Also hast Du zwei Optionen:
erhöhe die Referenz des 12bit DAC auf denselben Wert wie die des 16bit DAC
oder erhöhe die Verstärkung des Audioverstärkers um den fehlenden Faktor
Nein.
Nochmal zum Verständnis: das Quantisierungsrauschen ist um den Faktor 2^(12-8) kleiner geworden, aber natürlich noch immer vorhanden und bei leisen Tonpassagen ganz sicher deutlich hörbar.
Einziger Nachteil ist jetzt, durch die Stauchung ist es deutlich leiser
als vorher.
Naja, wenn dein Nutzsignal dabei deutlich leiser geworden ist, dann ist es auch das Rauschen.
Verstärke es wieder auf eine der beschriebenen Arten und es ist wieder hörbar.
Abgesehen davon gibt es bei der Konvertierung auf eine kleinere Wortbreite auch die Möglichkeit 'Noise Shaping' anzuwenden - wird in DAWs angeboten. Das Zeitsignal sieht zwar schrecklich aus, aber das Rauschen ist trotzdem deutlich geringer als bei einfachem Abschneiden der LSBs.
Einziger Nachteil ist jetzt, durch die Stauchung ist es deutlich leiser
als vorher.
Naja, wenn dein Nutzsignal dabei deutlich leiser geworden ist, dann ist
es auch das Rauschen.
Nein, das Quantisierungsrauschen wird dadurch nicht weniger. Und das Nutzsignal sollte eigentlich ebenfalls nicht leiser werden.
Abgesehen davon gibt es bei der Konvertierung auf eine kleinere
Wortbreite auch die Möglichkeit 'Noise Shaping' anzuwenden - wird in
DAWs angeboten. Das Zeitsignal sieht zwar schrecklich aus, aber das
Rauschen ist trotzdem deutlich geringer als bei einfachem Abschneiden
der LSBs.
Genau genommen wird es nicht geringer, sondern es wird so verändert, dass es eher in Frequenzbereichen stattfindet, in denen es weniger auffällt.
Nein, das Quantisierungsrauschen wird dadurch nicht weniger. Und das
Nutzsignal sollte eigentlich ebenfalls nicht leiser werden.
Wenn alles leiser wird, wie bei einem Lautstärkesteller, den man zurückgdreht, dann auch das Rauschen. Es fällt dann weniger auf. Mehr meinte ich nicht.
Was die von Gustl B. beschriebene Modifikation bewirkt, habe ich nicht versucht nachzuvollziehen - das muss ich zugeben.
Genau genommen wird es nicht geringer, sondern es wird so verändert,
dass es eher in Frequenzbereichen stattfindet, in denen es weniger
auffällt.
Richtig. Ich schrieb ja auch, dass das Zeitsignal 'schlimm' aussieht. Der Rauschanteil wird dadurch zu hohen, weniger hörbaren Frequenzen verschoben. Zumindest für meine Altersklasse ideal ...
Was die von Gustl B. beschriebene Modifikation bewirkt, habe ich nicht
versucht nachzuvollziehen - das muss ich zugeben.
Das Nachvollziehen wird sicherlich auch nicht klappen, solange der TO keine Details dazu rausrückt, was er wie an welcher Stelle anders gemacht hat, bzw. welche Äpfel er mit welchen Birnen vergleicht.