Oscilador controlado numéricamente (NCO) Cantidad de muestra

1

He estado haciendo algunas investigaciones sobre suboficiales y alguna información inicial (o falta de información) me está molestando. He leído algunos artículos sobre este tema:

NCO basado en FPGA

Blog sobre los NCO

Pero todavía no entiendo cómo un oscilador de este tipo puede variar la frecuencia sin reducir el número de muestras entre diferentes frecuencias.

Todos los artículos sobre este tema mencionan el siguiente arreglo:

Palabra incrementada --- > Acumulador de fase (cronometrado por el reloj principal) ---- > Tabla de consulta de onda sinusoidal --- > DAC y así sucesivamente.

La disposición anterior (por lo que puedo entender) varía la cantidad por la que itera a través de la tabla, por lo tanto varía el tiempo que tarda en atravesarla y producir una onda sinusoidal completa. Sin embargo, digamos que mi tabla de búsqueda consta de 2 ^ 8 entradas y que a través de la tabla incremento en 1 cada vez, iré a través de las 2 ^ 8 muestras y obtendré una frecuencia de Reloj / 256

Ahora, si en cambio incrementara en 4 cada vez, solo pasaría por 256/4 muestras y obtendría una frecuencia 4 veces mayor que en el ejemplo anterior.

Entonces, a pesar de que la frecuencia es muy variada, el número de muestras presentes en las diferentes frecuencias también es diferente.

¿Cómo se puede variar la frecuencia sin afectar el número de muestras presentes en la onda?

    
pregunta Adil Malik

3 respuestas

4

Esta técnica generalmente se llama síntesis digital directa (DDS) .

  

¿Cómo se puede variar la frecuencia sin afectar el número de muestras presentes en la onda?

No lo hace; La frecuencia de muestreo es fija. Es decir. el sintetizador / oscilador genera un cierto número de muestras por segundo, esto no varía, el valor de la muestra varía.

Digamos que usó una frecuencia de muestreo de 8 kHz, si observa el segundo de salida, tendrá 8000 muestras. La frecuencia más alta que podría emitirse a esta velocidad es 4khz, que es la Nyquist_frequency . Para este 4khz, el valor de muestra alternaría 0,255,0,255 ... el índice de su tabla sería 0,128,0,128 o (127,255 ... o lo que sea). El índice aumentaría en 128 cada muestra. Una señal de 2khz vería un índice aumentando en 64 cada muestra. Ambas señales tendrían 8000 muestras durante todo el segundo, ¡la señal 2khz tendría la mitad de ciclos que la señal 4khz al mismo tiempo, porque es la mitad de la frecuencia!

Ahora, si te refieres a ciclo en lugar de onda, entonces la respuesta sería que no puedes tener el mismo número de muestras / ciclo para otra frecuencia con la misma frecuencia de muestreo. Si necesita más fidelidad (es decir, más muestras), tendrá que aumentar la frecuencia de muestreo.

    
respondido por el esoterik
1

Un DDS / NCO es básicamente un convertidor de frecuencia de muestreo que tiene una frecuencia de muestreo de salida fija y una frecuencia de muestreo de entrada variable. En su ejemplo, configurar la palabra de control de frecuencia de entrada en 4 en lugar de 1 aumenta la frecuencia de la forma de onda de salida al aumentar la frecuencia de muestreo de la forma de onda de entrada (almacenada en la tabla) en un factor de 4 mientras que al mismo tiempo la diezma en 4 manteniendo 1 de cada 4 muestras). Piénselo de esta manera: si reproduce la tabla a 4 veces Fclk, obtendrá 4 veces la frecuencia de salida. Sin embargo, solo puede generar muestras de salida en Fclk, por lo que debe soltar 3 muestras cada 4 (diezmar por 4). Esto se implementa omitiendo más de tres entradas de tabla en cada ciclo de reloj.

La potencia real de un DDS radica en que puede tener un acumulador de fase muy grande con más bits que su tabla de búsqueda, por lo que puede generar frecuencias con una resolución extremadamente fina, específicamente, la frecuencia de muestreo dividida por el rango del acumulador. Para un reloj de 250 MHz y un acumulador de 32 bits, la resolución de frecuencia es de 0.058 Hz. La desventaja es que las muestras no serán absolutamente perfectas debido al truncamiento de la fase, pero esto generalmente es un problema menor que el número de bits de salida que proporciona la tabla de búsqueda.

Almacenar una tabla de consulta muy grande es un problema un poco difícil. Para una salida de 16 bits, generalmente desea una tabla con 2 ^ 18 entradas. Esto no encaja en un bloque de memoria FPGA. Existen técnicas para almacenar una versión comprimida de una tabla de búsqueda en varias tablas de búsqueda, luego realizar algún tipo de interpolación u otra reconstrucción para obtener el valor correcto. Un ejemplo es enlace . Este módulo es una LUT de 16 bits para la función seno con una entrada de 18 bits. Normalmente se requieren 2 ^ 18 * 16 = 4M bits para almacenamiento, pero este solo usa 16 * 512 * 2 + 8 * 256 = 18k, un ahorro de 227x.

    
respondido por el alex.forencich
1

La frecuencia de muestreo variable es diferente a la omisión de muestras, Estaba pensando de la misma manera que esas respuestas, y tratando de averiguar lo mismo que el tema de inicio.

enlace como prueba es diferente: enlace

    
respondido por el freaq

Lea otras preguntas en las etiquetas