Algoritmos a palo seco

Nox
#16 por Nox el 15/05/2012
#15 Sí, esa era la pregunta precisamente, que si calculas la frecuencia con el tiempo que retardas la señal... no me expresé bien, lo de la síntesis pulsar me ha dado tantos dolores de cabeza que me he acostumbrado a pensar solo en samples y frecuencias para ahorrarme cálculos.

Supongo que el peso del algoritmo está en cómo acercarte a la frecuencia correcta, como si fuera una búsqueda en una lista, solo que aquí el mismo valor de la autocorrelación debería darte pistas sobre hacia donde moverte, por que en pura teoría, mientras más te acerces a la frecuencia correcta más cercana sería la autocorrelación a 1, ¿no?

Saludos.
Subir
OFERTAS Ver todas
  • -7%
    Modal Argon8 (B-Stock)
    559 €
    Ver oferta
  • -29%
    Behringer X-Touch Compact
    263 €
    Ver oferta
  • -50%
    NI Komplete 15 Collector's Edition
    885 €
    Ver oferta
vagar
#17 por vagar el 15/05/2012
Nox escribió:
solo que aquí el mismo valor de la autocorrelación debería darte pistas sobre hacia donde moverte, por que en pura teoría, mientras más te acerces a la frecuencia correcta más cercana sería la autocorrelación a 1, ¿no?


Es bastante más complejo, no hay ninguna pista a no ser que tengas información a priori sobre la señal que vas a analizar.

Por ejemplo, la señal no tiene por qué ser muy periódica, por lo cual no puedes presuponer que el valor va a estar necesariamente cerca de 1 (supongo que dices 1 porque consideras señales normalizadas a fondo de escala). Por ejemplo, un ruido, una señal con transitorios poco armónicos, o una señal armónica pero modulada en frecuencia darán máximos de autocorrelación bastante bajos.

Tampoco puedes presuponer que la autocorrelación no vaya a tener máximos locales que te dificulten encontrar el máximo absoluto.
Subir
Roberto Aramburu
#18 por Roberto Aramburu el 15/05/2012
Nox escribió:
por ejemplo me llamó la atención lo de filtrar la señal moduladora en síntesis FM, dándole resonancia, da resultados interesantes. No se por qué no lo hice al final (se me olvidaría), pero en http://en.wikipedia.org/wiki/FM_synthesis sale algo interesante que yo desconocía: una fórmula que relaciona la cantidad de modulación aplicada a la onda carrier, con la frecuencia de la onda moduladora: I=d/Fm. Siguiendo esa fórmula consigues ajustes en los armónicos muy precisos sin tener que usar 15 knobs.


Después de un tiempo he visto que se obtienen resultados más interesantes utilizando una envolvente en la señal moduladora.
Lo que he estado tratando de descifrar son los algoritmos del FM7 que según el libro Computer Music Tutorial utilizan Feedback FM en donde se obtiene un mayor control sobre el número de sidebands como comentas, el problema es que no se como trabajar feedback en pd sin congelar la computadora... aqui dejo un esquema del algoritmo Feedback FM básico aver si alguien me puede ayudar...
Archivos adjuntos ( para descargar)
feedbackfm.jpg
Subir
Nox
#19 por Nox el 15/05/2012
#17 Jum, interesante, era de prever, y es parecido a lo que me pasaba con las medias móviles.

La verdad es que yo vengo de estadística, inferencia, econometría. Al principio pensaba que las ondas serían parecidas a las series temporales, pero cada vez que doy un paso me resultan más diferentes, no sé si es por la periodicidad o simplemente por que en la práctica no puedes hacer lo mismo.
Por ejemplo lo de la correlación entre dos variables, para mí siempre fue casi como una media, algo que todos los software calculan por defecto, en segundo plano, y si se acercaba a 1 teníamos un problema :lol:
También esos máximos locales, cuando se dan en series estadísticas yo los llamo outliers (bueh, supongo que el concepto es análogo, no vaya a ser que alguien me corrija eso también :mrgreen: ), y la solución casi siempre era, simplemente, eliminarlos de la serie. Tampoco es lo mismo tener las series al completo, graficadas y con un conocimiento sobre las características de todas ellas, que una señal de audio desconocida que tienes que analizar a tiempo real.

En fin, que me lío, la coña es que también por este tipo de cosas abrí el hilo, mola ;)

#18 Pues solo veo una razón para que se te cuelgue el ordenador. Entiendo que mientras más se acerque Beta a 1, más feedback va a llegar al oscilador, si lo acercas demasiado puedes llegar a tener un bucle infinito, lo cual se comería la CPU y todo lo que coja; en ese caso la solución sería obvia: no permitir que Beta supere un número previamente fijado por ti a base de prueba y error, por ejemplo establecerlo entre 0 y 0.80, o 0 y 0.90. Si quieres que Beta venga determinado por un knob entre 0 y 1 (para facilitar el manejo del sinte), también puedes multiplicar la señal de feedback por una constante decimal antes de que llegue a Beta, osea, en medio de la línea de la derecha que sube.

En cualquier caso, se trataría de controlar la cantidad de feedback que llega al oscilador... todo esto suponiendo que pd no tenga algo específico para tratar con el feedback, ya sabes que yo hablo desde mi experiencia con reaktor, un programa que se lleva fatal con los bucles en general, pero con el feedback en particular solo hay que caparlo como te comento y listo ;)

Es curioso lo de la envolvente que comentas, ya he tenido que usarlo en el hilo de Recrear sonidos de sintes clásicos del foro de sintetizadores para recrear bajos del DX7: creas un enorme transitorio de armónicos al principio que baja rápidamente a un nivel más musical. Manejando con cuidado la envolvente salen unos bajos impresionantes, incluso yo creo que sirve para simular slap.

Saludos.
Subir
Dan_Vates
#20 por Dan_Vates el 15/05/2012
Ardot Adot escribió:
el problema es que no se como trabajar feedback en pd sin congelar la computadora...


Podrías poner una imagen de tu patch? Tal vez así podría ayudarte con eso.
Pon una imagen y explica mas o menos que te pasa o por qué crees que se congela.
Probablemente podamos resolverlo, sino, de todos modos podría preguntar a alguno de mis profesores el lunes.
Subir
Dan_Vates
#21 por Dan_Vates el 17/05/2012
Viendo el ejemplo que puso Ardot hice un patch que tal vez pueda servir.

Lo seguí casi literalmente.
Para evitar problemas siempre es bueno darle una amplitud independiente a los feedbacks, de esta forma tenemos mas control sobre ellos.
En general hay que evitar conectar directamente una salida a una entrada, una solución posible es usar los objetos [s~] y [r~] como en el ejemplo que subo, también se puede hacer con delays (con estos sobre todo hay que tener ojo de darles una amplitud propia).

Al lado izquierdo hay una FM simple para que puedan comparar la modificación de esta, si uno deja el feedback en cero el comportamiento es igual que el de la FM simple.

De todos modos me gustaría ver el patch de Ardot para ver si encontramos el problema en él, recordemos que en este tipo de plataformas hay muchas formas de hacer lo mismo y sería bueno ver cual es la de Ardot.

Ante cualquier duda gustoso respondo, si por otro lado descubren que hay algún error, por favor díganmelo para ver como lo corregimos.

Espero que te sirva.

P.S. De todos modos si quieres tener un mayor control sobre las bandas laterales puedes echarle un ojo a las funciones de Bessel.
Archivos adjuntos ( para descargar)
FM_.png
Subir
Roberto Aramburu
#22 por Roberto Aramburu el 17/05/2012
Eres un genio Dan_Vates!! Mi problema era el tratar de sacar la señal del carrier para regresarla y crear feedback y siempre que conectaba la salida era directamente con un cable y me aparecía un error de DSP loop y se apagaba el sonido automáticamente, nunca se me ocurrio utilizar sends y receives...
Aqui hice una versión utilizando un solo oscilador tratando de apegarme al esquema que puse anteriormente y me suena a que si, aver que les parece...
Si esta correcto creo que al fin podre seguir leyendo el computer music tutorial :yuju:
Te agradezco el haber puesto esto, haz resuelto mi problema :)
Archivos adjuntos ( para descargar)
feedback.png
Subir
Dan_Vates
#23 por Dan_Vates el 17/05/2012
Probé tu ejemplo y me llama la atención el que produzca un resultado tan inestable, no digo que esté mal pues no lo está, sólo que no entiendo bien por qué se produce ese resultado.

Un detalle , le das una amplitud a [s~] y luego otra a [r~] puedes eliminar una de las dos multiplicaciones pues son la misma, en ambas estás dándole amplitud al feedback, sólo que en una se la das al enviar y en otra al recibir, pero si imaginas los [s~] y [r~] como un cable vas a tener una misma señal con 2 multiplicaciones de audio, cosa que en sí es contraproducente.

Lo otro es simplemente un consejo, para evitar clipeos al cambiar al amplitud que llega al [dac~] puedes usar una caja numérica conectada a un [pack 0 80] que llegue a un [line~] y de ahí al [dac~], esto "suaviza" el paso de una amplitud a otra y evita los clipeos por cambios de intensidad.
(el número entra a un [pack 0 80] lo que hace una lista como lo que sería un mensaje para el [line~] con una rampa de 80 milisegundos que llega al [dac~] sin saltos).
Subir
Roberto Aramburu
#24 por Roberto Aramburu el 17/05/2012
Si tienes razón, ya quité uno de los [*~] para [r~] y sigue estando inestable, parece que al darle valores altos al index se quiebra y se vuelve una maraña de ruido lo cual no me desagrada hehehe pero no creo que sea FFM :(
En cuanto a lo que me dices de los clipeos eso fue lo que quize hacer con [sig~], también trata de evitar clipeos pero ciertamente no es tan efectivo como usar [pack] y [line]. Por lo general uso [sig~] cuando voy a mover un valor manualmente y utilizo [line~] cuando le meto un [random] con un [metro] con valores muy pequeños y se que los valores se van a mover rapidamente.

Tendrás alguna lectura sobre las funciones de bessel? Creo que esto del feedback no me dará buenos resultados, aunque ya se una buena técnica para crear ruido iijiijijijij
Gracias otra vez Dan_Vates!
Subir
Roberto Aramburu
#25 por Roberto Aramburu el 18/05/2012
Vengo de regreso, agregué un filtro antes de regresar la señal al oscilador y al parecer hace todo el proceso más estable. Alguien en el foro de pure data me había comentado que agregar filtro impide que el feedback oscile, tal vez por eso se ponía inestable....

Hay que jugar entre la frecuencia de corte, el index y la frecuencia del oscilador, al parecer mientras más suba la frecuencia de corte se vuelve más estable, lo cual solo me dice que debe de haber una ecuación para mantener la relación entre estos 3. En el foro de pd me dicen lo siguiente
"It is filtered in the DX7, as in y(t) = 0.5(x(t)+x(t-1)). But you could probably filter it more to permit stronger feedback without oscillation. "

No he usado la ecuación que me dan, (no sabría como implementarla) pero con tan solo subir la frecuencia de corte del filtro, como me recomiendan en el foro, se vuelve cada vez más estable y me alejo más del caos... Creo que esta vez si es la buena... que me dices Dan_Vates...
Archivos adjuntos ( para descargar)
Imagen 2.png
Imagen 3.png
Subir
Roberto Aramburu
#26 por Roberto Aramburu el 23/05/2012
el famoso filtro que me mencionan con la expresión y(t) = 0.5(x(t)+x(t-1)).
se utiliza con [fexpr~]
por eso no sonaba correctamente y cuando me decían filtro pensaba en audio como low pass, hi pass... en fin, aprendí a utilizar [fexpr~] más que sobre sintesis fm haha... el que tenga curiosidad y sepa inglés puede googlear "A General Filter Design Language with Real-time
Parameter Control in Pd,Max/MSP, and jMax" y bajar un pdf donde explica todo.

saludos!
Subir
brote
#27 por brote el 02/06/2012
Hola Ardot,

en realidad la expresion y(t) = 0.5(x(t)+x(t-1)), corresponde a la de un filtro pasabajos, lo que hace es suvizar la señal mediante medias de cada dos muestras. En este caso es de orden bajo, si quieres mayor pendiente deberias coger mas medias.
Es muy interesante tu patch, voy a provarlo y provaré el objeto fexp que hace poco queria aplicar una distorsion harmoica sobre una senoide y lo prove con exp pero no funciono.

Por cierto, el tema de la convolución es muy interesante y da muchos recursos, pero requiere de muchos calculos, pues es una multiplicación punto a punto. Le llaman media movil, por que la señal se va desplazando sobre el filtro y se hace la media para cada muestra y por que al fina y al cabo es una integral. Normalmente en el procesado de señal se aconseja multiplicar espectros en dominio frequencial, que es un unico computo, aunque ahi ya entras en FFT o STFT que puede ser más peliagudo si no conoces.

Os dejo un link con un applet donde podeis ver que la convolución no es más que un filtro en dominio temporal y que sugiere varias aplicaciones, ya que puedes obtener IRs de sala, de previos, compresores, microfonos y que puedes aplicar a la gracias a la convolución. Eso si en dominio frequencial, mucho mejor.

http://www.jhu.edu/signals/convolve/

Con este applet lo entendí cuando tenia que dibujarlas en transmisión, haciando integración por partes, pfff que recuerdos!...escoges una forma de onda en la primera sección y en la parte inferior arrastras la señal con el raton hasta que atraviese el filtro de convolución, puedes ver el resultado en la ventana inferior.

Salut!
Subir
Roberto Aramburu
#28 por Roberto Aramburu el 03/06/2012
brote!

Efectivamente casi todo lo que acabas de decir me sonó a chino mandarin y casualmente acabo de llegar a la sección de filtros en el libro computer music tutorial y me di cuenta de que viene la misma expresión y justamente explica lo que me comentas, que es un filtro pasabajo. Desgraciadamente solo he llegado hasta integrales en matemáticas así que el tema de filtros, convolución, FFT siguen siendo un misterio para mi... de todos modos gracias por el aporte, estoy seguro que en un par de años entenderé tu post :) (sin sarcasmo, realmente espero lograrlo)

Saludos!
Subir
brote
#29 por brote el 04/06/2012
Hola Ardot!

# 28

Desgraciadamente solo he llegado hasta integrales en matemáticas así que el tema de filtros, convolución, FFT siguen siendo un misterio para mi... de todos modos gracias por el aporte, estoy seguro que en un par de años entenderé tu post :) (sin sarcasmo, realmente espero lograrlo)

Estoy convencido de que lo lograras si pones interes, lo siento si me he excedido en conceptos, he leido el post y he visto que comentabais sobre ello por eso me parecio interesante postear. Igualmente si tuvieras cualquier duda no dudes en preguntar. Hace poco que le doy a pd y me hizo mucha gracia el patch que proponias, pues tengo un DX. Por cierto con los retoques de Dan Vates funciona que da gusto, no se cual es el diseño que propone el Computer Music Tutorial, pero por mi parte le he añadido un LPF a la salida que le da mucho más juego y lo hace mas fiel al sonido del DX. Dejo una captura por si alguien le interesa chequearlo.

Salut!
Archivos adjuntos ( para descargar)
Captura de pantalla 2012-06-04 a las 18.22.04.png
Subir
Nox
#30 por Nox el 04/06/2012
#27 Brote, una preguntita. Esa expresión efectivamente es una media móvil, yo usaba medias móviles en estadística y econometría para hallar tendencias en series temporales, pero no sabía que un filtro se podía hacer con medias móviles.
Osea, de una manera "intuitiva" entiendo que si haces una media móvil tengas un filtro pasabajos, pero el resto de filtros (pasa altos, pasa banda, etc) ¿también se pueden hacer con medias móviles?

Me interesa bastante por que es un tema que domino y del cual tengo todavía páginas y páginas de temario de la universidad, me resultaría relativamente fácil ponerme al día.

Saludos.
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo