Algoritmo de efecto de distorsión digital

10

Leí el libro DAFX de Udo Zölzer sobre el efecto de distorsión en las páginas 124-125 y dice que la función proporciona una simulación adecuada de la distorsión:

F(X)=XEl |XEl |(1-miX2/ /El |XEl |)

¿Alguien puede explicar esta fórmula y qué tipo de señal recibimos?

Por lo que entiendo, 'x' es la señal muestreada, por lo que se trata de una secuencia de números. ¿Qué significa | x | ¿media? ¿Se refiere al valor absoluto de x para cada valor muestreado?

Entonces, si quiero implementar esta simulación del efecto de distorsión,

  1. Necesito saber la longitud de x (está dada por el número de muestras)
  2. En un bucle, necesito calcular esta fórmula para cada valor de muestra
  3. después de que finaliza el ciclo, obtengo la señal distorsionada (en forma digital)

Después de eso, necesito convertirlo a una señal analógica para poder escucharlo.

Elior
fuente
2
Tenga en cuenta que hay un error en la fórmula dada en el libro (debe haber un signo negativo en el exponente). Vea mi respuesta a continuación.
Matt L.

Respuestas:

5

| x | denota el valor absoluto: la x / | x | parte de la fórmula está ahí para asegurarse de que el signo de la entrada se conserva en la salida. Con respecto a la implementación, sí, los pasos que ha enumerado son correctos.

pichenettes
fuente
1
¿Qué quieres decir con "distorsión real"? ¡Absolutamente cualquier operación que realice en la señal original sería distorsión de todos modos! ¿Que estás tratando de hacer?
pichenettes
1
Distorsión es un término muy vago que describe cualquier transformación (generalmente no deseada) que altera la señal. La distorsión de la guitarra se logra mediante muchos procesos diferentes (recorte, rectificación, sobrecarga), dependiendo del tipo de pedal / amplificador en el que ocurre, no existe una fórmula "verdadera" única ... Parece que la fórmula que tiene dará función de tipo sigmoide que simularía la sobrecarga; pero creo que podría haber un error en alguna parte.
pichenettes
1
Tienes que hacer esto en el dominio del tiempo.
pichenettes
1
Porque así es como funcionan los efectos de distorsión de guitarra. Originalmente se hicieron con elementos no lineales como tubos, diodos y transistores posteriores cuyo comportamiento se describe en el dominio del tiempo mediante una función no lineal. Y estás tratando de emular eso digitalmente ...
pichenettes
1
El cambio de tono, el generador de armonías elegantes (por ejemplo, EHX micro pog) o la transformación espectral elegante (no puedo recordar el nombre del producto) requieren procesamiento de dominio de frecuencia. Algunos simuladores de amplificadores / altavoces requieren largas convoluciones, que se realizan de manera eficiente mediante multiplicaciones en el dominio de la frecuencia. Pero en cualquier caso, NUNCA es "tomar la FFT completa de la señal"; esto se implementa mediante la superposición-adición de FFT de longitud pequeña (1024 muestras más o menos).
pichenettes
9

Gracias a la trama en la respuesta de Olli Niemitalo, me convencí de que la fórmula dada en el libro tiene un error de signo. La no linealidad utilizada para fuzz o distorsión es siempre algún tipo de función de recorte suavizado, que comprime la señal de entrada. Por lo tanto, las amplitudes de entrada pequeñas experimentan pocos cambios, mientras que las amplitudes de entrada altas se recortan (más o menos) suavemente. Y la figura que se muestra en la respuesta de Olli hace exactamente lo contrario.

Así que estoy convencido de que la fórmula correcta debería ser

(1)F(X)=XEl |XEl |(1-mi-X2/ /El |XEl |)=sgn(X)(1-mi-El |XEl |)

Para valores pequeños de tenemos f ( x ) sgn ( x ) | x | = x , y para valores grandes (magnitud) obtenemos f ( x ) sgn ( x ) , es decir, recorte.XF(X)sgn(X)El |XEl |=XF(X)sgn(X)

F(X)

ingrese la descripción de la imagen aquí

(1)X/ /El |XEl |X2/ /El |XEl |X

si (x> 0)
   y = 1 - exp (-x);
más
   y = -1 + exp (x);
final
Matt L.
fuente
Ah, sí, el libro cita erróneamente web.archive.org/web/20070826204128/http://www.notam02.no/… y lo anterior es la fórmula correcta.
Olli Niemitalo
OK gracias. ¿Crees que esta fue la fuente del libro?
Matt L.
Sí, el libro hizo referencia a esa tesis de estudiante. Hubo una segunda tesis de estudiante noruego que tenía la fórmula incorrecta y citó la primera tesis de estudiante. No me molesté en verificar las fechas para ver si el libro copiaba la segunda tesis sin verificar la fuente original o si la segunda tesis copiaba el libro.
Olli Niemitalo
1
X2/ /El |XEl |
2

Puede escribir el cuerpo de la función directamente en Wolfram Alpha y lo traza:

ingrese la descripción de la imagen aquí

A mí me parece una forma de onda , y esas se pueden usar como usted describe.

Olli Niemitalo
fuente
1
Ahora que veo su argumento, estoy bastante convencido de que la fórmula del libro está equivocada. Mira mi respuesta. ¿Qué piensas?
Matt L.
2
@ MattL. Sí, eso tiene mucho más sentido. La función del libro también está descendiendo, lo que causaría una inversión de fase no deseada.
Olli Niemitalo