Forum: FPGA, VHDL & Co. Quantisierungsrauschen - wie filtern?


von Robert (Gast)


Lesenswert?

Hallo Leute,

kurze Frage:


Ich habe ein random digitales Signal (1 Bit), welches ich in einen FPGA 
speise.
Da das Signal nicht synchron zur internen Clock ist, synchronisiere ich 
das Signal mit der internen Clock ein.

Was jetzt an dieser Stelle passiert ist, dass ich das Signal intern 
jetzt einsynchronisiert habe - wenn ich das synchronisierte Signal aber 
1:1 am FPGA ausgebe, ist das mit Noise überlagert.
Also quasi wie bei einem Delta-Sigma Wandler ein white-noise welches bis 
1/2 * clock Frequenz reicht.


Jetzt meine Frage: Welche Ansätze gibt es, dieses Hintergrundnoise, 
welches durch die Synchronisierung entsteht, wieder wegzufiltern?

Ich habe gelesen, es gibt Noise-Shaper mit deren Hilfe man das Noise in 
höhere Frequenzbereiche schieben kann. Wie sähe aber eine entsprechende 
Implementierung z.B. in VHDL aus und wie berechne ich den Shaper 
korrekt, um das Signal im Frequenzbereich bis z.B. Frequenz X sauber zu 
halten, wenn ich Clockfrequenz y habe?

Danke euch :)

von J. S. (engineer) Benutzerseite


Lesenswert?

Das "noise shapen", wie Du es hier nennst, müsste VOR dem 
Einsynchronisieren geschehen und zwar so, dass das Erfassen des Taktes 
statistisch in der Amplitude / der Zeit getunnelt wird.

Da es aber in digitaler Eingang ist, also steilflankig verläuft, ist da 
wenig Raum zur analogen Beaufschlagung von Rauschen in der Amplitude, 
wenngleich das grundsätzlich funktioniert. Man kann so sogar 
Analogsignale sampeln. Dazu habe Ich hier im Artikelbereich einen 
Beitrag verfasst.

Allerdings bildet sich (s) das künstliche Rauschen stark in den 
Frequenzbereich ab und muss massiv gefiltert werden, daher könnte man 
auch gleich richtiges phase dithing im Zeitbereich betreiben. Das ist 
besser zu kontrollieren.

Um die Methodik zu Ende zu denken, müsste das Signal aber stärker 
überabgetastet werden, um überhaupt dithering zu verwenden und somit die 
Faltungsprodukte, die beim "Mulitplizieren" des Eingangssignals mit dem 
Takt des FPGAs entstehen, zu minimieren und im Spektrum zu verteilen.

Das Überabtasten ist auch deshalb nötig, damit überhaupt eine 
Trägerfrequenz entsteht, welche die erwünschten "höheren 
Frequenzanteile" beinhalten kann. Und man muss dann auch auf dieser 
erhöhten Frequenz weiterarbeiten, um eine entsprechende Qualität des 
Signals zu erhalten.

Wenn man weit unterhalb der Samplefrequenz arbeitet, also digitale 
Signale im Bereich von max. 1/1000 der FPGA-Frequenz abtastet, dann 
sollte es reichen, die Eingangsdaten einfach zu dezimieren. Zusätzliches 
dithern wäre dann nicht nötig, bzw. kaum noch nutzbringend.

Wenn das eingehende Signal wiederum ein Takt ist, der zudem maximal ca 
1/100 abwärts der FPGA-Frequenz liegt und nur sehr fein in der Phase 
erfasst werden muss, gibt es noch eine weitere Möglichkeit der Filterung 
/ Überabtastung, welches aus einer Kombilösung von dithering / 
danymischem oversampling und einer geschickten Interpolation im 
Frequenzbereich besteht. Für diese hätte Ich einen Core. Sampelt mit 
einem 200MHz-FPGA PDM-Signale im Bereich bis 3MHz und berechnet das duty 
cycle auf 10-4 genau, folgt dem Signal voll audiofähig. Funktioniert 
z.B. für autark laufende PDM-Signale aus Mikrofonen, die nicht 
synchronisiert sind, also aus einer fremden domain stammen.

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.