¿Cómo se reproducen múltiples frecuencias a través de un altavoz/zumbador sin distorsionarse entre sí?

Tengo una idea para un proyecto de Arudino que es esencialmente una máquina de música con zumbador piezoeléctrico en la que podré programar partituras. Consistiría en circuitos de oscilador 555 individuales a diferentes frecuencias y el arduino controlaría si ellos (la nota específica) están activos o no. He buscado proyectos similares, pero todos los que encuentro solo usan uno o dos zumbadores piezoeléctricos con el tono arduino (); biblioteca.

Me hizo pensar en múltiples frecuencias en un altavoz/zumbador y cómo funciona. Si tuviera dos ondas cuadradas, ¿no causaría distorsión el apilamiento de las señales cuando ambas son altas o la cancelación cuando una es alta y la otra es baja?

He buscado mucho tratando de encontrar una respuesta a esta pregunta, pero nada ha sido sencillo. También me hace cuestionar si mi proyecto es una buena idea o no porque deseo reproducir una gran cantidad de sonidos.

Superposición, ver también síntesis de Fourier
Si reproduce dos ondas sinusoidales con fase opuesta, se cancelarán . ¿Cuenta como "distorsión"?
@EugeneSh. esa es una pregunta interesante...
@Trevor, diría que una superposición de ondas no es una distorsión, sino la forma en que las cosas funcionan naturalmente. Si tienes un tambor o una guitarra, sus "ondas" simplemente se suman en tu oído. y el sonido combinado no es una "distorsión".
@EugeneSh. Sí, eso es cierto, pero un tambor y una guitarra tienen una separación especial. Dos ondas sinusoidales desfasadas solo se cancelan porque tienen una fuente de un solo punto (el altavoz). Si tú y yo tocáramos la misma nota en algún instrumento que produjera exactamente una onda sinusoidal, no sería lo mismo. Cuál es la parte que lo hace interesante.
@Trevor Cierto. A menos que tengas un lugar especial donde el suero en la fase anti :) De todos modos, cuando hablamos de diferentes frecuencias, este efecto tiene una forma diferente (¿alguna vez has afinado una guitarra? :))
@EugeneSh. sí, pero plantea una pregunta interesante, ¿puede ese efecto de superposición de fuente única clasificarse como una distorsión? Supongo que esa es una de las razones por las que el estéreo suena mucho mejor que el mono.
@Trevor Sí, veo tu punto. Si tenemos dos "instrumentos" trabajando en fase opuesta, podemos obtener sonidos diferentes separándolos y moviendo al observador. Pero si jugamos desde un único punto no oiremos nada. Supongo que para eso están los ingenieros de sonido :)
Su objetivo se puede lograr, pero lo está haciendo de manera completamente equivocada. No utilice los 555: generan ondas cuadradas y serán muy difíciles de controlar. En su lugar, obtenga una MCU razonablemente rápida con un DAC o PWM rápido que pueda filtrar y realice una síntesis de software de una suma de múltiples ondas sinusoidales. Si desea seguir siendo Arduino, una Teensy de gama alta o posiblemente un Due o incluso un ESP8266 pueden ser opciones.
Como otros insinuaron más o menos claramente, deberá enviar una señal analógica al zumbador. La señal analógica entonces es solo la suma de sus componentes o sonidos o formas de onda. Como descubrió, sumar señales de entrada digital de 1 bit en una señal de salida digital de 1 bit no funciona.

Respuestas (3)

Este es realmente un comentario extenso en comparación con una respuesta a la pregunta.

Lo que estás tratando de hacer es una mala idea si el punto es el resultado. Si lo haces por diversión, desafío o aprendizaje, está bien, pero no esperes buenos resultados.

Va a ser muy difícil y tedioso mantener afinados todos esos osciladores analógicos de la década de 1970. Deshazte de los malvados temporizadores 666 555 y hazlo todo digitalmente. No solo el resultado será mejor, sino que también será mucho más fácil.

Agregue todas las señales que desea combinar digitalmente, luego escriba la suma en un D/A y haga que eventualmente controle un altavoz. Escriba una rutina sinusoidal basada en una búsqueda rápida y luego utilícela para cada uno de los tonos. Las frecuencias están controladas por cuánto avanzan los índices en la tabla en cada muestra. Use tal vez 16 bits de fracción debajo de cada índice para obtener mucha resolución de frecuencia.

Haz que la tabla de senos tenga un tamaño de potencia de 2. Eso significa que los índices (argumentos de ángulo de las funciones de seno) se ajustan automáticamente a 0 cuando se incrementan más allá de 360°.

Incluso la búsqueda de seno de 10 bits de fuerza bruta producirá resultados mucho mejores que un montón de 666 temporizadores.

Esto será más fácil en un procesador más diseñado para tales cosas que cualquier cosa que venga en un arduino. Algo como un Microchip dsPIC puede hacer esto fácilmente.

Vamos a ver cómo salen los números. Un dsPIC es inherentemente una máquina de 16 bits, así que usemos dos palabras para cada ángulo. La palabra alta será el índice de la tabla directamente, y la palabra baja será la fracción de bits para mayor resolución. Un dsPIC de la serie EP puede funcionar a 70 MIP. Digamos que desea una frecuencia de muestreo de 40 kHz. ¡Eso significa que obtiene 1750 instrucciones por muestra!

Para cada tono contribuyente, toma la palabra alta del ángulo, la usa para buscar el valor del seno en una tabla, lo agrega al acumulador y luego aumenta el índice al agregarle su incremento de 32 bits. digamos que esto requiere 25 instrucciones por tono, incluida toda la sobrecarga de verificación de inicialización, bucle y terminación. Debería tomar menos que eso, pero incluso con eso, este método puede admitir 70 tonos.

Eso es mucho mejor y más fácil que tratar de mantener sintonizados 70 osciladores analógicos.

Igual que funciona en el aire: siempre que el medio sea lineal, dos o más señales agregadas, ya sean eléctricas o acústicas, no interferirán entre sí, la forma de onda más compleja resultante aparecerá para el oído o cualquier dispositivo de medición como "frecuencia". x en la amplitud y y la frecuencia a en la amplitud b".

Tan pronto como algo se vuelva no lineal: el cono del altavoz al final de la excursión, el amplificador fuera del rango lineal o la reserva de velocidad de respuesta*... la forma de onda resultante tendrá las dos o más frecuencias originales en una amplitud más baja más frecuencias adicionales (generalmente múltiplos de las frecuencias originales).

Un comportamiento de "filtro lineal" de cualquier cosa en la cadena (paso de banda, paso bajo, paso alto...) cambiará las amplitudes relativas pero no introducirá nuevas frecuencias.

*Esto puede suceder si hay una señal de tono inaudiblemente alto de gran amplitud en una cadena de audio de banda muy ancha. Los amplificadores (y altavoces) tienen una banda de paso (comportamiento de filtro lineal, independiente de las amplitudes absolutas; esto no puede "distorsionar" nada a menos que llegue a ->), límites de excursión (el voltaje de salida no puede ser mayor o menor que x, y el la señal de tono alto consume ese límite y no deja suficiente voltaje para el otro, y limita la velocidad de giro (la rapidez con que el voltaje de salida, o la posición del cono, puede cambiar por segundo; ¡esto depende de la amplitud y es diferente de la banda de paso! Aquí también, el tono alto señal puede consumir este recurso resultando en la distorsión de las otras señales).

Obviamente, dos o más señales se afectan entre sí, la respuesta o palabra de superposición es todo lo que necesita para buscar aquí. Mire un altavoz en acción, si tiene una frecuencia realmente baja, el altavoz se mueve relativamente lento y un alto y se mueve rápido, pero puede generar ambos y decir que ambos están allí, entonces, ¿cómo es eso posible?

Deben afectarse entre sí y son exactamente de la manera que esperaría si sumara los dos, diría que tiene una onda sinusoidal lenta que se mueve con una onda sinusoidal más rápida, solo haga los cálculos y grafíquelo, ahí lo tiene si el altavoz es mecánicamente capaz que es lo que está pasando (con algo de retraso, etc). Así es como funciona la compresión de mp3, en teoría, con suficiente o digamos una frecuencia baja realmente fuerte, ¿puede nuestro oído captar otras frecuencias más tranquilas al mismo tiempo? No, ¿podemos resolver esto y filtrarlos? Sí, ¿esto ahorra ancho de banda digital general? Sí...

No hay ninguna razón para todo el trabajo que está haciendo, temporizadores externos. Solo un procesador de algún tipo y un dac, todo lo demás es digital, solo sume los canales y divídalos por algún número N para evitar que se recorten, y cada canal tiene un peso o amplificación aplicado. Con un arduino o yo diría que cualquier microcontrolador no hay razón para usar un punto flotante fijo. El reloj mcu es lo suficientemente bueno, idealmente un cristal para mayor precisión. Mezcle sus canales digitalmente (suma y divida por algunos N) y envíe un DAC a un amplificador al altavoz. ¿Quieres hacer un prototipo de esto? Escriba algún software en su computadora de desarrollo que genere algunas ondas, las combine, las alimente sin procesar en audacity o algún programa que pueda tomarlas o descubra el formato de archivo de onda (algo trivial) u otro formato sin formato y luego reprodúzcalo en su computadora, no es más complicado que eso. Puede tener una tabla de búsqueda precalculada por sonido que desee, para cada período de muestra, combine los sonidos habilitados y alimente eso al DAC.