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
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.
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
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
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.
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
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
Frage an die Experten: Welcher Ordnung ist dieser Modulator? 5? Ist das die Innovation bei dem Teil?
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
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.
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
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?
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.
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.
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
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.
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
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
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!
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.
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
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
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
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.
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.
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
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
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.
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 ***
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.
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.
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.
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 ;)
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) ;)
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.
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.
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
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 :-)
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.
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
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 :-)
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
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.
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
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.
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
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?
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
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
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
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
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
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.
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
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
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)
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
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
>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.
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.
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.