Was könnte die Quelle dieser Sinuswellenverzerrung sein, die in der FFT als gleichmäßig beabstandete Linien sichtbar ist?

Ich habe eine MCU, die einen 16-Bit-DAC über SPI steuert (und einen zusätzlichen LDAC-Ausgang, der die Aktualisierung des DAC-Ausgangs auslöst). Die MCU hat eine vorberechnete 1120-Hz-Sinuswelle in einem 364 Byte langen Puffer (alle Berechnungen in Float32, gerundet auf uint16 für die DAC-Ausgabe), abgetastet bei 29120 Hz. Bei einem Timer-Interrupt wird das Update des DAC per LDAC angestoßen und anschließend ein neuer Wert aus dem Buffer geladen und per SPI gesendet. Die Aktualisierung auf den letzten Wert wird am Anfang ausgelöst, um Jitter aufgrund von Speicherzugriffsrennen gegen DMA zu reduzieren. Interrupt hat eine ausreichend hohe Priorität, um nicht verzögert zu werden.

Obwohl der Sinus optisch gut aussieht , zeigt die FFT meines Rigol DS1054Z hinter dem DAC (vor dem Rekonstruktionsfilter) eine deutliche Verzerrung:Verzerrtes Signalspektrum hinter DAC

Die höchste Spitze sind die erforderlichen 1120 Hz, andere haben einen gleichen Abstand von 260 Hz. Die rechte Spitze scheint nur 5dB unter der Hauptspitze zu liegen!!

Der Jitter am LDAC-Pin liegt in der Größenordnung von +/- 0,25 us, was ich bei einer Abtastzeit von 34,3 us für akzeptabel halte. Der Timer selbst läuft vom Kristall der MCUs und sollte stabil genug sein.

Was für ein Problem würde zu einem solchen Verzerrungsmuster führen? Was könnten die Möglichkeiten sein, es zu diagnostizieren und zu reduzieren?

Nur für den Fall relevant: Der DAC ist ein AD5686, die Vollskalenreferenz beträgt 5 V, die Sinusamplitude beträgt 25 mV, was dazu führt, dass ungefähr die unteren 10 Bit "umgeschaltet" werden.

1,5 % Peak-to-Peak-Jitter sind eigentlich ziemlich viel.
29120/260 = genau 112 also ist einer Ihrer Sinuswerte falsch?
Wenn Ihre Sinustabelle 364 Byte groß ist, müssen Sie diese 407.680 Mal pro Sekunde abtasten, um 1120 Hz zu erhalten, es sei denn, Sie haben 14 Zyklen in der Tabelle gespeichert? Aber warum 14 Sinuszyklen speichern?
Subharmonische schreien, dass Ihre Abtastrate nicht konstant ist oder Ihre Tabellensuche ein systematisches Überlaufproblem hat. Ersetzen Sie Ihre Sinuswelle durch (sagen wir) 32 Zyklen Rechteckwelle und wiederholen Sie dies als Experiment. Oder bleiben Sie bei der Sinuswellen-LUT und codieren Sie die Suche fest, um jedes Mal einfach um eine Position zu erhöhen. Sehen Sie, ob einer von diesen Ihnen Hinweise darauf gibt, was los ist. Das Umschalten nur der niedrigsten 10 Bits des DAC sollte auf dieser Ebene kein Problem darstellen, aber wenn Sie Bits vertauscht haben, wird dies den Effekt verschlimmern. Versuchen Sie, die Amplitude auf Vollausschlag zu ändern, um weitere Hinweise zu erhalten.
@Andyaka Der Puffer ist für ein komplexeres Signal ausgelegt, die Sinuswelle ist nur ein Fall. Ich spiele herum, wie von user44635 vorgeschlagen, werde berichten, wenn ich Hinweise finde ...
@ user44635 Ich würde erwarten, dass die Sinuswelle sichtbare Sprünge aufweist, wenn es sich nur um ein Indizierungs- / Suchproblem handelt. Ich frage mich, ob die Float32-basierte Berechnung der LUT und die folgende Rundung eine so signifikante Verzerrung einführen könnte ....
Ah. Ich habe gerade bemerkt, dass Sie sagen, dass Sie das Signal vor dem Rekonstruktionsfilter erfassen. Warum erwarten Sie bei nur 26 Samples pro Zyklus Ihres 1120-Hz-Signals etwas anderes? Wie sieht es am Ausgang des Filters aus?
@DaveTweed Ich würde erwarten, dass ich nur Spiegel meines Spektrums über der Niquist-Frequenz des DAC sehe (es sei denn, die Abtastrate des Oszilloskops ist natürlich zu klein). Nach dem Filter sieht es nicht viel anders aus. Siehe jedoch meine Selbstantwort unten für die unglücklichen Details =(
Dein Avatarbild ärgert mich!

Antworten (1)

Ich habe einen Laborsignalgenerator an den Eingang des Oszilloskops angeschlossen, um es mit dem gemessenen Signal zu vergleichen, und überraschenderweise genau das gleiche Spektrum in seiner FFT gesehen. Beim Erhöhen der Frequenz verschwanden die Subharmonischen bei 1250 Hz. Das Ändern der Speichertiefe in den "Erfassen"-Einstellungen von Auto auf 6K entfernte den Effekt. Es scheint, als würde in der FFT des DS1054Z eine Art Aliasing-Problem auftreten.

===

BEARBEITEN: Wenn Sie sich das Bild genau ansehen, sehen Sie eine Abtastrate von 5 kHz, die über dem FFT-Fenster angezeigt wird. Es wäre zu wenig gewesen, den DAC-Ausgang vor dem Filter abzutasten. Es ist überraschend, dass es immer noch genauso aussieht, wenn es mit einem sauberen 1120-Hz-Signal versorgt wird, da es immer noch unter der Niquist-Frequenz liegt.