Forum: FPGA, VHDL & Co. Noise Shaper in VHDL


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 W. (jensw)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin auf folgendes gestoßen:
https://github.com/YetAnotherElectronicsChannel/FPGA-Class-D-Amplifier
https://www.youtube.com/watch?v=3Jd_ZyCZeGk

im Video wird alles sehr schön erklärt.
Hier geht es darum, die PWM für einen Class-D Verstärker mit einem FPGA 
direkt aus dem Audio Stream zu erzeugen.
Das wollte ich schon lange mal machen, daher habe ich angefangen das auf 
einem Evalboard mit einem Spartan-6 zu bauen.
Den Code finde ich nicht so übersichtlich, daher habe ich die Module neu 
gemacht mit ein bisschen mehr Struktur.

Jetzt erklärt er, dass für das Noise Shaping die Koeffizienten schwer zu 
bestimmen sind.
Als Quelle wird das hier genannt:
https://www.uni-ulm.de/en/in/mikro/forschung/schwerpunkte/ad-wandler/online-tool-for-rapid-continuous-time-sd-modulator-design/

Das habe ich genutzt, aber jetzt fangen die Probleme an.
Bevor ich das in VHDL umsetze, kann man sich ja die reine Mathematik 
ansehen. Das habe ich in Excel (Anhang) gemacht, einfach um zu sehen, wo 
die Reise hin geht.
Für den Test lege ich einfach mal den maximal höchsten Eingangswert an 
und man sieht, dass der Noise Shaper nicht gegen einen konstanten Wert 
konvergiert. Ich hätte erwartet, dass man wenigstens einen statischen 
Endwert erreichen würde.
Ist das so? Ich habe noch keine Erfahrung mit dieser Thematik.

Als Fehler fällt mir ein:
- Das Tool zur Auslegung funktioniert nicht
- Das Excel File hat einen Fehler
- Oder ich habe für die Erzeugung der Koeffizienten falsche Annahmen 
gemacht.

Die Samplingrate liegt bei 384kHz(4x96kHz).
Übertragen will ich den "normalen" Audiobereich. Die Welligkeit wäre mir 
erstmal egal, es geht erstmal darum, das richtig zu verstehen.

Ich fokussiere mich im Moment noch nicht auf VHDL, daher habe ich die 
Files nicht mit angehängt. Es funktioniert schon in der Excel Tapete 
nicht.
Die blanke Mathematik muss erstmal gehen, bevor ich in die Umsetzung 
gehe.
Ich hoffe der ein oder andere hat ein paar Tipps für mich.

Danke euch!

Grüße, Jens

von Lars (rezyy)


Lesenswert?

Moin,

cooles Projekt, coole Idee. Der Link führt zu einem Delta-Sigma 
Modulator für eine A/D-Wandlung, nicht für eine D/A-Wandlung. Diese 
unterscheiden sich natürlich auch geringfügig. Nur als Info.

Jens W. schrieb:
> Für den Test lege ich einfach mal den maximal höchsten Eingangswert an
> und man sieht, dass der Noise Shaper nicht gegen einen konstanten Wert
> konvergiert. Ich hätte erwartet, dass man wenigstens einen statischen
> Endwert erreichen würde.
> Ist das so? Ich habe noch keine Erfahrung mit dieser Thematik.

Der Shaper soll dein Nutzsignal ja grundsätzlich so durchlassen und nur 
den Quantisierungsfehler spektral formen. Also klar, er sollte (bei 
konstantem Input im Mittel) gegen den Eingangswert konvergieren und 
lediglich spektral geformtes Quantisierungsrauschen hinzufügen.

Ich habe jetzt zwar nur kurz drüber geschaut, allerdings: Im Schaubild 
sind Integrierer enthalten. Die fließen in deine Berechnungen im 
Excel-sheet nicht ein, sofern ich das richtig gesehen habe. Das ist 
schonmal ein grober Fehler.

von Jens W. (jensw)


Lesenswert?

Hallo L,

da hast du Recht! Das sind Integrierer und nicht nur Totzeitglieder, so 
wie ich es in der Excel habe!
Das passe ich an und schaue, ob es besser wird!

Manchmal muss eben doch jemand anderes drüber schauen. Man wird schnell 
betriebsblind.

Danke dir!

Grüße, Jens

von Jens W. (jensw)


Lesenswert?

Hallo,

ich hab die Berechnung so angepasst, dass es tatsächlich Integrierer 
sind, aber das Gesamtverhalten ist dennoch nicht richtig. Der 
Ausgangswert konvergiert nicht gegen einen festen Grenzwert.

Hat jemand noch eine Idee, wo ich hinschauen könnte?
Oder kennt sich jemand näher mit dem Thema Noise Shaper aus?
Ich finde da auch recht wenig Infos, die das tatsächlich erklären oder 
Hinweise geben, wie man das richtig auslegt.

Grüße, Jens

von J. S. (engineer) Benutzerseite


Lesenswert?

Bei deinem Excel blicke ich jetzt nicht ganz durch, vermute aber, dass 
es die Quantisierungseffekte im Excel sein könnten, weil die Werte nicht 
so zeitgleich verrechnet werden, wie sie es müssten. Wenn ich sowas 
mache, baue ich das immer so auf wie in VHDL: Alles "kombinatorisch" von 
links nach rechts und dann zeilenweise "takten" indem man immer genau 
die Werte aus der Zeile N-1, N-2 und N-3 nimmt.

Zum Noiseshaping: Die Theorie dahinter ist mehr oder weniger einfach, 
wenn man von idealen Integratoren, idealen Filtern und einem idealen 
Verhalten des gesteuerten System ausgeht. Interessant wird die Sache 
dann, wenn man deren Abweichung mit einkalkuliert und zwar STEUERND, 
also in den Rechnungen der "Integratoren" inbegriffen und nicht nur 
REGELND, indem man den Ausgang nachzieht.

Man muss bei der Schaltung oben auch nochmal nachdenken, ob man wirklich 
ein System 3. Ordnung aufbauen möchte und welche Konsequenzen das hat.

Generell ist bei der Rückführung und dem eingegebenen Rauschen zu 
beachten, ein Spektrum zu wählen, dass zu dem Rauschspektrum der Quelle 
passt. Die Wandlung N:1 die ein Delta-Sigma z.B. vollzieht, hat ein 
bestimmtes Spektrum, das man ins Verhältnis zu dem eingeprägten Rauschen 
des zu wandelnden Signals setzen muss. Tut man da das Falsche hinzu, 
bekommt man unnötiges Rauschen. Daher macht es einen fundamentalen 
Unterschied, ob man für Audio oder allgemeine Messsignale arbeitet. 
Entscheidend ist auch die im Anschluss vorliegende Filterung. Dessen 
Ü-Verhalten muss ebenfalls passen.

Diesbezüglich sind die Infos der Uni Ulm ein wenig dünn.

von Jens W. (jensw)


Lesenswert?

Hallo,

die Excel habe ich auch so aufgebaut, wie du das machst. Die ganze 
Geschichte funktioniert ja mit MAC Einheiten und da habe ich auch die 
Trennung gemacht.
Für n=0 sind die Werte der Integratoren und des Ausgangs 0. Das sind die 
Init Werte nach dem Reset.
Eine Zeile tiefer sind dann die Rechnungen für die einzelnen 
Integratoren drin (das ist in der Excel oben noch nicht, das war ja 
falsch). Und dann von Links nach rechts, was an den einzelnen 
Integratoren anliegt.

Das mit dem Rauschen scheint aber noch etwas zu ein, dass in meinem 
Excel noch nicht passt.
Der Ausgang hat ja einen Quantisierer, der die Anzahl der Bits 
verkleinert. Das möchte ich ja haben, da eine PWM für die Endstufe bei 
384kHz und 24bit nicht funktioniert (nötige Taktfrequenz). Also wird am 
Ausgang einfach geschiftet bis auf die gewünschte Auflösung. Der Wert, 
der für die Berechnungen zurück geführt wird, wird dann wieder in die 
andere Richtung geschoben und mit Nullen aufgefüllt, dass die Dimension 
wieder passt.
Bei diesem Schritt kommt ja Rauschen in das Signal rein, oder?

Das habe ich in der Excel noch nicht.
Das ist sicher nicht richtig, aber ich glaube nicht, dass das der Grund 
ist, dass es nicht gegen einen festen Grenzwert konvergiert.

Du hast dich ja auch mit der Seite der Uni beschäftigt. Die Auslegung 
der Geschichte habe ich oben angehängt. Habe ich da vielleicht noch 
einen groben Bock drin?

Grüße, Jens

von Lars (rezyy)


Lesenswert?

Jens W. schrieb:
> Hat jemand noch eine Idee, wo ich hinschauen könnte?

Ich habe nochmal reingeschaut. Deine Berechnungen sind so aufgebaut, 
dass du für jeden Schritt (LT1, LT2, ...) den vorigen Wert (einen 
Zeitschritt vorher) der anderen Zwischenschritte wählst. Das würde einem 
Delay entsprechen, was es im Schaltbild aber nicht gibt. Ich gehe davon 
aus, dass das auch noch ein Fehler ist. Durch diese FF- und FB-Struktur 
ist das mit deiner Form voraussichtlich aber nicht so leicht umzusetzen. 
Du bräuchtest denke ich weitere Zwischenschritte, um hier nicht 
zyklische Berechnungen einzuführen.

Grundsätzlich würde ich dir raten, zunächst mit einem shaper 1. Ordnung 
anzufangen und die Berechnung durchführen. Diesen kannst du dann stets 
erweitern. So siehst du, was passiert und es ist nicht direkt von Anfang 
an unübersichtlich.

J. S. schrieb:
> Bei deinem Excel blicke ich jetzt nicht ganz durch, vermute aber, dass
> es die Quantisierungseffekte im Excel sein könnten, weil die Werte nicht
> so zeitgleich verrechnet werden, wie sie es müssten.

Zeit-Quantisierungseffekte scheint mir hier richtig, ja. 
Amplituden-Quantisierung dürfte es nicht sein, Excel arbeitet mit 
doubles.

Jens W. schrieb:
> Bei diesem Schritt kommt ja Rauschen in das Signal rein, oder?

Ja. Du kannst die unteren bits hierfür einfach abschneiden.

Jens W. schrieb:
> Das habe ich in der Excel noch nicht.
> Das ist sicher nicht richtig, aber ich glaube nicht, dass das der Grund
> ist, dass es nicht gegen einen festen Grenzwert konvergiert.

Genau, den Quantisierer kannst du zunächst auch weglassen - das ist 
nicht der Grund.

VG

von A. F. (chefdesigner)


Angehängte Dateien:

Lesenswert?

Frage an die Experten: Welcher Ordnung ist dieser Modulator? 5?
Ist das die Innovation bei dem Teil?

von Jens W. (jensw)


Lesenswert?

So wie ich es ausgewählt habe, soll es vierte Ordnung sein.
Hat auch vier Integratoren.

Ich habe noch ein bisschen mit dem Tool rumgespielt, aber ich bekomme 
kein stabiles System.
Das wäre dann das Ergebnis, das auch schon in der Präsi aus dem Youtube 
Kanal raus kam.
Ich komme so nicht weiter.
Auch die Doku auf der Seite ist recht dünn.
Ich bin soweit, dass ich den Professor vielleicht mal anschreiben 
sollte.

Grüße, Jens

von A. F. (chefdesigner)


Lesenswert?

Ich frage aus folgendem Grund:

Die Koeffizienten sind nur auf 6 Stellen genau angegeben. Wenn die 
Funktion des Modulators ähnlich ist wie bei der Filterung mit bilinearen 
IIR-Filtern, dann könnte es bei hohen Ordnungen etwas knapp werden. Die 
sollten bekanntlich aufeinander abgestimmt sein. Schaue ich mir z.B. die 
Koeffizienten für IIR-Filter an, die MATLAB für solche Filter ausgibt, 
dann haben die die doppelte Zahl der Stellen. Es kann natürlich sein, 
dass es übertrieben ist und sie nur die Mantisse ausnutzen möchten. Bei 
solchen Filtern ist es aber meiner Erfahrung nach so, dass die das 
Flattern kriegen, wenn die Auflösungen nicht stimmen und sich die 
Differenziale nicht gegenseitig treffen.

Das könntest du bei dem Prof nach nachfragen.

Und: Warum nutzt du überhaupt einen 4. Ordnung? Solche Modulatoren sind 
doch meistens 2. oder 3. Ordnung. Ich meine, dass die Ordnungszahl mit 
der Instabilität einher geht.

von Jens W. (jensw)


Lesenswert?

Hi,

vielen Dank!
Da habe ich wieder was, was ich versuchen kann. Die Genauigkeit der 
Koeffizienten kann ich noch leicht ändern.
Aber im Excel rechnet er ja schon in double. Die berechneten 
Koeffizienten für die Umsetzung in VHDL sind noch nicht verwendet.
Dennoch werde ich das ausprobieren. Komisch ist, dass bei der Simulation 
in VHDL ein statischer Endwert erreicht wird. Der ist zwar auch falsch 
von der Dimension, aber da schwingt nichts. Da werden mehr als ein 
Fehler drin sein, bis mein Modulator und das Excel zusammen passen.

Ich verwende 4.Ordnung, da die Chips von Texas Instruments für Class D 
Amps, das auch so machen. Das habe ich mir von denen abgeschaut. Für 
deren Qualität der Wiedergabe ist das vermutlich nötig.
Ich dachte, wenn ich die Struktur abgebildet habe, dann kann ich den 
Modulator auf alles einstellen, was ich gerne möchte und die 
Taktgeschwindigkeit zulässt. Das ist dann nur noch eine Frage der 
Koeffizienten. Da tausche ich dann nur noch die Koeffizienten. 
Synthetisiere neu und schon hab ich den neuen Modulator.

Das Tool der Uni Ulm ist so aufwändig gemacht, da war jemand lange dran 
gesessen. Da kann ich kaum glauben, dass die Bestimmung der 
Koeffizienten falsch sein soll.
Ich denke irgendeinen Denkfehler habe ich da noch drin.

Ich schreibe diese Woche den Professor an, das habe ich noch nicht 
gemacht.

Grüße, Jens

von A. F. (chefdesigner)


Lesenswert?

Eine Frage hätte ich noch: Wo wird denn das "noise" erzeugt und 
eingespeist? Ich kenne es so, dass Rauschen erzeugt wird, damit das zu 
modulierende Signal beaufschlagt wird, um es dann zu quantisieren. Man 
das die schwingende Schaltung automatisch? Muss die vielleicht 
schwingen?

Eigentlich ist es doch so:

Man hat einen 10-Bit Wert von sagen wir 20 und möchte ihn in 7 Bit 
darstellen. Es fehlen also 3 Bit. Gerundet ergibt sich damit ein Wert 
von 20/8 = 2,5. In einem einfachen idealen Modulatorsystem würde ich 
einen Wert von abwechselnd 2 und 3 erwarten. Mit einer höheren 
Aussteuerung vielleicht ab und zu 1 und 4. Gefiltert muss im Mittel 2.5 
herauskommen.

Wenn ich den Wert 22 darstellen will, dann muss auch der im Mittel 
herauskommen, d.h. der Schwerpunkt der Zahlen verschiebt sich 
mengenmäßig zu 3 und 4.

Vom Modulator erwarte ich jetzt, dass er das möglichst gut balanciert, 
dass der Wert einfach zu filtern ist = auf hohen Frequenzen rauscht.

Ich nehme an, die hohe Ordnung ist nötig, um das! zu leisten. Ich stelle 
mir das so vor, dass eine geringe Abweichung sofort zu einem umsteuern 
des Modulators führt, weswegen der sehr hochfrequent um den Zielwert 
herumtanzt.

Ist das in der Simulation?

von Lars (rezyy)


Lesenswert?

A. F. schrieb:
> Eine Frage hätte ich noch: Wo wird denn das "noise" erzeugt und
> eingespeist? Ich kenne es so, dass Rauschen erzeugt wird, damit das zu
> modulierende Signal beaufschlagt wird, um es dann zu quantisieren. Man
> das die schwingende Schaltung automatisch? Muss die vielleicht
> schwingen?

Ne, da soll nichts schwingen. Der Quantisierer ist in dem Excel sheet 
noch nicht implementiert. Das dürfte aber keine Probleme machen. Bei 
einem solchen Wandler hat man eine STF (signal transfer function) und 
eine NTF (noise transfer function). Je nach Wandler kann die STF einfach 
1 sein oder das Signal formen. Die NTF ist so ausgelegt, dass das 
eingeführte Quantisierungsrauschen spektral geformt wird. Wenn man den 
Quantisierer nun weglässt, hat man schließlich nur noch die STF für das 
Signal. Dadurch dürfte hier erstmal nichts schwingen, sofern das Filter 
korrekt ausgelegt ist.

Es kann instabil werden, wenn ein Wandler höherer Ordnung auf 1 bit 
quantisiert werden soll - deshalb nutzen höhere Ordnungen eher multi-bit 
Quantisierer.

Was mir von der Website nicht klar wird: Die Integrierer sind "ideal". 
Sind das Integrierer mit einer Null im Ursprung oder ohne Nullstelle - 
also mit Delay in den FF-path gerückt oder ohne. Das hat nämlich auch 
Einflüsse auf die STF etc. Möglicherweise sind die Integrierer auch 
nicht alle gleich zu wählen.

Dieser generische Wandler ist eben nicht so ganz trivial, insbesondere 
mit den FF- und FB-Koeffizienten. Da muss man schon die Struktur (und 
auch die Integrierer) im Detail kennen. Dann könnte man auch die STF und 
NTF berechnen und es mathematisch aufdröseln und verstehen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Jens W. schrieb:
> Die ganze Geschichte funktioniert ja mit MAC Einheiten und da habe
> ich auch die Trennung gemacht.

Was mir direkt auffällt ist die große Schrittweite der Berechnungen. 
Wenn da so viele Differenziale drinstecken, wird das schnell falsch. Die 
Berechnung über diskrete Werte ist ja nur eine Annäherung an das 
mathematische / physikalische Ideal. Man unterscheide 
Differenzenquotient <-> Differenzialquotient, das "common problem" der 
Signalverarbeitung.

Ich denke, da muss noch eine zeitliche Verfeinerung rein, also die 
Ergebnisse müssen skaliert werden, damit sich die Zahlen nur langsam 
ändern. Diese muss natürlich durch die Stufen (in richtiger Weise) 
durchgezogen und berücksichtigt werden.

Ich habe es demohalber mal mit 10 geteilt und bekomme eine Art Rechteck 
mit Anstiegsbegrenzung und etwas Überschwinger.

von Jens W. (jensw)


Angehängte Dateien:

Lesenswert?

Hallo,

das ist ein guter Einwand.
Allerdings rechne ich in der Excel nicht mit Integer-Werten, sondern mit 
double. Nur die Darstellung sieht so aus, da ich die Zelle entsprechend 
formatiert habe und die Nachkommastelle ausblende.
Denkst du, dass dann der Fehler trotzdem so groß wird? Oder ist das nur, 
wenn man tatsächlich mit Integer rechnet und bei jedem Rechenschritt 
eine Rundung drin hat?

Ich bin in der Excel nun auch einen Schritt weiter.
Ich habe die Quantisierung am Ausgang drin und das hat definitiv einen 
Einfluss.

Jetzt kommt das schöne:
Ich habe die Parameter so rechnen lassen, dass ich im Prinzip nur noch 
einen Integrator wirksam habe. Nicht mehr vier.
Das läuft jetzt nur noch über die Parameter. In VHDL wird das später 
auch so sein und man kann die Struktur unangetastet lassen.
Ergebnis:
Das System schwingt auch, jedoch bekam ich das System stabil, indem ich 
nur einen Parameter von 1 auf 0,45 verkleinert habe.
Hier erreiche ich einen statischen Endwert, wenn ich einen Sprung drauf 
gebe.

Ich dachte, von da aus könnte man schrittweise das System bis zur 
vierten Ordnung wieder aufbauen.
Aber selbst wenn das funktioniert (und da bin ich skeptisch), bedeutet 
das, dass die Parameter-Annäherung der Uni Ulm nicht funktioniert.

Ich hab den Professor noch nicht angeschrieben, ich hatte noch keine 
Zeit, aber das werde ich noch machen. Vielleicht mag er sich an der 
Diskussion hier beteiligen. Man wird sehen.
Ich halte euch auf dem Laufenden!

Grüße, Jens

von A. F. (chefdesigner)


Lesenswert?

L. schrieb:
> Ne, da soll nichts schwingen. Der Quantisierer ist in dem Excel sheet
> noch nicht implementiert.

Der sollte aber implementiert werden, weil dieser doch die eigentliche 
Funktion des Teils bedingt. Ohne Quantisierung gibt es keine Modulation.

Jens W. schrieb:
> Ich habe die Quantisierung am Ausgang drin und das hat definitiv einen
> Einfluss.

Ja, das wundert mich nicht. Wie ich bereits andeutete muss eine solche 
Schaltung schwingen, damit sie arbeitet.

Jens W. schrieb:
> Das System schwingt auch, jedoch bekam ich das System stabil, indem ich
> nur einen Parameter von 1 auf 0,45 verkleinert habe.

Durch Herumprobieren?

Ich für meinen Teil komme da nicht mehr mit, worauf man hier hinaus 
will. Wie ein Integrator funktioniert, ist doch klar: Es summiert das 
Signal, das der Ausgang bekommt, solange auf, bis der Komparator sagt 
"zu gross". Dann schaltet die Richtung um und der Ausgangswert am 
Verbraucher sowie der Integratorwert werden wieder kleiner, bis es 
wieder umschaltet. Resultat: Es pendelt. Da gibt es keinen 
Gleichgewichtszustand. Das ist immer ein Führungsband innerhalb dem der 
Zielwert zittert.

Im letztendlichen Zustand bei Erreichen des Endwerts wackelt der 
Ausgangspin = das kleinste Bit mit jedem Takt hin und her, wenn sich der 
Zielwert nicht ändert.

Solange das nicht funktioniert, ist schon an der Excelmathematik etwas 
faul.

Aber einen Schritt scheinst du ja zu haben. Aber:

>Ich dachte, von da aus könnte man schrittweise das System bis zur
>vierten Ordnung wieder aufbauen.
Das erfordert sicher andere Einstellungen für die Verstärkungen und 
Additionen. Es macht doch garantiert einen Unterschied, ob es 3,4 oder 5 
Stufen sind.

von Lars (rezyy)


Lesenswert?

A. F. schrieb:
> Der sollte aber implementiert werden, weil dieser doch die eigentliche
> Funktion des Teils bedingt. Ohne Quantisierung gibt es keine Modulation.

Natürlich sollte er das grundsätzlich. Wenn man den Quantisierer nicht 
implementiert, dann erhält man schließlich einfach nur eine STF für das 
Eingangssignal. Je nach Delta-Sigma-Wandler eben einfach einen Filter. 
Sofern dieser aber bereits ohne Quantisierer falsche Ergebnisse liefert, 
ist etwas anderes faul. Das hat nichts mit dem fehlenden Quantisierer zu 
tun..

A. F. schrieb:
> Jens W. schrieb:
>> Ich habe die Quantisierung am Ausgang drin und das hat definitiv einen
>> Einfluss.
>
> Ja, das wundert mich nicht. Wie ich bereits andeutete muss eine solche
> Schaltung schwingen, damit sie arbeitet.

Natürlich hat der Quantisierer grundsätzlich einen Einfluss auf deinen 
output, da man ja einen Fehler einführt. Aber auch ohne sollte das 
funktionieren! Man nehme den einfachsten digitalen Delta-Sigma-Wandler, 
entferne den Quantisierer und rechnet das durch. Dann sieht man, dass 
die STF = 1 ist. Der Wandler macht also quasi gar nichts, liefert aber 
den erwarteten output (=input). Mit dem Quantisierer wird nur das 
spektral geformte Quantisierungsrauschen addiert. Und "schwingen" tut da 
noch immer nichts. Bei Delta-Sigma-Wandlern wird das 
Quantisierungsrauschen in hochfrequente Anteile geschoben - das heißt 
nicht, dass das Ding schwingt. Es fügt nur hochfrequenteres Rauschen 
hinzu.

Übrigens, der Quantisierer in dem neu angehängten Excel sheet ist nicht 
korrekt. So quantisiert man nicht.

Hier mal eine schöne kurze Einführung in Wandler höherer Ordnung. Auch 
mit mathematischem Hintergrund:
https://classes.engr.oregonstate.edu/eecs/spring2021/ece627/Lecture%20Notes/2nd%20&%20Higher-Order2.pdf

von Jens W. (jensw)


Lesenswert?

A. F. schrieb:
> Ich für meinen Teil komme da nicht mehr mit, worauf man hier hinaus
> will. Wie ein Integrator funktioniert, ist doch klar: Es summiert das
> Signal, das der Ausgang bekommt, solange auf, bis der Komparator sagt
> "zu gross". Dann schaltet die Richtung um und der Ausgangswert am
> Verbraucher sowie der Integratorwert werden wieder kleiner, bis es
> wieder umschaltet. Resultat: Es pendelt. Da gibt es keinen
> Gleichgewichtszustand. Das ist immer ein Führungsband innerhalb dem der
> Zielwert zittert.

Da ist doch gar kein Komparator drin. Da verstehe ich den Einwand nicht.
Oder stehe ich jetzt komplett auf dem Schlauch?

A. F. schrieb:
> Solange das nicht funktioniert, ist schon an der Excelmathematik etwas
> faul.

Das ist genau das, was ich heraus finden will. Wo liegt der Fehler schon 
in der Excel. Wenn da schon ein Fehler drin ist, brauche ich ans FPGA 
noch gar nicht denken.

L. schrieb:
> Übrigens, der Quantisierer in dem neu angehängten Excel sheet ist nicht
> korrekt. So quantisiert man nicht.

Das habe ich so aus dem Video entnommen.
Wie macht man es denn richtig?

Grüße, Jens

von Lars (rezyy)


Lesenswert?

Moin,

Jens W. schrieb:
> Das habe ich so aus dem Video entnommen.
> Wie macht man es denn richtig?

Voraussichtlich würdest du einen "mid-tread uniform quantizer" 
implementieren. Schau mal hier: 
https://en.wikipedia.org/wiki/Quantization_(signal_processing)#:~:text=An%20analog%2Dto%2Ddigital%20converter%20(ADC)%20can%20be,finite%20set%20of%20discrete%20values.

Du teilst den Wert durch die Schrittgröße deines Quantisierers, addierst 
1/2 und "floorst" das Ergebnis. Dann multiplizierst du wieder mit der 
Schrittgröße. Zusätzlich muss man natürlich das clipping einbauen.

Was du gemacht hast: Du hast durch die Anzahl der Stufen geteilt (nicht 
die Schrittgröße) und dann wieder damit multipliziert. Damit hast du 
eigentlich nichts geändert.

In dem Video bei ~Minute 20 passt das gezeigte Schaubild des Integrators 
übrigens auch nicht mit der gezeigten Übertragungsfunktion zusammen. Da 
ist die Frage, was nun wirklich implementiert ist. Das ist das, was ich 
mit der Nullstelle ansprach..

Viel Erfolg!

von J. S. (engineer) Benutzerseite


Lesenswert?

Jens W. schrieb:
> Denkst du, dass dann der Fehler trotzdem so groß wird?

Wenn der Entwert schon durch 5 Excelzeilen generiert wird, kann das 
nicht stimmen. Ich habe ja so meine Erfahrungen mit Excel-Simulationen 
mit Filtern aller Art und kann dir sagen, dass man so eine Schwingung 
mindestens mit 100 Werten auflösen muss, wenn die Berechnung 
einigermaßen zur Realität passen soll. Für einen Sinus wären das 25 
Punkte für eine Viertelwelle. Meine Schwingungsgeneratoren im FPGA 
arbeiten auch diskret, verwenden eine Restgliedabschätzung- mit 
Korrektur, laufen aber selbst mit 768kHz Abtastung bei z.B. einer 16kHz 
Sinuswelle, der Ideal schon um knapp 1% in der Frequenz und Phase weg, 
was ich durch eine Setup-Korrektur vorkompensiere.

Die Überabtastung beträgt da also schon 48 und muss nur eine Schwingung 
2. Ordnung berechnen können. Ohne Korrekturen oder Restglied bräuchte 
man sicher 3-5 Oktaven mehr oder muss mit mehr Fehler leben.

von Jens W. (jensw)


Lesenswert?

Hallo zusammen,

@J.S.:
das habe ich schon feiner aufgelöst. Im letzten angehängten Excel sind 
es 100 Werte und auch nicht mehr mit einem Sprung, sondern mit einem 
Sinus mit maximaler Amplitude. Das entspricht bei mir dann etwa 38kHz 
Eingangssignal.
Ist zwar etwas hoch, aber für eine Simulation nah genug dran.

@L.:
Vielen Dank für den Link, da wird es ja ausführlich beschrieben.
Du hast Recht, in der Excel war das falsch, aber der resultierende 
Fehler ist nicht so groß. Wenn man die Floor-Funktion nicht verwendet, 
wird nur der Rundungsfehler größer. Das wird das Signal etwas 
verschlechtern, führt aber nicht dazu, dass das gesamte System nicht 
funktioniert.

Ich habe den Filter auf Ordnung 2 erhöht. Mit dem Tool gleiches 
Ergebnis. Wenn man die Parameter b um 0,5 verkleinert und b um 0,5 
vergrößert, dann geht es in die richtige Richtung.
Das deckt sich dann mit den Ergebnissen aus dem Video, dass mit dem Tool 
es keine passenden Parameter gibt.
Mal sehen, ob der Professor der Uni-Ulm antwortet.

Grüße, Jens

von Lars (rezyy)


Lesenswert?

J. S. schrieb:
> Wenn der Entwert schon durch 5 Excelzeilen generiert wird, kann das
> nicht stimmen. Ich habe ja so meine Erfahrungen mit Excel-Simulationen
> mit Filtern aller Art und kann dir sagen, dass man so eine Schwingung
> mindestens mit 100 Werten auflösen muss, wenn die Berechnung
> einigermaßen zur Realität passen soll. Für einen Sinus wären das 25
> Punkte für eine Viertelwelle. Meine Schwingungsgeneratoren im FPGA
> arbeiten auch diskret, verwenden eine Restgliedabschätzung- mit
> Korrektur, laufen aber selbst mit 768kHz Abtastung bei z.B. einer 16kHz
> Sinuswelle, der Ideal schon um knapp 1% in der Frequenz und Phase weg,
> was ich durch eine Setup-Korrektur vorkompensiere.

Ich verstehe deinen Einwand nicht. Seine 5 Werte sind Zwischenschritte 
des Filters, jeweils hinter den Integratoren. Das erhöht die 
Übersichtlichkeit. Die Zeitauflösung, die du ansprichst, ergibt sich aus 
dem abgetasteten Eingangssignal. Da hier (in der Version, die ich mir 
angeschaut habe) einfach ein Sprung als input genutzt wurde, ist die 
zeitliche Auflösung hinreichend hoch. Sofern das Filter stabil ist und 
der input nicht zu groß ist, schwingt es sich kurz auf den konstanten 
input ein. Da kann man nichts höher auflösen, sofern die 
Filterkoeffizienten für die angepeilte Abtastfrequenz bestimmt wurden.

Jens W. schrieb:
> @L.:
> Vielen Dank für den Link, da wird es ja ausführlich beschrieben.
> Du hast Recht, in der Excel war das falsch, aber der resultierende
> Fehler ist nicht so groß. Wenn man die Floor-Funktion nicht verwendet,
> wird nur der Rundungsfehler größer. Das wird das Signal etwas
> verschlechtern, führt aber nicht dazu, dass das gesamte System nicht
> funktioniert.

Du hast Recht, dass das System weiterhin funktioniert, solange du bei 
shapern höherer Ordnung nicht auf bspw. 1 bit quantisierst. Du kannst 
den Quantisierer wie gesagt auch weglassen, das System wird trotzdem 
funktionieren, indem es einfach den input mit der STF filtert. Wenn du 
aber nicht 0.5 addierst und "floorst", wird der eingeführte Fehler 
allerdings kleiner. Dann hast du nur noch etwaige Rundungen durch die 
Berechnung in double precision. Diese Fehler sind so gering, dass man 
das nicht merken wird - du hast quasi keinen wirklich merkbaren 
Quantisierungseffekt. Wieso meinst du, dass der Fehler größer wird?

Als Beispiel: Wie ich schrieb, musst du durch die Schrittweite teilen, 
nicht durch Anzahl an Stufen. Man teste einfach mal verschiedene inputs 
mit bspw. einer Quantisierungsschrittweite von q = 1/8. Clipping nicht 
eingerechnet.
Der quantisierte Wert wäre 1/8*floor(x/(1/8)+0.5) mit x als 
Eingangswert.
x=0.2 -> 0.25
x=0.1 -> 0.125
x=0.06 -> 0
x=0.07 -> 0.125

Sofern du deinen zunächst implementierten Quantisierer nutzen würdest, 
hast du (bspw. mit 2^3 Quantisierungsleveln) so gerechnet: x/(2^3) und 
dann im nächsten Schritt für den neuen input einfach wieder *2^3. Da 
passiert nichts, außer dass du die doubles möglicherweise rundest. Das 
ist schon ein großer Unterschied.

Jens W. schrieb:
> Ich habe den Filter auf Ordnung 2 erhöht. Mit dem Tool gleiches
> Ergebnis. Wenn man die Parameter b um 0,5 verkleinert und b um 0,5
> vergrößert, dann geht es in die richtige Richtung.
> Das deckt sich dann mit den Ergebnissen aus dem Video, dass mit dem Tool
> es keine passenden Parameter gibt.
> Mal sehen, ob der Professor der Uni-Ulm antwortet.

Ich gehe auch davon aus, dass das tool einfach keine sauberen Parameter 
ausspuckt. Dieser absolut generische shaper höherer Ordnung ist eben 
auch nicht trivial.

: Bearbeitet durch User
von Jens W. (jensw)


Lesenswert?

Vielen Dank für die Aufklärung!

Mit der Schrittweite habe ich noch ein Problem. Sind die 1/8 willkürlich 
gewählt? Und wie passe ich das auf mein System an.

Kannst du das bitte an den konkreten Werten in meinem Beispiel erklären?
Mein Eingangswert ist ein 24bit Wert. der Ausgang soll 9bit haben.
Wie setze ich da jetzt die Schrittweite?
Mir fällt das schwer zu verstehen, da ich ja mit signed Werten rechne.
Da ist alleine die Addition von 0.5 nicht einfach so möglich. Das muss 
ich anders lösen.
Also vielleicht auf 10bit Quantisieren, dann kann ich 1 addieren und 
dann um ein bit shiften am Ende, bevor ich das Signal weiter gebe.

Grüße, Jens

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

L. schrieb:
> Ich verstehe deinen Einwand nicht. Seine 5 Werte sind Zwischenschritte
> des Filters, jeweils hinter den Integratoren.

Es geht um die Werte nach unten in den Zeilen - siehe Bild.
Da sind die Sprünge derart groß, dass die Rechnung von sich aus infolge 
unzureichender Zeitauflösung schwingt, weil die Wertzuwächse zu groß 
sind und nicht sinnvoll vom nächsten Formelzugriff genutzt werden. Das 
Resultat ist, dass die Rechnung schon von Anfang an zu schwingen 
beginnt, wenn man sich die ersten 5 Werte ansieht.

Wenn man das aus der Sicht der Signalverarbeitung sieht, dann wird die 
eigentliche Formel durch das Excel "abgetastet" und die in der Formel 
implizit verborgenen Oberwellen = Frequenzen werden mit der 
Abtastfrequenz des Excels "gefaltet".

Die "Abtastfrequenz des Excels" = Zahl der Zeilen muss in Anrechnung der 
Genauigkeit der Abbildung genügend groß gegenüber der höchsten 
auftretenden Oberwelle in der Formel = Steilheit sein. Wenn man sich 
einen Bogen denkt und den als Sinus sieht, dann wird dessen Verlauf 
mindestens mal 5-6 Punkte erfordern, bei einer Vollwelle eben 20-25. 
Ordnung = 4 -> 80 ... 100 Punkte.

von J. S. (engineer) Benutzerseite


Lesenswert?

L. schrieb:
> Da kann man nichts höher auflösen, sofern die
> Filterkoeffizienten für die angepeilte Abtastfrequenz bestimmt wurden.
Diese Abtastfrequenz scheint mir aber falsch verstanden oder falsch im 
Excel umgesetzt. Das kann so niemals passen.

Der andere Punkt ist die Auflösung der Koeffizienten, die angesprochen 
wurde: Die können durchaus etwas gering sein. Bei Integratoren ist es 
weniger ein Problem, aber auch dadurch wird Rauschen eingespeist, weil 
nicht der exakte Wert wirkt, sondern das, was nach der Multiplikation 
mit dem gerundeten Koeffizienten herauskommt. Im Übrigen regt genau 
dieses Rauschen auch solche Filter an.

von Lars (rezyy)


Lesenswert?

Jens W. schrieb:
> Mit der Schrittweite habe ich noch ein Problem. Sind die 1/8 willkürlich
> gewählt? Und wie passe ich das auf mein System an.

Ja, die 1/8 waren willkürlich gewählt.

Jens W. schrieb:
> Kannst du das bitte an den konkreten Werten in meinem Beispiel erklären?
> Mein Eingangswert ist ein 24bit Wert. der Ausgang soll 9bit haben.
> Wie setze ich da jetzt die Schrittweite?

Dann musst du zunächst auch die Eingangswerte direkt auf 24 bit 
quantisieren, da Excel ja selbst mit doubles rechnet.

Das kommt am Ende schließlich auf deinen Wertebereich am Eingang an. Was 
für Eingangswerte hast du? Ich schätze du wirst mit fixed points 
rechnen. Nehmen wir an, dass deine Eingangswerte in 24 Bit quantisiert 
sind und einen Wertebereich von [-1, 1[ abbilden. Im Zweierkomplement 
wäre dann bspw. mit q als Quantisierungsschrittweite
1000 .. 0000 -> -1
und
0111 .. 1111 -> 1-q (die 1 kannst du nicht erreichen)

Die Frage ist schließlich, wie du deine Zahlen interpretierst. Nimmst du 
die normalisierte Variante, die ich gerade beschrieb, und arbeitest mit 
fixed points (was du im FPGA machen wirst), wäre das erste Bit quasi ein 
Vorzeichenbit. Man kann sich den Dezimalpunkt virtuell hinter dem ersten 
Bit vorstellen. Deine Zahl wäre also
1(.)000 .. 0000 -> -1
Die Schrittweite entspräche dann der kleinsten Auflösung deiner Zahl, 
also quasi
0(.)000 .. 0001 -> q
Das wäre wiederum 2^(-23) = q = 2/(2^24).

Allgemein nimmst du also deine Wertebereich und teilst den durch die 
Anzahl an Werten. Wählst du bspw. einen Eingangs-Wertebereich von [-4, 
4[, den du abbilden willst, wäre q = 8/(2^24) = 2^(-21) und dein 
gedachter Dezimalpunkt der Eingangswerte hinter dem 3. Bit.

Bleiben wir beim Wertebereich von [-1, 1[ und wollen den Ausgang auf 9 
bit quantisieren (davon ausgehend, dass das Filter nicht darüber hinaus 
skaliert), wäre deine Schrittweite beim 9-bit Quantisierer schließlich q 
= 2/2^9 = 2^(-8). Das Addieren der 0.5 ist hier auch umsetzbar. Lies 
dich dafür einfach in fixed points ein.

Mein Beispiel oben mit q = 1/8: Nimmt man den Wertebereich von [-1, 1[ 
an und q = 1/8 = 2^(-3), bedeutet das, dass ich dort die Zahlen von [-1, 
1[ mit 4 Bit quantisiert habe.

J. S. schrieb:
> Es geht um die Werte nach unten in den Zeilen - siehe Bild.
> Da sind die Sprünge derart groß, dass die Rechnung von sich aus infolge
> unzureichender Zeitauflösung schwingt, weil die Wertzuwächse zu groß
> sind und nicht sinnvoll vom nächsten Formelzugriff genutzt werden. Das
> Resultat ist, dass die Rechnung schon von Anfang an zu schwingen
> beginnt, wenn man sich die ersten 5 Werte ansieht.

Ja, das liegt aber daran, dass das Filter nicht stabil sein wird, 
respektive die Filterkoeffizienten nicht in Ordnung sind.

J. S. schrieb:
> Wenn man das aus der Sicht der Signalverarbeitung sieht, dann wird die
> eigentliche Formel durch das Excel "abgetastet" und die in der Formel
> implizit verborgenen Oberwellen = Frequenzen werden mit der
> Abtastfrequenz des Excels "gefaltet".

Naja, aber da kann er im Excel sheet nicht mehr viel machen, außer das 
Eingangssignal sauber abgetastet zu wählen. Das hat er, weil er einen 
Sprung nutzt. Würde er bspw. einen unterabgetasteten Sinus als 
Eingangswerte wählen, würde aber auch da das Filter nicht anfangen zu 
schwingen. Das Filter hier ohne Quantisierer schwingt bei der 
Sprungantwort nur, weil es instabil ist - und das liegt an den 
Koeffizienten alleine (sofern die Berechnungsschritte richtig 
implementiert sind). Und zur Terminologie: Durch die Abtastfrequenz 
bekommt man eine Faltung im Frequenzbereich mit einem Dirac-Kamm. Man 
faltet also mit dem Dirac-Kamm, wobei die Dirac-Stöße bei multiplen der 
Abtastfrequenz liegen. :)

J. S. schrieb:
> Die "Abtastfrequenz des Excels" = Zahl der Zeilen muss in Anrechnung der
> Genauigkeit der Abbildung genügend groß gegenüber der höchsten
> auftretenden Oberwelle in der Formel = Steilheit sein. Wenn man sich
> einen Bogen denkt und den als Sinus sieht, dann wird dessen Verlauf
> mindestens mal 5-6 Punkte erfordern, bei einer Vollwelle eben 20-25.
> Ordnung = 4 -> 80 ... 100 Punkte.

Wenn die nicht hoch genug ist, bekommst du halt zunächst Aliasing, was 
natürlich nicht korrekt ist. Aliasing führt aber nicht zu einem 
instabilen Filter.

J. S. schrieb:
> Der andere Punkt ist die Auflösung der Koeffizienten, die angesprochen
> wurde: Die können durchaus etwas gering sein. Bei Integratoren ist es
> weniger ein Problem, aber auch dadurch wird Rauschen eingespeist, weil
> nicht der exakte Wert wirkt, sondern das, was nach der Multiplikation
> mit dem gerundeten Koeffizienten herauskommt. Im Übrigen regt genau
> dieses Rauschen auch solche Filter an.

Entweder ist genau das der Punkt, dass die Koeffizienten so gerundet 
werden, dass das Filter selbst instabil wird - dafür kann man das Filter 
durchrechnen und analysieren. Oder die bestimmten Koeffizienten sind 
ohnehin nicht ideal und spucken ein instabiles Filter aus.. Die Rundung 
im Filter ist natürlich auch wichtig. Hier in Excel wird aber mit 
doubles gerechnet. Das ist absolut ausreichend, sofern das Filter mit 
den gewählten Koeffizienten stabil ist (und die Pole nicht ganz nah am 
Einheitskreis liegen).

: Bearbeitet durch User
von Jens W. (jensw)


Angehängte Dateien:

Lesenswert?

Hallo L,

vielen Dank für die ausführliche Erklärung. Das werde ich entsprechend 
umsetzen.

Es gibt auch Neuigkeiten:
Der Professor der Uni Ulm hat sich gemeldet. Total nett!
Das es in meiner Excel schwingt, liegt an den Parametern. Und das Tool 
selbst ist nicht schuld. Es liegt an den Eingaben, die man macht. Der 
Wert für OSR war bei mir falsch.
Er hat mir gleich einen Parametersatz erstellt und geschickt und damit 
funktioniert es in der Excel. Ich hatte nicht so deutlich geschrieben, 
wie die Werte vorne rein kommen, er hat mal 44kHz angenommen. Damit war 
es noch nicht perfekt, aber geschwungen hat nichts. Ich habe dann das 
selbst nochmal versucht mit 96kHz. Ich habe die Parameter suchen lassen 
und in der Excel sieht es absolut perfekt aus! Ich bin voll überrascht!

Das Tool funktioniert wunderbar!!!

Man muss bei den Integratoren aufpassen, wie die später implementiert 
sind. Die gibt es mit delay und ohne, wenn ich es richtig verstanden 
habe. Ganz durchgestiegen bin ich allerdings noch nicht.

Ende des Monats ist dann sein wissenschaftlicher Mitarbeiter wieder aus 
dem Urlaub zurück, da wollen sie noch ein paar mehr Infos geben, wie man 
da mit dem Tool umgeht.
Ich bleib dran und poste hier die Ergebnisse.

Wenn jemand von euch das noch nachvollziehen will, ich hänge den 
aktuellen Stand der Excel an und mache jetzt erstmal in VHDL wieder 
weiter.

Viele Grüße, Jens

von J. S. (engineer) Benutzerseite


Lesenswert?

L. schrieb:
> Wenn die nicht hoch genug ist, bekommst du halt zunächst Aliasing, was
> natürlich nicht korrekt ist. Aliasing führt aber nicht zu einem
> instabilen Filter.

Aber sicher kann es dass, wenn nämlich die Summe der Amplituden der 
Aliasfrequenzen gegenüber dem Nutzsignal ausreichend groß werden, weil 
dann die unterschiedlichen Zweige des System je nach Empfindlichkeit 
gegenüber dieser Frequenz nicht zu einander passende Differenziale 
sehen. Jedes Regelsystem ist darauf empfindlich und die Rückkopplung 
stellt ein solches dar.

Man kann das auch sehr schön sehen, wenn man auf schlecht gefilterte 
Signale regeln will. Ein nettes Beispiel habe ich im Zusammenhang mit 
CIC-Filtern erleben dürfen, wobei das für den Kunden, dem ich erklären 
musste,
was er da sich hat bauen lassen, nicht ganz so lustig war.

von J. S. (engineer) Benutzerseite


Lesenswert?

Jens W. schrieb:
> und mache jetzt erstmal in VHDL wieder weiter.
Du möchtest das aber nicht in REAL rechnen lassen, oder?
An der Stelle kommt nämlich der nächste Fallstrick:
*** Rundung in innerhalb von Formeln bei Zwischenergebnissen ***

von Jens W. (jensw)


Lesenswert?

J. S. schrieb:
> Jens W. schrieb:
>> und mache jetzt erstmal in VHDL wieder weiter.
> Du möchtest das aber nicht in REAL rechnen lassen, oder?

Aber sicher!
Dafür mache ich das Ganze ja. Ich will eine Class-d Endstufe betreiben.
Dafür muss ich doch die Audiodaten von 24bit auf erträgliche 9bit für 
die PWM Erzeugung bekommen.

Ja, runden ist ein Thema. Aber dafür arbeiten die ADCs ja mit 24bit.
Für die Audioauflösung brauchst du das nicht. Da reichen 16bit, wie auf 
der CD. Die restlichen bits sind dazu da, dass die die Rundungsfehler 
aufnehmen. Damit schieben sich die Fehler in den nicht hörbaren Bereich. 
Da mache ich mir keine Sorgen.
Außerdem kann ich im FPGA die Auflösung ja frei wählen. Ressourcen sind 
genug da. Wenn ich intern mit bis zu 42bit (24bit Daten * 16bit 
Koeffizienten + Guard-bits) breit rechne, bleibt als Rundungsfehler 
praktisch nichts mehr übrig.
Das ist auch schon implementiert. Und da ich das nicht alles nicht 
parallel in einem Takt berechnen lasse, sondern in einer getakteten 
MAC-Unit ist das verblüffend Ressourcen-schonend. Von der 
Geschwindigkeit ist auch noch massig Luft nach oben. Da könnte man auch 
locker noch die doppelte Taktrate fahren, aber das ist nicht notwendig.

Grüße, Jens

Beitrag #7621678 wurde vom Autor gelöscht.
von Lars (rezyy)


Angehängte Dateien:

Lesenswert?

Moin,

ich habe gestern Abend mal an deiner Excel (LibreOffice) rumgefummelt. 
Top, dass die Parameter nun korrekt sind und ein stabiles Filter 
liefern. Ich habe die Quantisierung eingebaut und die gewünschte range 
mit clipping eingebaut. Indem du "out resolution" umstellst, siehst du 
die unterschiedlichen Quantisierungen sowie das geshapete 
Ausgangssignal. Außerdem habe ich unterschiedliche Eingangssignale 
erzeugt (einen sine - sauber abgetastet, eine Sprungfunktion, einen sine 
mit einstellbarer Frequenz bei angenommener Abtastrate 96 kHz). Der 
input ist umstellbar über 1, 2, 3. Hiermit kann man etwas rumspielen und 
sehen, was das Filter tut.

Jens W. schrieb:
> Der Professor der Uni Ulm hat sich gemeldet. Total nett!
> Das es in meiner Excel schwingt, liegt an den Parametern. Und das Tool
> selbst ist nicht schuld. Es liegt an den Eingaben, die man macht. Der
> Wert für OSR war bei mir falsch.

Der Parametersatz, den ich hier habe, der nutzt auch lediglich die 
FB-Struktur und nicht mehr die FF-Koeffizienten. Vielleicht gab es auch 
damit Probleme?

Jens W. schrieb:
> Man muss bei den Integratoren aufpassen, wie die später implementiert
> sind. Die gibt es mit delay und ohne, wenn ich es richtig verstanden
> habe. Ganz durchgestiegen bin ich allerdings noch nicht.

Das schrieb ich ja schon mehrfach oben. Es geht quasi darum, ob die 
Integratoren die Übertragungsfunktion
oder
haben. Das erzeugt unterschiedliche Verhalten.

J. S. schrieb:
> Man kann das auch sehr schön sehen, wenn man auf schlecht gefilterte
> Signale regeln will. Ein nettes Beispiel habe ich im Zusammenhang mit
> CIC-Filtern erleben dürfen, wobei das für den Kunden, dem ich erklären
> musste,

Du sprichst von Reglern, da passiert noch deutlich mehr mit zusätzlichem 
feedback und etwaigen Totzeiten und möglichem block processing. Da sieht 
das schon ganz anders aus. Da muss man schließlich das Gesamtsystem 
betrachten.

Hier dürfte nichts instabil werden, solange der Quantisierer nicht auf 
wenige bit quantisiert und solange der input nicht ganz bestimmten 
pattern folgt. Mit speziellen input pattern mag man das System in 
Instabilität treiben können. Dass die nun vom Aliasing kommen könnten - 
OK - scheint aber auch unwahrscheinlich.

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Jens W. schrieb:
>> Du möchtest das aber nicht in REAL rechnen lassen, oder?
> Aber sicher!
Ich meinte den Datentyp REAL.

L. schrieb:
> Du sprichst von Reglern, da passiert noch deutlich mehr mit zusätzlichem
> feedback und etwaigen Totzeiten und möglichem block processing.
Jede Formel, die eine Rückkopplung hat, kann als Regelung aufgefasst 
werden. Weiters ist das Aufbereiten der Information und der Vergleich 
mit einem Sollwert zum Zwecke der Ermittlung der Quantisierung auch 
immer eine Art von Filterung.

L. schrieb:
> ich habe gestern Abend mal an deiner Excel (LibreOffice) rumgefummelt.
Habe mir das Excel mal gezogen und mit meinem diskreten 
Interpolationsfilter verglichen, das in Abhängigkeit des Spektrums die 
quantisierten Werte ermittelt und dosiertes Rauschen addiert:

Beitrag "Re: Wie sauber samplerate vervierfachen"

Ich würde sagen, mein Rauschen ist mehr im Bereich des gut filterbaren 
Spektrums. Vor allem das Gezacke im Nulldurchgangsbereich sieht etwas 
unnötig aus. Das ist natürlich ein Problem einer Generalformel ohne 
Kenntnis des Spektrums, das sie verarbeiten soll. Meiner ist mehr an 
Audio angelehnt, allerdings ein technisch sehr simpler Filter.

Davon unabhängig werden die Werte IMO nicht getroffen, d.h. die 
Aussteuerung passt noch nicht. Da scheint die Skalierung noch nicht so 
ganz zu stimmen, oder es ist eine Frage der Rundung.

von Lars (rezyy)


Lesenswert?

Ich habe natürlich nur die Koeffizienten genutzt, die schon vorgegeben 
waren. Ich habe das Filter nicht weiter analysiert, sollte man 
vielleicht mal tun. Sonst weiß man nicht, was es wirklich macht.

J. S. schrieb:
> Ich würde sagen, mein Rauschen ist mehr im Bereich des gut filterbaren
> Spektrums. Vor allem das Gezacke im Nulldurchgangsbereich sieht etwas
> unnötig aus. Das ist natürlich ein Problem einer Generalformel ohne
> Kenntnis des Spektrums, das sie verarbeiten soll. Meiner ist mehr an
> Audio angelehnt, allerdings ein technisch sehr simpler Filter.

Dein Signal sieht gut aus, ja. Im Zeitbereich kann ich da aber nicht 
wirklich viel zu sagen. Am Ende wären die Spektren interessant - dann 
kann man seine Schlüsse ziehen. Das gilt für dein sowie das hier über 
das Tool der Uni Ulm erstellte Filter. Über das "gezacke" vermag ich 
wenig zu sagen, solange ich nicht die Spektren sehe. Der Zeitbereich 
kann immer etwas trügen :)

J. S. schrieb:
> Davon unabhängig werden die Werte IMO nicht getroffen, d.h. die
> Aussteuerung passt noch nicht. Da scheint die Skalierung noch nicht so
> ganz zu stimmen, oder es ist eine Frage der Rundung.

Ich gehe davon aus, dass dieses generierte Filter eine STF hat, die 
nicht konstant 1 ist. Da wird ein kleiner Fehler im gain sein und 
zusätzlich ist diese STF auch noch frequenzabhängig. Das sieht man 
sofort, wenn man mal andere Frequenzen durchtestet. Bei höheren 
Frequenzen steigt das gain hier an. Das könnte auch daran liegen, dass 
nicht die korrekten Integrierer implementiert sind. Die Phasen der 
Integrierer haben schließlich auch eine Wirkung auf die STF.

Für weitere Analysen sollte man mal die STF und NTF dieses Filters 
bestimmen. Dann weiß man schließlich, was passiert und warum es passiert 
;)

von Lars (rezyy)


Lesenswert?

Was ich gerade mit "Erschrecken" feststellen musste: Die Parameter, die 
hier mal generiert wurden und in der Excel liegen, sind nicht schick. 
Alle d13, d14, ... (alle FF-Parameter) sind 0. Außerdem ist c3=0. 
Entsprechend vereinfacht sich in diesem Falle der Delta-Sigma-Wandler. 
Man benötigt die Zwischenschritte LT1, LT2, LT3 gar nicht und das Filter 
vereinfacht sich zu einem Shaper 1. Ordnung. Die STF ist recht einfach 
und hat bei niedrigen Frequenzen etwa 0.8 dB Dämpfung. Gegen hohe 
Frequenzen bekommt sie dann langsam eine Verstärkung, wie vorhergesagt 
(bei einem Integrierer mit Nullstelle im Ursprung).

Das ist etwas ernüchternd. Andere Parametersätze führen hoffentlich 
nicht zu einer solch starken "Optimierung" (=Wegoptimierung) ;)

von A. F. (chefdesigner)


Lesenswert?

L. schrieb:
> Je nach Wandler kann die STF einfach
> 1 sein oder das Signal formen. Die NTF ist so ausgelegt, dass das
> eingeführte Quantisierungsrauschen spektral geformt wird
Zurückommend auf meine Frage weiter oben, wo das Rauschen entsteht, 
stelle ich also fest, dass dies indirekt in der Schaltung verborgen ist.

Es wird also kein Rauschen eingemischt, sondern es entsteht durch die 
Art und Weise, wie die Schaltung versucht, sich mit wenigen Bits dem 
Sollwert zu nähern.

Jens W. schrieb:
> Da ist doch gar kein Komparator drin.
An irgendeiner Stelle muss ein direkter oder indirekter Vergleich 
zwischen Soll und Ist ausgeführt werden. Das erzeugte, rauschbehaftete 
Signal soll doch dem Eingang folgen.

L. schrieb:
> Ne, da soll nichts schwingen.
Mit dem Schwingen war das Annähern des Wertes an das Ziel gemeint. Sieht 
auch in den Grafiken wie erwartet aus. Das ist ziemlich das Gezeter was 
wir bei unseren HV-Multi-Stage-Ausgängen sehen.

L. schrieb:
> das Filter
> vereinfacht sich zu einem Shaper 1. Ordnung. Die STF ist recht einfach
> und hat bei niedrigen Frequenzen etwa 0.8 dB Dämpfung
Dieser Sachverhalt bewog mich zur eingangs gestellten Frage:

A. F. schrieb:
> Welcher Ordnung ist dieser Modulator? 5?
Du meintest ja 4. (?)

Wie stelle ich denn sicher, dass das Planungs-Excel richtig gefüttert 
wird, um einen Modulator hoher Ordnung herauszubringen? Würde das 
eventuell austesten.

von Lars (rezyy)


Lesenswert?

A. F. schrieb:
> Zurückommend auf meine Frage weiter oben, wo das Rauschen entsteht,
> stelle ich also fest, dass dies indirekt in der Schaltung verborgen ist.
>
> Es wird also kein Rauschen eingemischt, sondern es entsteht durch die
> Art und Weise, wie die Schaltung versucht, sich mit wenigen Bits dem
> Sollwert zu nähern.

Deine Annahme weiter oben klingt nach einem Dither. Der ist hier 
natürlich nicht vorhanden. Die Quantisierung von höherer auf tiefere 
Bitbreite fügt das Quantisierungsrauschen ein. Dieses Rauschen wird 
durch die Rückkopplung im Filter dann spektral geformt. Also ja, es wird 
kein zusätzliches Rauschen "eingemischt". Es entsteht nur durch die 
weitere Quantisierung selbst.

A. F. schrieb:
> Mit dem Schwingen war das Annähern des Wertes an das Ziel gemeint. Sieht
> auch in den Grafiken wie erwartet aus. Das ist ziemlich das Gezeter was
> wir bei unseren HV-Multi-Stage-Ausgängen sehen.

Genau, dieses Gezappel ist das spektral geformte Quantisierungsrauschen. 
Dies ist hauptsächlich hochfrequent und damit schließlich einfach 
filterbar. Das ist die Idee des Delta-Sigma-Wandlers: Das 
Quantisierungsrauschen so formen, dass es schließlich gefiltert werden 
kann (also außerhalb des Nutzbandes liegt).

A. F. schrieb:
> Wie stelle ich denn sicher, dass das Planungs-Excel richtig gefüttert
> wird, um einen Modulator hoher Ordnung herauszubringen? Würde das
> eventuell austesten.

In diesem Shaper ist jeder Integrator ein Integrator 1. Ordnung. Wenn 
man die 4 (mit allem FF und FB) hintereinanderschaltet, entsteht am Ende 
ein Shaper 4. Ordnung. Wenn man Integratoren durch bestimmte 
Koeffizientenwahl umgeht, wird die Ordnung entsprechend kleiner.

von Jens W. (jensw)


Lesenswert?

Hallo L,

vielen Dank für die Erklärung zu der Quantisierung.
Das sieht echt gut aus!

Die Parametersätze habe ich mir auch nochmal angeschaut. Stimmt, da habe 
ich dann unter dem Strich nur noch einen Modulator 1. Ordnung.
Eigentlich nicht das was ich wollt, aber tatsächlich ist es so, dass die 
höheren Ordnungen schnell instabil werden. Für 1. und 2. Ordnung habe 
ich Parameter gefunden
Da muss man schon wissen wie die Struktur aussehen muss, damit da 
sinnige Werte raus kommen.
Aber unter dem Strich sieht das Ausgangssignal mit 1, Ordnung nicht so 
schlecht aus.
Mit dem Parametersatz starte ich.
Implementieren werde ich alles, so kann man das Filter einstellen, 
alleine mit dem Austausch der Parameter.
Das ist flexibel genug.

Grüße, Jens

von J. S. (engineer) Benutzerseite


Lesenswert?

L. schrieb:
> Dither. Der ist hier
> natürlich nicht vorhanden. Die Quantisierung von höherer auf tiefere
> Bitbreite fügt das Quantisierungsrauschen ein.

Naja, gedithered wird ja schon, nur eben weitgehend ungesteuert. Das 
Dithern ist ein zumeist statisch funktionierender Prozess, der ohne 
(große) Rücksicht auf das Signal (meistens) das letzte Bit, das durch 
eine geplante Quantisierung entsteht, so verzittert, dass es sich wie 
eine PDM-Stufe verhält.

Das Noise-Shaping ist hingegen ein Regelprozess, der jeweils 
berücksichtigt, was durch die erfolgte Quantisierung das aktuelle Signal 
an Rauschfehler aufwirft und dann probiert, im Mittel auf Null zu 
regeln. Je besser das gelingt, desto mehr ist der Fehler spektral nach 
oben verschoben und fällt bei stark überabgetasteten Signalen dann mehr 
oder weniger dem Rekonstruktionsfilter zum Opfer.

Mein o.g. Filter liegt da technisch irgendwo dazwischen. Es werden grobe 
Annahmen und Messungen des Signals gemacht und das rosa Rauschen, das 
injiziert wird (= Dither) autoadaptiv angepasst. Man würde es wohl 
"KI"-Shaper nennen, wenn es den Begriff damals schon gegeben hätte :-)

von J. S. (engineer) Benutzerseite


Lesenswert?

Ein Punkt noch zum Verständnis, was bei der hiesigen Anwendung noch zu 
berücksichtigen ist:

Die angedachte PWM-Schaltstufe die hinten wohl folgt, produziert auch 
ein Rauschen, weil sie nicht exakt schaltet und auch der Rest nicht 
ideal ist. Im Gegenteil: Das Resultat ist bekanntlich stark 
tiefpass-gefiltert, zum einen durch die Schaltung selbst zum anderen 
durch die angehängte Last der Elektronik und der Lautsprecher sowie auch 
der Luft. Dies muss u.U. noch berücksichtigt werden, will man das Noise 
Shapiung richtig arbeiten lassen.

Denn:

Die Formeln im Excel der Uni-ULM geben das noch nicht direkt her, 
sondern optmieren nur die Quantisierung selber, nehmen also eine ideale 
Rekonstruktion an und optimieren mutmaßlich auf ein Eingangsignal, das 
technisch ein weißes Spektrum darstellt. Das Rauschen dürfte also so 
gesteuert werden, dass ein solches Signal im Mittel wenig gestört ist.

Das passt real z.B. für eine PDM-Stufe, wie wir sie am Ausgang eines 
FPGA auf einen idealen, hochohmigen Kleinsignal-Filter mit OP geben, um 
ein analoges Audio-Signal zu erhalten, das dann wenige Störungen hat. 
Davon ausgehend kann dann ein analoger Verstärker anschließend ein für 
den Lautsprecher passendes Signal erzeugen. Soweit wäre das korrekt.

Aber:

Aktive Analog-Boxen machen bereits das nicht mehr linear, sondern passen 
sich an die Impedanzen der LS an, d.h. das Verstärkungsverhalten ist an 
die Weiche oder den LS direkt angepasst. Gleichwohl kann man sie mit 
einem linearen Signal füttern, das technisch ein weißes Spektrum 
darstellt. Ein entsprechend geshaptes Signal wird also passen. Da das 
Audiosignal funktionell aber in Richtung rosa geht, bestünde hier schon 
etwas Optimierungsmöglichkeit, d.h. man kann das shapen so modifizieren, 
dass die  hohen Frequenzen anders gewichtet werden.

Soll nun stattdessen gar ein digitaler Verstärker ein für Lautsprecher 
direkt verwertbares digitales PWM-Signal erzeugen, sieht die Sache 
nochmal anders aus. Dann muss das Verhalten der Last mit den Regelzweig- 
und somit in die Formeln aufgenommen werden - selbstredend dann mit der 
jeweils passenden Schaltfrequenz der Ausgangsstufe. Die liegt dann 
funktionell bei z.B. nur 150kHz ... 250hHz, hat aber eine beliebige 
(analoge) Pahse, oder kommt mir Phasenauflösungen von bis zu 5ns / 200 
MHz - bei meinem PDM-Wandler ist das z.B. so.

Spätestens dann muss funktionell und technisch in Richtung rosa gedacht 
werden und gleichzeitig das krumme Spektralverhalten der LS in 
Anrechnung gebracht werden. Dies ist um so mehr nötig, weil die 
Schaltfrequenz mitunter geringer ist und weniger headroom für das 
Rauschen besteht. Dann sehen die Formeln für das noise shapig nochmals 
ganz anders aus.

Die oben skizzierte LAILA reicht dabei als Beispiel locker für meine 
Bassausgänge aus, auch wenn ich nur die 768kHz als PDM nutze, aber über 
einen 36dB/oct-Filter bei 1kHz gehe. Die Bassausgänge werden nur bis 200 
Hz betrieben und haben eine GF bei z.B. 180Hz etc. Das passt dann, wenn 
ein linearer SUB dran hängt. Audio-PDM geht auch, braucht aber schon die 
volle Bandbreite bis 200MHz unter Nutzung der schlaueren FRIDA:
Beitrag "Re: Wie sauber samplerate vervierfachen"
Ab da ist alles fein und linear.

Für ein Nichtlineares Signal, das direkt auf eine PWM-Stufe arbeiten 
soll, braucht es ein genaues Modell des LS, der Elektronik und auch der 
Luft, weil dann die PWM-Stufe optmiert werden muss und das noise shaping 
auf den nutzbaren Bereich begrenzt werden kann (und ebenfalls "muss").

Tut man das nicht, bekommt man ein mathematisch cleanes quantisiertes 
Signal, das aber hinterher so versalzen wird, dass jeder Vorteil des NS 
konterkariert wird. Umgekehrt haben wir heute 24 Bit-DACs, die auch bei 
bestem analogen Aufbau immer noch einen Noise floor unterhalb der 
letzten 4-5 bits hat. Diese zu shapen hat dann auch keinen hörbaren 
Vorteil mehr.

von Jens W. (jensw)


Lesenswert?

J. S. schrieb:
> Die angedachte PWM-Schaltstufe die hinten wohl folgt, produziert auch
> ein Rauschen, weil sie nicht exakt schaltet und auch der Rest nicht
> ideal ist.

Das stimmt. So will ich es machen.
Ich hab das auch schon in einer Abschlußarbeit gelesen, in der sie mit 
dem FPGA die Verzerrungen aus der Schaltstufe heraus rechnen.
Aber die betreiben sehr großen Aufwand. Die rechnen intern mit riesigem 
Speicher für irgendwelche Lookup Tabellen und 72bit oder so.
Den Aufwand werde ich nicht betreiben.

Ich will so einen Baustein von TI betreiben und sehe was da raus kommt.
Dabei belasse ich es dann auch. Ich habe nicht vor das in Richtung HiFi 
oder High-End zu optimieren (vor allem weil man mit class d als High-End 
eh davon gejagt wird).

Grüße, Jens

von J. S. (engineer) Benutzerseite


Lesenswert?

Jens W. schrieb:
> Ich hab das auch schon in einer Abschlußarbeit gelesen, in der sie mit
> dem FPGA die Verzerrungen aus der Schaltstufe heraus rechnen.
Ja, da habe ich auch schon einige gelesen. War ein Weile irgendwie der 
Hit, alles mit FPGAs zu linearisieren. Manche denken auch, dass das eine 
neue Idee sei :-) Es gibt diesbezüglich aber schon seit gefühlt 25 
Jahren mehr oder minder gut funktionierende Lösungen, vor allem auch mit 
DSPs.

Jens W. schrieb:
> vor allem weil man mit class d als High-End eh davon gejagt wird.
Nicht unbedingt. Wenn du dir die Schaltstufen der einschlägigen 
Hersteller wie Hypex oder ICE-Power ansiehst, bringen die schon enorme 
Qualität. Das ist mit billigen PWM-DACs a la TDA nicht zu vergleichen. 
Allerdings steckt da auch ordentlich know how dahinter, zuweilen 
spezielle Modulationsverfahren, teilweise sogar patentiert, manche davon 
auch noch aktiv.

Für das, was eine solche Stufen leisten kann, sind die nicht nur recht 
performant, sondern auch noch vergleichsweise billig!

Da muss man gute Gründe haben, einen FPGA zu nehmen und obendrein 
einiges tun, um das zu toppen. Ein wesentlicher Grund für einen meiner 
Kunden war die Austauschbarkeit des Schaltungsdesigns und der 
Interfaces, damit man sich an neue Audio-Standards anpassen kann. Mit 
einem FPGA kannst du auch unsynchronisiertes DSD512 und 384kHz/32 Bit 
Formate nehmen, die die Zentralbox verteilt. Vor allem kann man sehr 
viel Filterung und Prozessierung betreiben. Z.B. kann man Takte 
rekonstruieren, Signale entjittern, Rückwäerts-Synchronisationsschleifen 
aufbauen (auf demselben Kabel, auf dem die Daten kommen!) um die Phasen 
anzugleichen und das Einmessen der Lautsprecher unterstützen. Das geht 
dann irgendwann auch über die Möglichkeiten eines DSPs deutlich hinaus, 
freilich zu entsprechenden Kosten!

Rechnen tut es sich daher nur für Studiolautsprecher der Klasse 
"5-stellig", die sehr genau sind und trotzdem hohe Leistungen bieten. 
Die beiden unteren Wege in einem solchen Lautsprecher kann man ohne 
Weiteres in digital machen. Die Tweeter-Stufe bleibt meistens A/B - 
profitiert aber immerhin noch von der Rechenleistung des FPGAs und der 
linearen Korrektur des Frequenzgangs.

Außerdem lassen sich durch FPGAs leicht einige Schaltungsteile 
hinzufügen, die die Lösung so über den Stand der Technik hinaus 
schieben, dass sie nicht mehr von Patenten betroffen sind :-)

von Jens W. (jensw)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

so es gibt Neuigkeiten.
Meine Implementierung des Modulators funktioniert.
Die Ergebnisse passen auch mit der Excel-Tapete von mir zusammen. 
Allerdings passt das nicht alles mit dem Auslegungstool der Uni 
zusammen.
Der Modulator dort wird im Praktikum, so wie ich es verstanden habe, mit 
OPAmps gebaut und getestet. Das bedeutet, dass das Delay vom Ausgang auf 
den Eingang anders ist als in der Excel von mir (das führt zu einem 
Zirkelbezug) und auch die Parameter sind dann natürlich auch nicht genau 
passend.
Man müsste den Filter auslegen, dann sauber transformieren und die 
Parameter entsprechend umrechnen. Dann wird das sicher funktionieren.

Meinen Modulator habe ich bisher nur in erster Ordnung getestet. Was ich 
so am Oszi sehe, funktioniert das prima, "Gehört" habe ich das aber noch 
nicht. Der Test steht noch aus, da brauche ich erst noch eine kleine 
D-Endstufe.
Zweite Ordnung bekommt man mit den Parametern auch noch getrimmt.
Kommt also noch.
Implementiert ist alles bis auf den Vollausbau. Man muss nur die 
Parameter im Speicher ändern, sonst nichts.
Der Modulator wird mit 98MHz Takt versorgt, dann passt es auch mit 
384kS/s gut zusammen. Da dauert ein Durchlauf knapp 1µs.

Ich hänge euch die Files an, wenn es jemanden von euch interessiert.

Viele Grüße und vielen Dank an alle!

Grüße, Jens

von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Du hast die einzelnen Rechenstufen sequenziell gebildet?

So hast du quasi die Funktion eines sequenziell arbeitenden DSPs 
abgebildet und den Vorteil des FPGAs aus der Hand gegegeben. Ein DSP 
würde das z.B. mit der viel höheren Rate packen.

Das ist nämlich dann die Folge:
>Der Modulator wird mit 98MHz Takt versorgt, dann passt es auch mit
>384kS/s gut zusammen. Da dauert ein Durchlauf knapp 1µs.

Das Signal wird mit einem Zeitraster von 384k upgedatet.

Eigentlich würde man den Modulator als pipeline laufen lassen, um 
mehrere Kanäle und vor allem eine höhere Abtastfrequenz zu bekommen.

Eine solche PDM Stufe läuft eigentlich mit dem Systemtakt als 
PDM-Raster, heißt: Die Auflösung einer PWM/PDM-Periode wäre im im 
Bereich 5ns.

PDM-Modulatoren wie wir sie in Audio-Schaltungen benutzen, haben z.T. 
gar kein Raster sondern laufen "analog". Das sind dann nominell nur 
200kHz aber die haben eine optimierte Pediodenlänge.

Im Beispiel hier ist das hier ein Modulator bei 20kHz Sinus-Eingang.

von Gustl B. (-gb-)


Lesenswert?

J. S. schrieb:
> Eigentlich würde man den Modulator als pipeline laufen lassen

Ist eine Pipeline nicht auch sequenziell? Da werden die Operationen *an 
den* Daten nacheinander ausgeführt - aus Sicht der Daten. Klar, 
gleichzeitig an unterschiedlichen Daten, aber aus Sicht der Daten die da 
durchwandern sieht das genauso sequenziell aus wie wenn es keine 
Pipeline wäre.

Und ist das richtig so, dass in der Simulation das PDM für längere Zeit 
statisch high/low bleibt?

: Bearbeitet durch User
von J. S. (engineer) Benutzerseite


Lesenswert?

Die Struktur solcher pipelines ist sequenziell. Das ist sie 
überwiegend, wenn man von Verdopplungen wegen konkurrenter Rechnungen, 
alternativer Ansätze etc absieht.

Der Ablauf der pipelines aus Datensicht ist idealerweise voll 
parallel, d.h. zu jedem Zeitpunkt bearbeitet jedes Element einen 
Datenprozesschritt.

In der gesteuerten pipeline aus dem Beispiel-Code arbeitet zu jedem 
Zeitpunkt nur maximal ein Element. Es wird also nur ein 
Datenprozesschritt ausgeführt. Wenn da noch waits eingebaut sind, ist es 
noch schlechter, weil es aus Datensicht auch noch funktionelle Aussetzer 
gibt. Im Extrenfall einer FSM arbeitet nur zu einem Zeitpunkt nur ein 
einziges Element einen Datenprozesschritt ab. Der REst der gesamten 
Zweige liegt brach.

Dann sind alle möglichen Rechnungen und Entscheidungen zwar physisch 
parallel aufgebaut und schalten auch irgendwie, es ist aber nur eines 
relevant, d.h. der Rest liegt aus Funktionssicht faul in der Ecke herum.

Der Vorteil der Version im Beispiel ist freilich der, dass die 
universelle MAC-unit nur einmal gebaut wird und nicht 4x oder 5x. Wenn 
man nur einen Kanal braucht und die Bandbreite reicht, ist das ok. Bei 
FSMs ist das in aller Regel so. Die tuckern ihre z.B. 20 states ab und 
liefern damit 10 MHz loop. Macht z.B. 10 UARTs mit 1MHz im Multiplex.

Bei dem hiesigen Fall geht aber die Einsparung direkt auf die maximale 
PDM-Frequenz. Auch wird man eher mehrere Kanäle brauchen. Von daher sehr 
ich da eher 4 parallele verkettete MACs, zumal die nicht so arg komplex 
sind und deren Verwaltung wegfiele. Solche Strukturen machen ja den 
Vorteil von FPGAs aus.

Für eine so "langsam" arbeitende Struktur ginge auch ein DSP.

von J. S. (engineer) Benutzerseite


Lesenswert?

Gustl B. schrieb:
> nd ist das richtig so, dass in der Simulation das PDM für längere Zeit
> statisch high/low bleibt?

"lange Zeit" ist relativ. Das ist der Durchtrittpunkt durch 0 mit 
Steigung  1 und folgt aus der maximalen Steilheit. Das ist natürlich der 
Grenzfall, den man praktisch nicht benutzen sollte. Wobei das nur der 
theoretische Intergrator ist. Die Realität schaut nochmal anders aus. 
Unten sieht man in der Testbench die Auswertung mit einem R-C-Tiefpass. 
Diese PDM wird auch nur bis 200 Hz, also 1/100 dieser Frequenz benutzt. 
Allerdings ist das auch die einfache, die mit dem S/PDIF Takt von 12M 
läuft. Wenn ich Audio so ausgebe, läuft das bis 200M mit dann auch nur 
der halben Aussteuerung.

Ein Nachtrag zu oben:

Manchmal macht es auch Sinn, auch FSMs zu pipelinen, wenn diese sehr 
komplex und die Zahl der Kanäle hoch ist: Meine MIDI-FSM läuft z.B mit 
voller Systemfrequenz und kann mit aktuell rund 1/~170 Takten. Die 
Ablauffunktion ist dann konstant lang für alle Zweige - egal, ob einer 
länger wäre und/oder für einen Kanal etwas passiert oder nicht. Die 
Vereinigungsmenge aller möglichen Pfade ist dann maßgeblich für alle 
Fälle. Diese ist dann auch erheblich größer, als der ungünstigste Fall / 
Ablauf der FSM allein.

Ich prozessiere das der Einfachheit halber natürlich mit 1/256 und 
verschenke time slots. Dafür ist es mit der Synth-unit voll synchron. Es 
ist auch mehr als ausreichend, da sample-genau. D.h. egal was 
ausgerechnet werden muss, es ist fertig und bekannt, bevor es benötigt 
wird.

Das ist auf den ersten Blick natürlich deutlich langsamer und hat mehr 
Latenz, als einen einzelnen Kanal abzuarbeiten.

Da es aber eine pipeline ist, kann sie 256 Kanäle verwalten, d.h. es 
wird ein Zustand nach dem anderen mit neuen Kanaldaten reingeworfen und 
neu durchgerechnet. Nach den spätestens 256 Schritten ist alles 
konsistent, egal, ob etwas funktionell passiert ist oder nicht oder ob 
ein tiefer Zweig der FSM oder ein kurzer / idle beschritten wurd. Manche 
Kanäle haben danach ihren Status geändert und etwas ausgelöst, andere 
eben nicht. Viele haben sogar nichts getan, weil die Abtastung so oft 
passiert und sich auf dem Kanal nicht getan hat. Das ist aber alles 
statisch im Raster. Darauf kommt es an.

Vorteil:

Würde ich es konventionell machen, liefe die FSM mal mit ~20 oder mal 
mit ~40 Takten und inklusive der Folgeschritte mit z.B. 70 Takten. Im 
Schnitt bräuchte eine CPU oder eine sequenziell prozessierende 
FPGA-Einheit rund 30 Schritte. Für die aktuell 128-MIDI Kanäle wären das 
(mit Abfragen ob sich was tut und der Reaktion, falls sich bei 20%-25% 
etwas tut) gut 1000 Takte oder mehr. Von 256 MIDI Kanaälen mit Sequenzer 
ganz zu schweigen.

Theoretisch können alle MIDI-Kanäle etwas tun - die Latenz bleibt immer 
256 und einige Verzögerungs-Takte. Ein Problem bekomme ich erst dann 
wieder, wenn die MIDI FSM so komplex wird, dass die Summe der 
Einzelschritte an die 256 herangeht.

: Bearbeitet durch User
von Max M. (fpga_eth)


Lesenswert?

Verstehe ich das korrekt, dass höhere Ordnungen nur dank der fix point 
quantifizierung unstabil werden? Mit double FP wären 6. oder noch höher 
stabil?
Oder besteht ein Grundlegendes Problem mit SigDelt höherer ordnung als 
4?

von Jens W. (jensw)


Lesenswert?

Hallo Max M,

nein das stimmt so nicht. Es spielt keine Rolle ob man mit Fix point 
oder mit double rechnet.
Alleine die Parameter sorgen dafür, dass das stabil wird oder auch 
nicht.
Aber wichtig:
Damit es überhaupt etwas zu rechnen gibt, muss am Ausgang richtig 
quatisiert werden. Man braucht den Fehler als Rückführung auf den 
Modulator.


J. S. schrieb:
> So hast du quasi die Funktion eines sequenziell arbeitenden DSPs
> abgebildet und den Vorteil des FPGAs aus der Hand gegegeben. Ein DSP
> würde das z.B. mit der viel höheren Rate packen.
ja, das habe ich so gemacht. Und zwar bewußt. Es geht ja nicht darum die 
beste Lösung für eine konkrete Anwendung zu haben.
Es ging mir lediglich um ein proof-of-concept, ob diese Tool der Uni Ulm 
für die Auslegung geeignet ist oder nicht.
Dafür muss ich jetzt nicht unendlich Zeit in eine pipeline-Struktur rein 
stecken um meine Frage zu beantworten.

Es bleibt jedem frei das ganze noch umzubauen. Daher habe ich meine 
Lösung hier geteilt.

Grüße

von Max M. (fpga_eth)


Lesenswert?

Hallo Jens
Danke erstmal

Jens W. schrieb:
> Alleine die Parameter sorgen dafür, dass das stabil wird oder auch
> nicht.

Nun rein von der Rechenleistungsmöglichkeit her wären fixp. selbst mit 
budget FPGAs 100+ste Ordnung möglich. Wenn das doch nur eine Frage der 
Parameter wäre: Wieso wirds nicht gemacht? (also irgendwie müsste doch 
mehr dahinter stecken?!?)

Jens W. schrieb:
> Aber wichtig:
> Damit es überhaupt etwas zu rechnen gibt, muss am Ausgang richtig
> quatisiert werden. Man braucht den Fehler als Rückführung auf den
> Modulator.

klar, dies ist ja digital mit abschneiden des Vektors einfach gemacht. 
Dass die analoge Halbbrücke am Ausgang nicht linear bez. des PWM Wertes 
sein wird, ist dann noch ein anderes Problem. Meine Frage bezieht sich 
rein auf den digitalen Bereich und die theoretische Möglichkeit von 
Noiseshaping extrem hoher Ordnung.

: Bearbeitet durch User
von Jens W. (jensw)


Lesenswert?

Hallo Max,

man kommt sicher recht schnell an die Grenze, dass eine weitere 
Optimierung keinen Sinn mehr macht.
Wenn man in die Datenblätter von TI reinschaut (TAS5504), dann hören die 
auch bei 5.Ordnung auf.
Bei höheren Ordnungen kann man die Verbesserung nicht mehr hören vermute 
ich. Bei TI sind die ja schon im Bereich von -100dB für das Rauschen und 
102dB für den Dynamikbereich. Das reicht vollkommen aus. Was will man 
mehr.
Da nutzen die den Platz im Chip eher dafür, dass man noch diverse Filter 
und Klankorrekturen reinbaut.
So bekommt man eine schöne Lösung fürs Wohnzimmer.

Dann lieber doch so optimieren, wie J.S. schrieb. Mehr Kanäle. Das 
könnte ich mir vorstellen, dass man das für ein Heimkino gut gebrauchen 
könnt.

P.S.:
Ich habe übrigens ein Parameterset für einen Modulator 4.Ordnung 
gefunden.
Das ging tatsächlich mit dem Tool der Uni. Wenn man weiß wie man das 
einstellen muss, dann spuckt das auch tatsächlich Werte aus, die in der 
Excel stabil laufen.
Als nächstes bau ich noch eine kleine Ausgangsstufe und dann teste ich 
mal direkt mit Funktionsgenerator. Da muss ich aber meinen Spektrum 
Analyser abstauben, der ist im Moment eingemottet.

Grüße, Jens

von Max M. (fpga_eth)


Lesenswert?

Jens W. schrieb:
> Bei TI sind die ja schon im Bereich von -100dB für das Rauschen und
> 102dB für den Dynamikbereich. Das reicht vollkommen aus. Was will man
> mehr.

Nun es giebt immer Audio freaks die nichts unter 120dB anfassen. Etliche 
Foren diskutieren über welche ADC Opamp kombination nun 128 oder 126dB 
THD+N erreicht. Dann natürlich einen Klass A AMP oder einer hat sogar 
einen AMP gebaut mit 100en Audio Opamps paralell. Also Luft nach oben 
giebts immer.
Ich masse mir nicht an solche unterschiede zu hören, meine Motivation 
ist rein akademischer Natur, bis wohin es stabil möglich geht und was 
der theoretische max erreichbare SNR wäre (im digitalen Bereich).
Kann mir auch vorstellen, dass 4-5 auch theoretisch das maximum sein 
könnte, da die Phasenverschiebung einfach zu gross wird und dies 
zwangsläuftig instabil wird.

Zum budgetmässig testen kannst du
https://audio.rightmark.org/index_new.shtml
nutzen mit einer guten Soundkarte (entsprechendes SNR im ADC, Stimulus 
direkt digital ins FPGA).

Ich erwarte aber, dass der THD bei deinem AMP das Problem sein wird. Da 
die Halbbrücke nicht ideal schaltet werden geringe pulslängen 
überproportional an energie reduzieren. (Vermutung)

: Bearbeitet durch User
von Jens W. (jensw)


Lesenswert?

Max M. schrieb:
> oder einer hat sogar
> einen AMP gebaut mit 100en Audio Opamps paralell. Also Luft nach oben
> giebts immer.

Das habe ich auch schonmal gelesen. Das mit den Opamps soll das Beste 
sein, was es gibt. Ist halt von der Leistung begrenzt, da die Opamps nur 
+/-15V können.

Mit denen will ich mich gar nicht messen. Wie ich oben geschrieben habe, 
da wirst du mit einem D-Verstärker davon gejagt. :-)

Danke für den Link, das schau ich mir mal an. Obwohl die Soundkarte in 
meinem PC nicht so toll ist. Zur Not bleibt mir ja noch mein Spectrum 
Analyser.
Das ist eigentlich ein Dynamic Signal Analyser (HP3561A). Der geht von 
125mHz bis 100kHz. Passt für Audio ganz gut, aber ich weiß nicht, wie 
weit der nach unten messen kann.
Ich werde es ausprobieren. Am wichtigsten ist das Ohr. Das ist genau 
genug.
Wenn das Mess-Setup mal steht, kann man ja leicht die verschiedenen 
Filter vergleichen. Also 1.Ordnung gegen 4.Ordnung.

Grüße, Jens

von J. S. (engineer) Benutzerseite


Lesenswert?

Jens W. schrieb:
> Das mit den Opamps soll das Beste sein, was es gibt.
Da wäre ich etwas sketisch. Ich habe bereits etliche 
Leistungsverstärkereinheiten parallel betrieben, um auf den Strom zu 
kommen und kenne die Tücken der Technik. Auch mit ps-genauer Trimmung 
gibt es da immer Querströme und Verzerrungen. Solche Stufen baut man 
besser so, dass eine größere Menge von parallelen Pfaden einen großen 
Anteil des Stroms steuert und ein letzter, sehr schneller OP einen 
kleinen Rest wegregelt. Der ist dann vorwiegend für die HF zuständig, 
arbeitet also spektral versetzt. Das Prinzip ist dasselbe wie bei den 
Lautsprechern selbst, wo mehre Wege existieren.

Es hat auch starke Parallelen zu dem hier diskutieren noise shaper, wenn 
man die oberen Bits als für das Grobe zuständig interpretiert und die 
unteren Bits, die sich rasch ändern und eng regeln, gedanklich der HF 
zuordnet.

> Ist halt von der Leistung begrenzt, da die Opamps nur
> +/-15V können.
Also es gibt schon lineare OPs, die mehr können - schau mal bei APEX. 
Man kann solche Schaltungen aber auch in seriellen Kaskaden bauen. Muss 
nur eben noch genauer gesteuert werden und braucht entsprechende 
Spannungsversorung mit Beschaltung.

> Am wichtigsten ist das Ohr. Das ist genau genug.
Leider zeigt dir das Ohr nicht, was deine Digitalstufe im 
Ultraschallbereich an Mist produziert und das tun dem Prinzip nach alle 
digitalen Stufen mehr oder weniger. Das ist nicht zu unterschätzen! Im 
schlechtesten Fall hast du Störungen in nenneswerten Lautstärken, die 
ein hoch spielender Tweeter noch ausreichend überträgt. Die runinieren 
nicht unbedingt gleich das Gehör, belasten es aber und stören damit das 
Resthören. -> Maskierungseffekte. Bei entsprechenden Leistungen geht 
auch schon mal der Tweeter drauf und bei Dauergezerre eben auch das 
Gehör. Es gibt Berichte und Vermutungen, dass einige schlechte 
Ausgangstufen und Kopfhörer im Bereich Billigaudio sehr viel Ultraschall 
abgeben und sich Jugendliche damit schon deutliche C4-Senken 
hingedeezert habe.

von Max M. (fpga_eth)


Lesenswert?

Jens W. schrieb:
> Wenn das Mess-Setup mal steht, kann man ja leicht die verschiedenen
> Filter vergleichen. Also 1.Ordnung gegen 4.Ordnung.

Wenn es die Zeit zulassen würde, möchte ich dich bitten kurz deine 
implementation um 1-2 Ordnungen zu erweitern und mit dem Tool der Ulmern 
zu schauen ob irgend etwas stabiles/gutes dabei an parametern 
herauskommen kann.

J. S. schrieb:
> Da wäre ich etwas sketisch. Ich habe bereits etliche
> Leistungsverstärkereinheiten parallel betrieben, um auf den Strom zu
> kommen und kenne die Tücken der Technik

OT: Nun jeder Opamp hatte meines wissens einen relativ grossen 
ausgangswiederstand zugeschaltet um die Verzerrungen tief zu halten. 
Dies wurde durch massivste paralellisierung Kompensiert (geschätzt total 
1000+ opamps (ca 30 Eurokarten PCB pro Kanal). Versorgung über 5 Stufen 
der teuersten LDO etc. (Muss ja auch Dekadent sien). Betriebsspannung 
war meines wissens +/-18V (leistungsmässig für eine angenehme 
Beschallung eigentlich ausreichend). Kosten vermutlich 5stellig pro 
Kanal.
Paralellschaltung hat auch ein SNR Vorteil: Leistung x2, Rauschleistung 
nur x sqrt(2), daher 3dB Gewinn pro Verdopplung

: Bearbeitet durch User
von Jens W. (jensw)


Lesenswert?

Max M. schrieb:
> Wenn es die Zeit zulassen würde, möchte ich dich bitten kurz deine
> implementation um 1-2 Ordnungen zu erweitern und mit dem Tool der Ulmern
> zu schauen ob irgend etwas stabiles/gutes dabei an parametern
> herauskommen kann.

Da verstehe ich dich nicht ganz. Was meinst du? Die Implementierung von 
mir bildet 4.Ordnung als Maximum ab. Wenn man einen Modulator 1.Ordnung 
haben möchte, dann geht das alleine über die Parameter (da sind dann 
viele Parameter 0).
Oder meinst du ich soll auf 6. Ordnung erweitern?
Das wird schwierig für die Parameter, da das Tool der Ulmer ja nur bis 
4.Ordnung geht.
Das wird von Hand sehr schwer zu trimmen sein.

Grüße, Jens

von Max M. (fpga_eth)


Lesenswert?

Jens W. schrieb:
> Das wird schwierig für die Parameter, da das Tool der Ulmer ja nur bis
> 4.Ordnung geht.

Ach so wusste ich nicht, ja dann gehts nicht.

Jens W. schrieb:
> Da verstehe ich dich nicht ganz. Was meinst du? Die Implementierung von
> mir bildet 4.Ordnung als Maximum ab.

Ja, naja die Struktur selbst ist ja nur etwas copy/paste im VHDL code. 
Die parameter sind das komplizierte. (respektvoll gemeint)

von Jens W. (jensw)


Lesenswert?

Hallo zusammen,

ich bin nun endlich mal dazu gekommen, das Ganze auch zu vermessen.
Ich habe mir mit einem OP ein kleines Filter gebaut, das den üblichen 
Audiobereich durchlässt. Also die -3dB-Grenzen bei 20Hz und 20kHz.
Die Steilheit liegt bei 6dB/Oktave, also erste Ordnung.

Die PWM, die aus dem FPGA kommt habe ich direkt auf den Eingang des 
Filters gelegt und den Ausgang direkt auf den Spektrum Analyser.
Wenn ich den Full Span fahre, was der kann (125mHz bis 100kHz) und als 
analoges Eingangssignal einen 1kHz Sinus nehme, dann sieht man erstmal 
wie schlecht mein Funktionsgenerator ist. ;-)
Aber das Rauschen liegt dann bei -75dBV. Also auch das, was im 
Auslegungstool angegeben wird.
Die Ergebnisse passen super zusammen.
Genauer werde ich da jetzt nicht messen, da das Ganze noch auf 
Lochraster gefädelt ist, da reichen mir die Ergebnisse aus.

Mein Fazit:
Ich bin überrascht, wie sich die Mathematik hier in die Wirklichkeit 
übertragen lässt. Wie genau das alles zusammenpasst. Das freut mich 
echt!

Wenn ihr Fragen habt, dann kommt gerne auf mich zu.
Danke an alle, die mich hier unterstützt haben!

Grüße, Jens

von J. S. (engineer) Benutzerseite


Lesenswert?

Jens W. schrieb:
> Ich bin überrascht, wie sich die Mathematik hier in die Wirklichkeit
> übertragen lässt.

Nunja, solche Sachen machen wir mit Controllern ja schon 30 Jahre. Und 
die meisten DACs machen das ja vor allem, nur eben intern im 
Verborgenen. Warum sollte der FPGA nicht dasselbe können ;-)

Ganz konkret kannst du auf diese Weise ja einen einfachen ADC-bauen, 
wenn du den Komparator im FPGA benutzt und die Führungsgröße nicht von 
intern, sondern einem externen Signal kommen lässt. Du kriegst dann 
einen PDM-Datenstrom, den man nur tiefpassfiltern muss. Aus 200 MHz sind 
da ohne Weiteres 13-15 bit mit 5 - 20kHz erzielbar.

: Bearbeitet durch User
von Christoph M. (mchris)


Lesenswert?

>Warum sollte der FPGA nicht dasselbe können ;-)

Für den Parallax-Propeller gibt es eine Application Note zum Bitbanging 
Sigma Delta ADC bestehen aus einem Widerstand und 2 Kondensatoren:

https://www.parallax.com/package/an008-sigma-delta-analog-to-digital-conversion/

Die Frage ist, wie gut FPGA Ein/Ausgänge dasselbe können.

von J. S. (engineer) Benutzerseite


Lesenswert?

Christoph M. schrieb:
> Die Frage ist, wie gut FPGA Ein/Ausgänge dasselbe können.

Ich habe schon seit Ewigkeiten nicht mehr mit denen gemacht, kenne so 
einen PIC nur von der damaligen "Basic Briefmarke", aber ich kann mir 
vorstellen, dass man den nicht so gut konfigurieren kann, wie 
FPGA-Ausgänge, die allemöglichen Standards können. Mit einem 
LVDS-Ausgang, den man etwas symmetriert, hat man einen sehr guten 
OP-Driver mit symmetrischem Differenzeingang. Schon dadurch bis du 
störungfreier.

Dann laufen FPGA-Ausgänge auch generell "minimal" schneller, als dessen 
IOs, sodass wir über einen ganz anderen Spektralbereich sprechen. Das 
spätestens dürfte den PIC in die Ecke stellen.

Wie gut dass technisch bei sonst gleichen Bedingungen und Frequenzn 
funktioniert, hängt dann der Intelligenz des Modulatorsignals (in der 
APP "counter out"), ab. Mit einem einfachen rückgekoppelten System 
bekommt man eine starke Abhängigkeit von thermischem Drift und dem 
initialen Abgleich, hat natürlich den Vorteil, dass die 
Nichtlinearitäten des analogen Pfades hintendran mehr oder weniger 
automatisch ausgeglichen werden. Wenn man da hintendran allerdings ein 
exaktes Modell von dessen Verhalten hat, geht das mit einem 
rauschtechnisch angepassten Signal nochmals besser. Mit etwas Getrickse 
und einer etwas anderen Dimensionierung von R und C direkt am Ausgang, 
kann man die IOs des FPGAs auch direkt zu einer Autokalibierung nutzen. 
Wenn man es ganz fett machen will, könnte man sogar noch einen 
nachgeschalteten Leistungs-OP mit symmetrieren.

Vor allem hat man im FPGA ausreichend Power für eine Signalverarbeitung, 
um die unterschiedlichen kleinen Fehler in der Schaltung zu kompensieren 
- bis hin zum Kabel.

von Christoph M. (mchris)


Lesenswert?

>Wie gut dass technisch bei sonst gleichen Bedingungen und Frequenzn
>funktioniert, hängt dann der Intelligenz des Modulatorsignals (in der
>APP "counter out"), ab.

Ich hatte mal vor längere Zeit im FPGA einfach einen Inverter 
implementiert und dann einen RC-Tiefpass am Ausgang auf den Eingang 
zurückgekoppelt. Macht man so etwas mit einem HC14 Inverter ergibt das 
einen schönen Oszillator. Mit dem FPGA lief da aber gar nichts (Ich 
meine ein MachXO2 verwendet zu haben). Ich ging dann davon aus, dass ein 
FPGA für diese Art der Verwendung nicht geeignet ist und habe meine 
Versuche beendet.

von J. S. (engineer) Benutzerseite


Lesenswert?

Falls dir der Inverter nicht wegoptimert wurde, dann dürfte das daran 
liegen, dass der einfach zu schnell ist und nur minimal um den 
Schaltpunkt zappelt.

Dein HC Teil ist einfach sehr langsam und hat über dies noch eine 
Leitung zu treiben. Es muss eine ausreichend lange Kette sein, damit die 
Schaltung auch einschwingen kann. Schon vor 20 Jahren habe ich solche 
Sachen gemacht und brauchte da bereits immer mindestens 5-7 inverter. Im 
FPGA selber haben die nichts zu treiben und sind einfach zu schnell. Aus 
der Erinnerung habe ich einen solche OSC mal um 2008 mit einem Spartan3A 
gemacht, brauchte wieder 5 Stufen, damit er schwingt und musste dann 
3-fach durch 2 runterteilen, um die gewünschten ~100MHz zu haben. Das 
Ding lief also intern auf 800 MHz. Nachgerechnet wären das 1.25ns = 250 
ps für jede LUT. Das reicht, um komplett zu schalten.

Wenn man die Inverterkette umschalten will, müssen es noch mehr sein:
http://www.96khz.org/htm/noisegenerator2.htm

Siehe auch den Artikel hier: Digitaler Rauschgenerator im FPGA

: Bearbeitet durch User
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.