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

1

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

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

    
pregunta Cal Hensley

3 respuestas

1

Este es realmente un comentario extenso como se adjunta a 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.

Será muy difícil y tedioso mantener todos los osciladores analógicos de la década de 1970 en sintonía. Olvida los temporizadores 666 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 finalmente se conecte un altavoz. Escriba una rutina sinusoidal de búsqueda rápida, luego úsela para cada uno de los tonos. Las frecuencias se controlan mediante la cantidad de los índices en la tabla que avanzan en cada muestra. Utilice tal vez 16 bits de fracción debajo de cada índice para obtener suficiente resolución de frecuencia.

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

Incluso la búsqueda sinusoidal de 10 bits de fuerza bruta producirá resultados mucho mejores que un grupo de 666 temporizadores.

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

Veamos cómo funcionan 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 los bits de fracción de palabra baja para una mayor resolución. Un dsPIC de la serie EP puede ejecutarse en 70 MIPs. Digamos que desea una frecuencia de muestreo de 40 kHz. ¡Eso significa que obtienes 1750 instrucciones por muestra!

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

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

    
respondido por el Olin Lathrop
1

Lo mismo que funciona en el aire: mientras 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á en el oído o en cualquier dispositivo de medición. como "frecuencia x en amplitud y y frecuencia a en amplitud b".

Tan pronto como algo se convierta en no lineal: cono de altavoz al final de la excursión, amplificador desactivado fuera del rango lineal o reserva de velocidad de respuesta * ... la forma de onda resultante tendrá las dos o más frecuencias originales a una amplitud más baja más frecuencias adicionales (usualmente 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 alta amplitud, un tono inaudiblemente alto en una cadena de audio de banda muy ancha. Los amplificadores (y los altavoces) tienen una banda de paso (comportamiento de filtro lineal, independiente de las amplitudes absolutas, esto no puede "distorsionar" nada a menos que alcance - >), límites de desviación (el voltaje de salida no puede ser más alto o más bajo que x, y La señal de tono alto consume ese límite, dejando el voltaje insuficiente para el otro, y los límites de velocidad de giro (¡cuán rápido puede cambiar la tensión de salida, o la posición del cono, por segundo - esto depende de la amplitud y es diferente de la banda de paso! la señal de tono puede consumir este recurso, lo que provoca una distorsión de las otras señales).

    
respondido por el rackandboneman
0

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 a un altavoz en acción, si tiene una frecuencia realmente baja, el altavoz se mueve relativamente lento y alto y se mueve rápido, pero puede generar ambos y decir que ambos están ahí, entonces, ¿cómo es eso posible?

Deben estar afectándose mutuamente y son exactamente de la forma que cabría esperar si los sumáramos, diría que tiene una onda sinusoidal lenta que se menea con una onda sinusoidal más rápida, solo haga esa matemática y haga una gráfica, allí vaya si el altavoz es capaz mecánicamente, eso es lo que está sucediendo (con algún retraso, etc.). Así es como funciona la compresión de mp3, en teoría, con suficiente actividad o digamos una baja frecuencia realmente alta, ¿puede nuestro oído captar otras frecuencias más silenciosas al mismo tiempo? No, podemos resolver esto y filtrarlo, sí, ¿esto ahorra ancho de banda digital total? Sí ...

No hay 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, simplemente sume los canales y divídalo por algún número N para evitar que se recorten, y para cada canal se le aplica un peso o una amplificación. Con un arduino o yo diría que cualquier microcontrolador no es razón para usar el stick de punto flotante con fijo. El reloj mcu es lo suficientemente bueno, idealmente un cristal para la precisión. Mezcle sus canales digitalmente (agregue y divida por alguna N) y agregue un DAC a un amplificador para el altavoz. ¿Quieres prototipo de esto? Escriba algún software en su computadora de desarrollo que genere unas cuantas oleadas, las combine, colóquelas sin procesar en audacia o algún programa que pueda tomarlas o averigüe el formato de archivo de la ola (algo trivial) u otro formato sin formato y luego simplemente juegue 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 aliméntelos al DAC.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas