mikrocontroller.net

Forum: FPGA, VHDL & Co. Wie signed 16bit PCM im digitialen 1Bit-DAC verarbeiten?


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 Robert S. (robert_s971)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich bin neu im FPGA-Umfeld und bin diesem Beispiel eines "PCM-Spielers" 
gefolgt:

https://www.fpga4fun.com/PWM_DAC_3.html

Ich habe neben dem DAC noch einen UART-Empfangsteil und einen FIFO für 
die PCM-Daten. Funktioniert alles prima. Außerhalb des FPGA habe ich 
eine Schaltung bestehend aus RC-Tiefpass, Operationsverstärker, 
Potentiometer und Kopfhöhreranschluß. Funktioniert ebenfalls.

In dem Beispiel auf fpga4fun werden zunächst 8-Bit PCM-Daten benutzt. 
Ich habe mein Design so erweitert, dass es mit 16-Bit arbeitet, 
allerdings erfolgt aus dem erweiterten Werteraum überhaupt keine 
klangliche Verbesserung (ich erwarte kein Hifi, aber es ist zu der 8Bit 
Variante keinen Deut besser).

Wenn ich dagegen die PCM-Daten mittels Laptopsoundkarte abspiele gibt es 
sehr wohl einen Unterschied zwischen 8- und 16-Bit PCM Daten. Die 
PCM-Daten habe ich mittels ffmpeg aus MP3s erzeugt. Die Daten sind also 
in Ordnung.

Schwierigkeiten bereitet wohl auch die Tatsache, dass die 16Bit Wert 
vorzeichenbehaftet sind. Sobald negative Werte auftauchen höre ich 
eigentlich nur Lärm.

Kann mir jemand sagen, wie ich den 1-Bit DAC so hinbekomme, dass ich 
damit 16-Bit vorzeichenbehaftete PCM-Werte wandeln kann?

Zur Sicherheit mein DAC-Modul in Verilog:

module fo_dac
    #(
    parameter BITS=16,
    parameter INV=1'b1)

    (
    input reset,
    input [(BITS-1):0] in,

    output out,

    input clk
    );

  localparam MSB = BITS - 1;

  reg [BITS:0] accumulator = 0;

  always @(posedge clk)
      accumulator <= accumulator[MSB:0] + in;

  assign out = (!reset ? accumulator[BITS] : 0) ^ INV;

endmodule

Falls jemand einen guten Literaturtipp für die Thematik FPGAs, DACs usw. 
hat. Kann er den gerne hier reinschreiben. FPGA-Bücher sind teuer und 
die Rezensionen bei Amazon haben mich alle nicht überzeugt.

von Audiomann (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von PingPong (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Xilinx XAPP154 und XAPP155.

Bei XAPP154 mal unter Sampling Rate lesen, 2,9Ghz für 16Bit... dürfte 
"etwas" sportlich werden. ;)

von Andi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Robert S. schrieb:
> .. dass es mit 16-Bit arbeitet,
> allerdings erfolgt aus dem erweiterten Werteraum überhaupt keine
> klangliche Verbesserung
> ...
> Schwierigkeiten bereitet wohl auch die Tatsache, dass die 16Bit Wert
> vorzeichenbehaftet sind. Sobald negative Werte auftauchen höre ich
> eigentlich nur Lärm.

Wie willst du denn eine klangliche Verbesserung beurteilen, wenn du bei 
16 Bits nur Lärm hörst (etwa die hälfte der Samples sind doch negativ)?

Am einfachsten wandelst du vorzeichenbehafte Werte um, indem du das MSB 
invertierst (du könntest auch einfach 16'h8000 dazu addieren):
module fo_dac
    #(
    parameter BITS=16,
    parameter INV=1'b1)

    (
    input reset,
    input [(BITS-1):0] in,

    output out,

    input clk
    );

  localparam MSB = BITS - 1;

  reg [BITS:0] accumulator = 0;

  always @(posedge clk)
      accumulator <= accumulator[MSB:0] + {~in[MSB],in[MSB-1:0]};

  assign out = (!reset ? accumulator[BITS] : 0) ^ INV;

endmodule

von Weltbester FPGA-Pongo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
PingPong schrieb:
> Xilinx XAPP154 und XAPP155.
>
> Bei XAPP154 mal unter Sampling Rate lesen, 2,9Ghz für 16Bit... dürfte
> "etwas" sportlich werden. ;)

Dort steht:

>For example the 16-bit audio DACs in a CD system would require a clock
>frequency of 2.9 GHz for full resolution of the highest frequencies.

Da frage ich mich aber, wie sie darauf gekommen sind und was "highest 
frequencies" sein soll. Audio-CDs haben maximal 22,5kHz und die lassen 
sich bei entsprechender Filterung auch mit weniger PWM darstellen. Und 
sie schreiben auch:

>In practice, a much lower clock frequency is used.

Schau an.

Das ist überdies auch kein FPGA-Problem, sondern ein generelles Thema, 
mit welcher Genauigkeit einer zufrieden ist.

von PingPong (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Weltbester FPGA-Pongo schrieb im Beitrag #6090867:
>
> Dort steht:
>
>>For example the 16-bit audio DACs in a CD system would require a clock
>>frequency of 2.9 GHz for full resolution of the highest frequencies.
>
> Da frage ich mich aber, wie sie darauf gekommen sind und was "highest
> frequencies" sein soll. Audio-CDs haben maximal 22,5kHz und die lassen
> sich bei entsprechender Filterung auch mit weniger PWM darstellen. Und
> sie schreiben auch:

"highest frequencies" ist die Audiobandbreite, 0-22,05Khz.

Bei 1,45Ghz-Clk wären es noch 0-11,025Khz.

Und bei "realistischen" 290Mhz Clk käme man auf 0-2,205Khz.

Wohl gemerkt, alles bei 16Bit.

Den Analogen Filter könntest du fast auslegen wie du willst, die 
Bandbreite gibt einzig und alleine der DAC vor.

von Robert S. (robert_s971)


Bewertung
0 lesenswert
nicht lesenswert
Moin,
danke erstmal an alle für die Antworten. Werde die Details in den 
kommenden Tagen studieren.

von Gustl B. (gustl_b)


Bewertung
0 lesenswert
nicht lesenswert
Auch wenn ich das nicht sinnvoll finde, könnte man dafür nicht die 
SerDes Bausteine verwenden? Selbst ein Artix schafft damit mehrere 
GBit/s.

von avr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Gustl B. schrieb:
> Auch wenn ich das nicht sinnvoll finde, könnte man dafür nicht die
> SerDes Bausteine verwenden? Selbst ein Artix schafft damit mehrere
> GBit/s.

Bevor man das macht sollte man wirklich über Delta Sigma Modulation 
nachdenken. Da reichen nämlich 3MHz für über theoretische 24bit (real 
vielleicht 20bit, das liegt aber nicht am Verfahren).

von Larry (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> über Delta Sigma Modulation nachdenken.

Die kann/kennt ein Antuino doch nicht.
Der kann/kennt nur PWM!

von Jürgen S. (engineer) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Netter thread. Spricht wieder für meine Strategie, mich in Richtung 
höhere Abtastraten zu orientieren :-)

Aber ernsthaft, wenn ein Audiofreak diesen thread unkritisch liest, geht 
wieder das Geschrei los, wegen der angeblich schlechten Qualität bei 
digitalen Signalen. Es muss etwas differenziert werden:

avr schrieb:
> Bevor man das macht sollte man wirklich über Delta Sigma Modulation
> nachdenken.
Der DAC im paper wird ja also solcher angepriesen :-)

> Da reichen nämlich 3MHz für über theoretische 24bit (real
> vielleicht 20bit
Ja und nein. Kommt auf die spektrale Verteilung an. Siehe das, was ich 
hier dazu schrieb:
Beitrag "Re: 1Bit Audio als Alternative zu PWM"

>das liegt aber nicht am Verfahren)
Das liegt schon an der Art des Verfahrens:


PingPong schrieb:
> Und bei "realistischen" 290Mhz Clk käme man auf 0-2,205Khz.
Die Größenrdnung stimmt. Ich verwende einen ähnlichen (um es genau zu 
sagen: einen besseren) Modulator für mein Bass-Array. Das arbeitet bis 
etwa 200Hz, dafür auf fast 24 Bit genau. Darüber wird es zunehmend 
schlechter. Dieses Verhältnis gilt so aber nur für den in dem paper 
vorgestellten Modulator erster Ordnung, einem einfachen RC-Filter und 
keinerlei Linearisierung.

Einen Audio-PDM-Modulator baut man meistens aber nicht so. Eher einen 3. 
Ordnung mit mehrpoligem Filter und Anpassung des Modulators auf dessen 
Frequenz und Phasengang. Das erledigen die üblichen DAC-Chips intern, 
inklusive dithering und oversampling.


Gustl B. schrieb:
> Auch wenn ich das nicht sinnvoll finde, könnte man dafür nicht die
> SerDes Bausteine verwenden? Selbst ein Artix schafft damit mehrere
> GBit/s.
Geht und wird auch gemacht, allerdings nicht unbedingt beim Audio, eher 
schon beim Thema Schall, genauer Ultraschall. Da gehen wir bis 6MHz 
Signal, nur halt keine 24 Bit.

Das Problem mit diesen Taktfrequenzen ist aber, sie in eine analoge 
Schaltung umzusetzen. Kein Mensch kann/ möchte ohne vernünftigen Grund 
Mega- oder gar GigaHz mit großen Leistungen digital switchen. Es müsste 
also erst ein Kleinsignal-Filter hintendran und das ist schwer so 
störungsarm zu bekommen, dass es für 24 Bit reicht. Mit 
1,5G-Transceivern kommt man bei einer Zielfrequenz von 5MHz etwa auf 
12-14BIt, die sich auch analog darstellen lassen.

: Bearbeitet durch User
von Robert S. (robert_s971)


Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,
ich bin kein Experte - zumindest nicht auf diesem Gebiet.

Der entscheidende Tipp war die Umwandlung vorzeichenbehafteten Werte in
Vorzeichenlose. Damit hörte das elende Geschnarre auf, dass ich mir
nicht erklären könnte.

Ich verwende für dieses Experiment natürlich nur normale
Elektronikbauteile aus dem Fachhandel und habe sie sauber aufs
Steckbrett gepackt. Das heißt Hifi-Supersound kann ich mir knicken, aber
für ein Experiment ist es schon super.

Mit den neuerlichen Erfolgen habe ich das Projekt weiter aufgebohrt und
genieße nun schon Stereosound bei 44kHz.

Ich weiß noch nicht wo ich mit der ganzen Aktion hin will, aber für den
Moment bin ich ganz begeistert, was ich in ca. 3 Wochen aus dem FPGA
rausholen konnte. Vorher war Verilog/VHDL wie Hieroglyphen für mich und
die letzte Physikstunde mehr als 15 Jahre her.

Wen es interessiert: Ich entwickle mit einem der Lattice ICE40 FPGAs die
sich ganz vorzüglich mit einer OpenSource-Toolchain ansprechen lassen.
Wie andere die sich mit dieser Plattform beschäftigt haben,
veröffentliche ich meine Quellen:
https://github.com/thebohemian/fpgafun

Vielleicht komme ich mal dazu ein "FPGA für Dummies" oder so daraus zu
machen. ;)

von avr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jürgen S. schrieb:
>> Da reichen nämlich 3MHz für über theoretische 24bit (real
>> vielleicht 20bit
> Ja und nein. Kommt auf die spektrale Verteilung an. Siehe das, was ich
> hier dazu schrieb:
> Beitrag "Re: 1Bit Audio als Alternative zu PWM"

Ich rede von 44,1kHz. Auf 48kHz kann ich mich noch einigen, alles andere 
ist für Audio bullshit. Und wer das Abtasttheorem verstanden hat, muss 
darüber auch nicht diskutieren.

Bis 48kHz sind theoretisch mehr als 24bit erreichbar bei 64-fachen 
oversamplings und zwar über den gesamten Frequenzbereich.

>> das liegt aber nicht am Verfahren)
> Das liegt schon an der Art des Verfahrens:

Dass man keine 24-bit erhält liegt einzig allein daran dass man auf der 
Analogseite Probleme bekommt. Dass Verfahren ist rein theoretischer 
Natur und kann auch theoretisch beliebige höhere Auflösungen mit 
entsprechendem oversampling darstellen.

Alles unter der Annahme, dass man einen anständigen Modulator 5-6 
Ordnung verwendet.

von avr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
avr schrieb:
> Ich rede von 44,1kHz. Auf 48kHz kann ich mich noch einigen, alles andere
> ist für Audio bullshit

Um das nochmal zu präzisieren: es ist für die Aufnahme und die die 
Ausgabe bullshit, es mag sein dass man intern Filter nutzt, die eine 
höhere Abtastrate brauchen, aber für die Ausgabe kann wieder auf eine 
niedrige Samplerate verlustfrei reduziert werden.

von Analoger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
avr schrieb:
> Und wer das Abtasttheorem verstanden hat, muss
> darüber auch nicht diskutieren.

Und wer das Abtasttheorem vollständig verstanden hat, der weiß, dass 
es nur für perfekte Filter gilt, die bis zur Grenzfrequenz mit Faktor 
1.000 und darüber hinaus mit 0.000 abbilden, also unendlich steil sind.

Diese Filter gibt es aber weder analog, noch digital. Auch nicht mit 
10poligen Filtern. Mit denen schon gar nicht, weil die eifrig schwingen 
und Resonanzen produzieren, welche mit dem, was ursprünglich gemessen 
wurde, rein gar nichts zu tun hat. Deshalb arbeiten die, welche 
Abtastung tatsächlich verstanden haben, mit erheblich mehr als nur 
gerade der doppelten Abtastrate.

Oszilloskope, die 50MHz darstellen wollen, arbeiten beispielsweise mit 
mindestens der 10-fachen Rate. In der HF-Messtechnik, wenn es darum 
geht, ein Signal von z.B. 1MHz auf 1% genau zu messen und in der Phase 
wieder abzubilden, arbeiten wir mit bis zu 100 MegaSamples, also einem 
Verhältnis von 1:100.

Ich möchte mal wetten, dass man bei Audio auf 1 Promille genau sein muss 
und damit eher noch ein besseres Verhältnis braucht. Aber wahrscheinlich 
benutzen Audioleute spezielle Mondscheinhardware und kommen mit sehr 
wenig Abtastung aus.

Die 44kHz sind also schon zu mickrig und macht Fehler. Die anschließende 
Umwandlung in Delta-Sigma mit einer geringen Modulatorfrequenz, die 
kleiner ist, als das 100-fache der Abtastung, macht noch weitere 
Probleme.

Aber wahrscheinlich hört sich das ja gerade so dolle an.

von avr (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Analoger schrieb:
> Und wer das Abtasttheorem vollständig verstanden hat, der weiß, dass es
> nur für perfekte Filter gilt, die bis zur Grenzfrequenz mit Faktor 1.000
> und darüber hinaus mit 0.000 abbilden, also unendlich steil sind.

Braucht man auch nicht, weil man eben Reserve hat. Im Passband sind 
1.000 auch nicht notwendig. Und bei Delta Sigma ist das Filter gar nicht 
so kritisch wie du denkst. Hier kann ein tradeoff in Richtung Auflösung 
durchgeführt werden. Wenn analog keine 24bit erreicht werden können, 
dann kann das quantisierungsrauschen erhöht werden, damit das Filter 
weniger steil sein muss.

Analoger schrieb:
> Oszilloskope, die 50MHz darstellen wollen, arbeiten beispielsweise mit
> mindestens der 10-fachen Rate. In der HF-Messtechnik, wenn es darum
> geht, ein Signal von z.B. 1MHz auf 1% genau zu messen und in der Phase
> wieder abzubilden, arbeiten wir mit bis zu 100 MegaSamples, also einem
> Verhältnis von 1:100

Das ist ein ganz anderes Thema. Für Sinussignale bräuchtest du auch 
keine 10-fache Übertastung und für 1,% Phasenmessung ebenso keine 
100-fache. Bei Audio geht es um Rekonstruktion bis zu einer bestimmten 
Frequenz. Da reichen für 99,999% der Leute 48kHz, bzw 44,1kHz mit knapp 
10% Reserve wenn man bis 20kHz geht. Meinetwegen kannst du 96kHz noch 
benutzen. Aber wer mit 192kHz oder gar 384kHz im Audio Bereich aufnimmt 
ist nicht mehr ernstzunehmen.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.

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