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.
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.
Jim Dearden
Eugenio Sh.
Trevor_G
Eugenio Sh.
Trevor_G
Eugenio Sh.
Trevor_G
Eugenio Sh.
chris stratton
jimmyb