Frage

Ich bin auf der Suche den code für eine phase accumulator, und ich muss ein Trottel, weil ich verstehe es nicht.Der code ist einfach genug:

  Every Clock Tick do:
    accum = accum + NCO_param;
    return accum;

accum ist ein 32-bit-register.Natürlich wird er irgendwann roll-over.

Meine Frage ist wirklich:Wie wirkt sich dies auf die phase?

War es hilfreich?

Lösung

In diesem Artikel kann helfen.

In der Schritt ausgeführt wird, wird der Zähler (richtig genannt die phase accumulator) angewiesen ist, Voraus, die von einem bestimmten Inkrement auf jeden Impuls aus der Frequenz-Referenz.Der Ausgang des Phasen-Akkumulators (die phase) wird verwendet, um wählen Sie jedes Element in der Daten-Tabelle in der Reihe.Schließlich der DAC wandelt diese Abfolge von Daten eine analoge Wellenform.

In der Schritt ausgeführt wird, wird der Zähler (richtig genannt die phase Akku) angewiesen ist, Voraus indem Sie einen bestimmten Betrag auf die einzelnen pulse aus der Frequenz-Referenz.Die Ausgang des Phasen-Akkumulators (die phase) wird verwendet, um wählen Sie jedes Element in die Daten der Tabelle in der Reihe.Endlich, die DAC wandelt diese Abfolge von Daten eine analoge Wellenform.Zum erzeugen einer periodischen Wellenform, die Schaltung ist so eingestellt, dass ein Durchlauf durch den Tisch bringt, eine Zeit gleich die Periode der Wellenform.Für Beispiel,, wenn die Referenz-Frequenz ist 1 MHz, und die Tabelle enthält 1000 Einträge, dann eine vollständige passieren der Tisch mit einer phase Inkrement von 1 nehmen 1000 / 1 MHz = 1 ms, so dass die Frequenz des Ausgangs-Wellenform wird 1/(1 ms) = 1 kHz.

Dieses system erzeugen kann, die eine höhere Ausgangs-Frequenz einfach durch die Erhöhung die phase increment, so dass die Zähler läuft über den Tisch mehr schnell.In dem Beispiel oben, die phase Schrittweite gleich 1, so dass die nächste mögliche Frequenz ist, die durch Einstellung der Schrittweite auf 2, wodurch eine Verdoppelung der Ausgangsfrequenz.Zu erhalten Sie eine feinere Steuerung der Frequenz als diese, die standard-phase Schrittweite kann eingestellt werden, um, sagen wir, 10.Diese dann kann etwas höher oder niedriger Ausgangs-Frequenzen.Für Beispiel, erhöhen Sie die Schrittweite um 11 würde steigern der Ausgangsfrequenz von 10%, und die Reduzierung auf 9 verringern würde die Ausgangs-Frequenz durch den gleichen Anteil.Die mehr Präzision erforderlich über die Frequenz, desto - bits benötigt werden, in den Zähler.

Andere Tipps

meine eigene Frage zu beantworten, fand ich eine weitere interessante Artikel Online beschreibt ein Phasenakkumulator zur Frequenzsynthese.

Hier ist mein Verständnis, wie der Phasenakkumulator arbeitet:
Das Akkumulatorregister stellt tatsächlich 360 Grad. Somit wird ein Wert von 0 für 0 Grad, wobei ein Wert von 2 ^ 32 stellt 360 Grad.

Der Phasenakkumulator addiert einen Wert (M) in jedem Takt Zecke. Dies stellt den Winkel um den Kreis zu bewegen, indem (M / 2 ^ 32) Grad. Wenn das Register überläuft, wir einfach durch ein volles 360 Grad durchlaufen und von vorn beginnen.

Die Formel lautet folgendermaßen aus:

Beispiel unter Verwendung von oscillors, die eine Periode der Wellenform (x) = Periode x (0-1) statt x (0-2Pi)

haben

Eine Variable pro Audio-Stream genannt acc / Akkumulator,

Jede Probe, akkumulieren sie durch accadd:

    var accadd = 1.0/( sampleRate / p2freq( note ) ) ;
    acc+= accadd;
    acc = acc%1.0;// not sure to do this as accurately using if statement. can reset acc every noteOn

Wenn Sie klassische Sin mit 2pi Zeit arbeiten, verwenden 2pi anstelle von 1,0

Wie, dass die Wellenform von 0-1 am p2freq (Anmerkung) Perioden pro Sekunde ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top