Karplus Strong - obtener un desplume de una frecuencia particular

2

Por lo que últimamente he estado observando una implementación en Python del algoritmo Karplus Strong, o más particularmente del sistema:

\ $ y [n] = \ alpha y [n-M] + x [n] \ $

Por lo que entiendo, se supone que \ $ x [n] \ $ es una señal definida desde 0..M-1 y 0 en cualquier otra parte. También \ $ y [n] = 0 \ para todos n < 0 \ $

Ahora si empezamos \ $ x \ $ con un ruido de entrada aleatorio de M muestras, entonces obtendremos una señal de frecuencia fundamental M del sistema anterior.

Para simular un acorde de guitarra de las siguientes notas: D4, A4, D4, E4 ... Uno calcula las frecuencias requeridas como: \ $ 440 \ veces 2 ^ \ frac {n} {12} \ $ donde n sería el número de medios tonos entre A4 y el armónico requerido.

Ahora las fuentes a las que me he referido, (por ejemplo, enlace ) Calcule la M (el búfer / retardo del sistema) como:

\ $ M = \ frac {F_s} {F_o} \ $ donde \ $ F_s \ $ es la frecuencia de muestreo, mientras que \ $ F_o \ $ es la frecuencia de la señal que me interesa (digamos D4)

Entonces, para \ $ F_s = 44100 Hz \ $ y \ $ F_o = 441 Hz \ $ luego \ $ M = 100 \ $

Este cálculo me confundió. Parece que ahora obtendré una señal cuya frecuencia fundamental es de 100 Hz, cuando necesitaba una señal cuya frecuencia fundamental era de 441 Hz. Entonces, según mi entendimiento, no debería ser M simplemente \ $ M = F_o \ $ que luego dará mi señal requerida.

Gracias: D

    
pregunta Dhruv Kapur

1 respuesta

1

Confunde la frecuencia normalizada con la frecuencia real (Hz). Wikipedia Normalized Frequency .

La ecuación para la frecuencia fundamental (\ $ f_0 \ $) dada la cantidad de unidades de retardo en la "cadena" (\ $ M \ $) debe ser \ $ f_0 = \ frac {F_s} {M} \ $, como dice el sitio web. Tenga en cuenta que el algoritmo Karplus Strong (formulado para una cuerda punteada) no es más que un filtro de retroalimentación combinado con una ráfaga de ruido, que tiene una respuesta de frecuencia: \ $ H (\ omega) = \ frac {1} {1- \ alpha e ^ {- j \ omega M}} \ $, donde \ $ \ alpha \ $ es el factor de escala de su ecuación de diferencia original.

Aquí está la gráfica de magnitud con \ $ \ alpha = .5 \ $ y \ $ M = 10 \ $:

Wolfram Alpha Plot

Tenga en cuenta que los picos están en \ $ \ omega = 0, \ pi / 5, 2 \ pi / 5 ... \ $ Esto implica que la frecuencia fundamental está en \ $ \ omega_0 = \ pi / 5 \ $, que corresponde a la frecuencia "real" de \ $ 44100/10 = 4410 \ $ Hz (suponiendo 44100 muestras / seg). Recuerde que el quinto armónico en este caso es \ $ \ omega_5 = 5 \ pi / 5 = \ pi \ $. Esto corresponde a lo que esperamos, el quinto armónico es 22050 Hz, la frecuencia más alta que podemos representar con una frecuencia de muestreo de 44100 muestras / seg.

Piense en lo que sucede en el dominio de la frecuencia: con el tiempo, el ruido de ruido inicializado (que parece bastante uniforme en frecuencia) se filtra por la respuesta armónica máxima del filtro, que produce los armónicos que espera para una cuerda pulsada.

    
respondido por el Zuofu

Lea otras preguntas en las etiquetas