Forum: Digitale Signalverarbeitung / DSP / Machine Learning 1-BIT-Audio: Zwei Quellen mischen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens U. (Gast)


Lesenswert?

Von einem High-End-Wandler bekomme ich 4 Daten, alle als 1-BIT-Audio mit 
3.072MHz. Ich möchte beide L- und R-Kanäle zusammenmischen, also 1+3 und 
2+4.

Üblicherweise müssen diese gefiltert werden, um digitale Signale zu 
haben, die z.B. 16 Bit haben und die man dann addieren kann, um sie dann 
wieder zurück zu verwandeln. Kann ich das auch direkt digital machen?

Abgesehen von der Umsetzung wäre zunächst zu klären, ob das überhaupt 
theoretisch geht. Angenommen, ich nehme einen Addierer, dann bekomme ich 
Werte von 0..3. Wie komme ich wieder zu einem 1-BIT-Audio?

Wäre es möglich, die Signale zu multiplexen, also einfach die beiden 
Daten abzuwechseln? Dann hätte ich ein 6MHz-Signal, das wieder ein 1-Bit 
Signal darstellt. Die 4 Daten vom Wandler sind synchron, soviel habe ich 
schon gemessen.

Leider bringt der Artikel keine Lösung:
Beitrag "Wie addiert man digitale Audiosignale?"

von Bitklopfer (Gast)


Lesenswert?

Das kann man primitiv einfach re-quantisieren wenn man sich am 
Delta-Sigma-Prozess erster Ordnung orientiert

<code>
Akku=A+B
IF Akku >=2 THEN
   C=1
   Akku=Akku-2
ELSE
   C=0
ENDIF
</code>

Ergebnis ist C=(A+B)/2

von Bitklopfer (Gast)


Lesenswert?

Sorry, es muß natürlich heisen
<code>
Akku=Akku+A+B
</code>

von Jens U. (Gast)


Lesenswert?

Das leuchtet mir noch nicht so ganz ein. Wenn beide Signal hochsteuern, 
kann doch nicht ein negatives Ergebnis rauskommen?

Ich interpretiere die "1" als +1 und die "0", als -1. Ein ständiger 
Wechsel von 101010101 wäre also die Mittellage von 0,5 = Nulllinie. Wenn 
mehrheitlich Einsen kommen, dann muss das Signal steigen. Wenn beide 
steigen, dann müsste als Maximum auch permanent mehr, als 1 rauskommen 
und irgendwo eine Teilung durch 2 entstehen. Die sehe ich im Code, aber 
wenn ich das geistig durchspiele, komme ich nicht zum Ergebnis. Als 
Beispiel könnte man den anderen Datenstrom auf 0 setzen und müsste dann 
als Ergebnis das Halbe andere Signal bekommen. Ist das so?

von Bitklopfer (Gast)


Lesenswert?

Ich rechne so:

Wenn A=0 und B=0
Dann Akku +0
Daraus folgt C jedesmal = 0
Also C=(0+0)/2=0


Wenn A=1 und B=1
Dann Akku +2
Daraus folgt C jedesmal = 1
Daraus folgt Akku -2
Also C=(1+1)/2=1

Wenn A=1 und B=0 (oder anders herum)
Dann Akku +1
Daraus folgt im Wechsel
Akku=1 -> C=0 und Akku bleibt 1
Akku=2 -> C=1 und Akku wieder 0
Also C=(1+0)/2 = 1 0 1 0 1 0 ... im Mittel somit = 0,5

von c-hater (Gast)


Lesenswert?

Jens U. schrieb:

> Abgesehen von der Umsetzung wäre zunächst zu klären, ob das überhaupt
> theoretisch geht.

Geht natürlich.

> Angenommen, ich nehme einen Addierer, dann bekomme ich
> Werte von 0..3. Wie komme ich wieder zu einem 1-BIT-Audio?

Indem du den Takt verdoppelst...

von Jens U. (Gast)


Lesenswert?

Bitklopfer schrieb:
> Ich rechne so:
Das muss ich mal probieren.

c-hater schrieb:
>> Angenommen, ich nehme einen Addierer, dann bekomme ich
>> Werte von 0..3. Wie komme ich wieder zu einem 1-BIT-Audio?
> Indem du den Takt verdoppelst...
Der Takt ist festgelegt.

von c-hater (Gast)


Lesenswert?

Jens U. schrieb:

> Der Takt ist festgelegt.

Dann geht's logischerweise nicht ohne Informationsverlust. Sprich: du 
brauchst einen Filter.

Für den gibt's ziemlich viele Implementierungsvarianten im gesamten 
Bereich zwischen Kostenminimum und (unerreichbarem) Qualitätsmaximum. 
Such' dir einen aus.

Tendenziell ist die Lage so, dass du Richtung bessere Qualität eine 
zunehmende Zahl von "Umgebungsbits" in die Entscheidung mit einbeziehen 
musst.

Als Beispiel ein Filter, er bezieht nur das direkte Vorgängerbit in die 
Entscheidung ein und hat folgende Logiktabelle:

C  C-1 A B
0    0 0 0
0    1 0 0
1    0 1 0
0    1 1 0
1    0 0 1
0    1 0 1
1    0 1 1
1    1 1 1

Das ist im Prinzip genau das, was Bitklopfer da mit sehr viel Prosa auch 
schon beschrieben hat und stellt das untere Ende der möglichen 
Qualitätsskala dar. Verbal könnte man das als "ziemlich grausam" 
beschreiben...

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Jens U. schrieb:
> Wäre es möglich, die Signale zu multiplexen,

Sicher geht das, BTDT. Allerdings braucht es eine sehr gute analoge 
Umschaltung, wenn das am mal gefiltert werden soll, oder es muss 
entsprechend aufbereitet werden, dass keine unsauberen Signalperioden 
entstehen. Die Chips, die das 1-Bit-Audio annehmen, synchronisieren sich 
meistens, weil sie ein PDM erwarten, aber wenn das eine Analogschaltung 
ist, die PWM erwartet, weil sie auch kleinste Pulsänderungen 
mitverarbeiten soll, dann hast du da ein Problem.

Sind denn die Daten mit einem Takt gerastert? Oder ist das nicht ganz 
und gar ein S/PDIF Signal?

Was du hoffentlich hast, ist DSD und da geht das. Von der spektralen 
Qualität her ist das sogar besser, als Mischen und wieder Wandeln, aber 
es gibt einen Phasenversatz für den einen zugemischten Kanal. Der ist je 
nach Anwendung relevant. Wenn du den minimieren willst, kannst du auf 
höheren Taktraten multiplexen. Ich mache das z.B. mit vollem FPGA Takt. 
Da kommt dann so eine Art TDM raus :-)

Der Ansatz ist aber nur für wenige Anwendungsfälle nutzbar, denke ich. 
Ein solches Signal lässt sich mit einem FPGA auch sehr leicht dezimieren 
und mischen. Das sollte aber nicht ein Wandler 1. Ordnung sein, denn:

c-hater schrieb:
> Verbal könnte man das als "ziemlich grausam"
> beschreiben...
Das ist auch audiotechnisch grausam. Da bei einem so einfachen Verfahren 
das Signal neu erzeugt wird und dies schlecht, sind wir sehr weit vom 
"Mischen" entfernt.

Der ordentliche Weg ist nach wie vor ein möglichst gutes Dezimieren auf 
hohe Auflösung und Abtastrate, Phasenkorrektur (wenn nötig) und gfs 
Resampling und dann einfach addieren und wieder in ein gutes PDM / DSD 
verwandeln.

von Jens U. (Gast)


Lesenswert?

c-hater schrieb:
> Dann geht's logischerweise nicht ohne Informationsverlust. Sprich: du
> brauchst einen Filter.

Ich verstehe nicht, wie das sein soll: Ich bekomme 2 Signale mit 
DEMSELBEN Takt. Wenn ich den verdopple, was möglich ist, geht eigentlich 
nichts verloren.

Und mit Filter bin ich wieder beim klassischen Digital-Mixer.

Gehen wir also von der Variante Mischen aus und dem doppelten Takt. Das 
mit dem Versatz habe ich verstanden. Könnte man es eventuell so machen, 
dass einmal das eine und mal das andere Signal zuerst weitergegeben 
wird?

von c-hater (Gast)


Lesenswert?

Jens U. schrieb:

> Ich verstehe nicht, wie das sein soll: Ich bekomme 2 Signale mit
> DEMSELBEN Takt. Wenn ich den verdopple, was möglich ist, geht eigentlich
> nichts verloren.

Natürlich nicht. Schrieb ich in

Beitrag "Re: 1-BIT-Audio: Zwei Quellen mischen"

ja auch so.

Darauf antwortetest du in

Beitrag "Re: 1-BIT-Audio: Zwei Quellen mischen":

> Der Takt ist festgelegt.

Das kollidiert aber nun mit deiner neuen Aussage, dass die 
Taktverdopplung doch möglich wäre...

Was also ist dein Problem? Dass du nichtmal weisst, was eigentlich 
möglich ist in deiner Anwendung?

Ja, dann kann man dir auch nicht wirklich helfen. So ist das nunmal...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.