Pregunta

Estoy viendo el código de un acumulador de fase, y debo ser un simple porque no lo entiendo. El código es bastante simple:

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

acumulación es un registro de 32 bits. Obviamente, en algún momento se reiniciará.

Mi pregunta realmente es: ¿Cómo se relaciona esto con la fase?

¿Fue útil?

Solución

Este artículo puede ayudar.

En el paso de ejecución, el contador (correctamente llamado acumulador de fase) recibe instrucciones para avanzar un cierto incremento en cada pulso desde la referencia de frecuencia. La salida del acumulador de fase (la fase) se utiliza para seleccionar cada elemento en la tabla de datos por turno. Finalmente, el DAC convierte esta secuencia de datos a una forma de onda analógica.

  

En el paso de ejecución, el contador   (adecuadamente llamada la fase   acumulador) es instruido para avanzar   por un cierto incremento en cada pulso   a partir de la referencia de frecuencia. los   salida del acumulador de fase (el   fase) se utiliza para seleccionar cada elemento en   la tabla de datos a su vez. Finalmente, el   DAC convierte esta secuencia de datos a   Una forma de onda analógica.   Para generar una forma de onda periódica, la   El circuito está configurado para que una pasada.   a través de la mesa lleva un tiempo igual   al período de la forma de onda. por   ejemplo, si la frecuencia de referencia es   1 MHz, y la tabla contiene 1000   entradas, luego un pase completo   La tabla con un incremento de fase de 1.   tomará 1000/1 MHz = 1 ms, por lo que el   frecuencia de la forma de onda de salida   ser 1 / (1 ms) = 1 kHz.

     

Este sistema puede generar una mayor   frecuencia de salida simplemente aumentando   el incremento de fase para que el   El contador pasa por la mesa más.   con rapidez. En el ejemplo anterior,   el incremento de fase es igual a 1, por lo que   La siguiente frecuencia posible es obtenida por   establecer el incremento a 2, lo que resulta   En una duplicación de la frecuencia de salida. A   obtener un mejor control de frecuencia   que esto, la fase estándar   el incremento se puede establecer en, digamos, 10. Este   entonces permite un poco más alto o más bajo   Frecuencias de salida. Por ejemplo,   aumentando el incremento a 11 sería   aumentar la frecuencia de salida en un 10%,   y reducirlo a 9 disminuiría   La frecuencia de salida por la misma   proporción. La mayor precisión   requerido sobre la frecuencia, más   los bits son necesarios en el contador.

Otros consejos

Respondiendo a mi propia pregunta, encontré otro artículo interesante en línea que describe una Acumulador de fase para síntesis de frecuencia.

Aquí está mi comprensión de cómo funciona el acumulador de fase:
El registro del acumulador en realidad representa 360 grados. Por lo tanto, un valor de 0 representa 0 grados, un valor de 2 ^ 32 representa 360 grados.

El acumulador de fase agrega un valor (M) a cada tic de reloj. Esto representa el ángulo que se mueve alrededor del círculo por (M / 2 ^ 32) grados. Cuando el registro se desborda, simplemente realizamos un ciclo completo de 360 ??grados y comenzamos de nuevo.

La fórmula es esta:

Ejemplo utilizando oscilos que tienen un período de forma de onda (x) = x (0-1) en lugar de x (0-2Pi)

Una variable por flujo de audio llamada acc / acumulación,

Cada muestra, acumúlala por 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

Si estás usando el pecado clásico con un período de 2pi, usa 2pi en lugar de 1.0

Al igual que la forma de onda se ejecutará de 0 a 1 en periodos de p2freq (nota) por segundo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top