Ich verwende einen NCO, um Frequenzen zwischen 10 und 30 MHz herzustellen. Die Taktfrequenz des FPGA liegt bei 100 MHz. Jetzt ist es js so, dass der NCO für Frequenzen von z.B. 29 MHz nicht mit den 100 harmoniert. Der Phasenakku wird dann um einen "krummen" Wert fortgeschrieben. Je nach Rundung bekomme ich damit eine z.B. etwas zu kleine Frequenz, was dazu führt, dass die Phase vom Ideal wegläuft. Frage: Wird das irgendwie ausgeglichen? Oder muss ich das per Hand machen, durch z.B: reset?
Gisbert schrieb: > Je nach Rundung bekomme ich damit eine z.B. etwas zu kleine Frequenz, > was dazu führt, dass die Phase vom Ideal wegläuft. Richtig. Deine Frequenzauflösung wird durch die Bitbreite des Akkus vorgegeben:
1 | F_step = F_sampling / ( 2**akku_width) |
Bei 100 MHz und z.B. 8 Bit kannst Du nur Schritte von 390.625 kHz einstellen. > Frage: Wird das irgendwie ausgeglichen? Nein. > Oder muss ich das per Hand machen, durch z.B: reset? Damit hast Du einen Frequenzsprung (und möglicherweise auch einen Phasensprung). Wie genau ist denn Deine Taktquelle? Und warum brauchst Du eine so genaue Frequenz? Bei Funksystemen muß man z.B. damit rechnen das die Frequenz der Gegenstelle abweicht. (Doppler-Effekt, andere Temperatur etc. pp) Duke
>> Oder muss ich das per Hand machen, >Damit hast Du einen Frequenzsprung Somit wäre aber die Phase zumindest für eine gewisse Zeit in dem gewünschten range zu halten. Um solche Effekte bei Spüngen zu mindern, kann man in digitalen Analog-Systemen (und solchen die beanspruchen, sowas zu sein :-) ein künstliches Phasenrauschen aufsetzen und Filtern. Damit "verteilt" sich der Sprung.
Ein NCO hat eigentlich keinen solchen Phasensprung. Selbst wenn ich die 29 MHz mit einem Takt von "nur" 30 MHz erzeuge, dann addiere ich immer einen bestimmten Wert, und nur die Breite des Akkumulators legt die Phasenabweichung fest, bzw. die Breite der anschließenden D/A-Wandlung. Das geht (fast) mit beliebiger Präzision. Phasensprünge werden zur Modulation des NCO verwendet, abrupte Sprünge geben PSK, ein +-Offset erzeugt FM, eine binäre Multiplikation des Akkumulators erzeugt AM, und so fort......
Aber es gibt doch ein Ganzzahlprolem!(?) Der Akku wird mit einem Wert addiert, der dazu führt, das nach der Zahl der Takte/Sekunde zu einem kompletten Akkuüberlauf führt. Wenn aber die gwünschte Freuquenz nicht ganzzahlig zur Taktfrequenz üpasst, geht es nicht ganz genau.
Der Akkuüberlauf ist nur der Wert, der 360 Grad Phase entspricht, und wird einmal pro Periode erreicht. Der Trick: Der Akkumulator läuft nicht immer wieder bei Null los.
Das sind zwei unterschiedliche Dinge: 1) Phasenrauschen: Der Sinuswert wird von einem hochgenauen Akku abgenommen und ist aufgrund der Rundung in der Phase ungenau. Folglich ist der Wert ungenau. Im Mittel stellt sich ein Phasenrauschen um eine Periode ein, die exakt der Akkumulatorperiode entspricht. 2) Frequenz: Der Akku selbst ist nicht beliebig gross und der "Hinzuzählwert" der ja die Frequenz bestimmt, unterliegt auch einer Rundung. Die reale Frequenz ergibt sich zu f= Akkugroesse / (Taktfrequenz * Schrittweite). Wenn diese Zahlen nicht optimal zusammenpassen, kommt man zu einer gerundeten = falschen Frequenz! Ein wichtiger Punkt ist auch die Dimensionierung von Akku gegen Tabellengrösse.
Einen Phasensprung in dem Sinn gibt es nicht, aber eine flasche Frequenz. Das ist u.U, schwerwiegender. Es ist daruf zu achten, dass der Akumulator genügend gross und die Auflösung fein genug ist.
Bei der Grafik wird der Akku auf 11 Bit gekürzt, was bei dem grossen Akku bei 96kHz reicht, trotzdem stimmt die Frequenz noch nicht gut genug. Wenn man die Abtastfreuquenz erhöht, um mehr Bandbreite zu bekommen, muss der Akku quadratisch wachsen, weil sonst der Schrittfaktor nicht genau eingestellt werden kann.
Was spräche gegen einen größeren Akkumulator? Soviel mehr Platz braucht der nicht. Ich weiss nicht auswendig, was der Core so kann, aber da solte genug Reserve drin sein.
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.