Circuito digital para agregar múltiples frecuencias

1

El objetivo es implementar un tipo de piano digital en un FPGA.

Hasta ahora, conseguí producir notas individuales utilizando contadores. Básicamente, genero una onda cuadrada de cierta frecuencia, que corresponde a una nota musical (por supuesto, para hacer eso, confío en la frecuencia del reloj, pero eso no es un problema).

¿Cómo puedo diseñar un circuito que pueda producir la superposición de varias notas? Básicamente, quiero poder producir 2 sonidos de diferentes frecuencias al mismo tiempo.

    
pregunta Paul92

5 respuestas

3

Cuando era un adolescente en la década de 1980, tenía una computadora Apple II +, que tenía una salida de altavoz similar a la del altavoz de PC de IBM. El acceso a una ubicación de puerto de E / S asignada en memoria tuvo el efecto de alternar una salida conectada al altavoz.

Escribí un programa en lenguaje de máquina que jugaba tríadas: tres notas simultáneas. Una tabla de consulta convirtió los valores de nota (indexados por semitono) en valores de contador. El enfoque fue simple: inicialice tres contadores y realice un ciclo de forma independiente en un gran bucle. En cualquier iteración cuando al menos uno de los contadores haya girado, alternar el altavoz.

Esta rutina, junto con un programa BÁSICO para conducirlo con datos, reproduce una muy buena interpretación de la progresión de acordes del sintetizador desde Jump de Van Halen.

Es un sonido único. Hay distorsión, pero la separación de notas es bastante clara.

Las variaciones en el timbre se pueden producir, por cierto, con la variación del ciclo de trabajo. Me parece recordar que esto se traduce en un volumen percibido.

    
respondido por el Kaz
0

Depende mucho del tipo de hardware que tengas.

Si solo tiene una salida de 1 bit en el FPGA, puede remuestrear la señal de audio (1MHz o más) y usar un modulador PWM o delta-sigma, generando efectivamente una señal de amplitud variable (puede agregar un filtro de paso bajo , un simple circuito RC es suficiente).

Luego puede agregar sus señales sintetizadas (senoidal, cuadrada, triángulo ...) y generar sonidos polifónicos. Por ejemplo, con un sumador de 8 bits (firmado), establezca la amplitud de los dos generadores de onda cuadrada en + 50 / -50.

    
respondido por el TEMLIB
0

Una forma sencilla es tomar cada salida de los contadores, pasarla a través de una resistencia y luego conectar el otro extremo de las resistencias. Ahora las salidas de contador individuales se atenuarían mientras que la salida final sería la suma de las salidas de contador.

    
respondido por el rioraxe
0

Dos formas (en las que puedo pensar):

  1. con un DAC
    • Multiplica las señales individualmente para obtener diferentes amplitudes individuales.
    • Suma las señales que deseas combinar
    • Salida de n bits al DAC de n bits
    • Puede hacer un DAC R2R usted mismo usando solo resistencias.
  2. Sin un DAC, usando un solo pin y un filtro de paso bajo
    • Añade las dos señales
    • Module la salida usando la modulación delta-sigma
    • Salida a través de un filtro de paso bajo (RC es el más simple).
respondido por el HKOB
0

Si solo está tratando con una salida única digital y generando ondas cuadradas, la forma más sencilla de hacerlo es tener dos (o n) contadores en cada frecuencia deseada, y XOR sus salidas juntas antes de enviarlas a el pin. Esto produce un resultado equivalente al enfoque de alternancia de Kaz.

    
respondido por el Nick Johnson

Lea otras preguntas en las etiquetas