consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Maila Scheffer -
Número de respuestas: 10

Hola, estoy realizando la tarea 4, y  la pregunta dos, del tercer tema no la estaria pudiendo calcular:

Calcular la frecuencia fundamental (f0):

a) como la frecuencia del primer pico de la serie armónica , ¿en este caso habria que poner en el comando at=1?

b) usando la función fund y compare con la anterior

quise probar el comando que estaba en la diapo de sheep, pero me esta pidiendo r, un valor de f, que por lo que vi en el libro es la tasa de muestreo ( en este caso es 44100), pero no lo estaría aceptando, me da error.

fund(fspec, f=44100, at=center, plot=FALSE)

Error in wave[(c - WL):(c + WL), ] : subíndice fuera de  los límites

Después en el libro, agrega un valor de fmax, que me cuesta interpretar ¿porque elige 2000 Hz al archivo peewit, al momento de analizar la frecuencia fundamental?


espero que se haya entendido mis preguntas


saludos




En respuesta a Maila Scheffer

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Franco Bostal -
Hola Maila:
Yo resolví a con localpeaks, que nos permite detectar picos en ciertas bandas de frecuencia. Con el argumento bands podes establecer las franjas; en este caso yo puse una sola franja así me detectaba solo el primer pico:
frec.fund.a<-localpeaks(fsc512, bands=c(0, 2))
Con respecto a b, el problema que creo que tenes es con el argumento wave (el primero). Vos pusiste fspec, pero tenes que poner un objeto de clase wave:
frec.fund.b<-fund(peewit4, at=centro, plot=FALSE)

Espero que te sirva
Abrazo
En respuesta a Franco Bostal

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Lucia Graciela Ziegler Brener -
Hola Maila,
Para hallar la f0 con fpeaks es necesario usar un objeto de tipo spec. No hay argumento "at" en esta función. Pero en la clase utilizamos el argumento nmax que nos da una cierta cantidad máxima de picos, que además son los de mayor amplitud.
Por otra parte, si miras en la ayuda de la función "fund", vas a ver que el único argumento necesario es el archivo .wav
Por lo que el primer argumento no puede ser fspec, que es en si un objeto creado por nosotros en R y si haces class(fspec) vas a ver que te dice "Matrix" "array".
Marcar la posición no es un argumento obligatorio, pero en este caso lo hacemos con at=center para seguir obteniendo los datos de la misma porción de audio en la que venimos trabajando.

Es muy importante que usen la ayuda de R, porque ahí pueden ver los argumentos necesarios, la clase a la que pertenecen, cuales son los argumentos opcionales etc.

Espero que esta respuesta te ayude en la tarea. Saludos,

lucia
En respuesta a Franco Bostal

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Martin Rocamora -
Hola Maila y Franco. Me alegro que aprovechen el foro para preguntar e intercambiar entre ustedes. A continuación algunos comentarios.

a) Como dice Franco, usar localpeaks es una opción. Pero también podrían usar simplemente fpeaks, que es una función un poco más sencilla. El atributo "at" se usa al calcular el espectro, con la función "spec", e indica el punto en el tiempo en el que se calcula el espectro. Para controlar la cantidad de puntos detectados existe el atributo "nmax", de la función fpeaks. No se si te sirve la aclaración. Hay que explorar los parámetros que recibe cada función, con "help(nombre_de_función)". Y además les recomiendo ver los ejemplos de las transparencias y del libro.

En resumen, el procedimiento para calcular los picos del espectro es el siguiente:
1) Cargar un archivo de audio
Con la función "data" si es un archivo de la biblioteca, o con "readWave" si es un archivo .wav
2) Calcular el espectro
Con la función "spec". Pueden ajustar varios parámetros, como el largo de la ventana y el instante de tiempo donde se ubica esa ventana.
3) Detectar los picos
Con la función "fpeaks" o con "localpeaks", pero con "fpeaks" debería ser suficiente para el ejercicio.
También pueden ajustar varios parámetros para controlar la cantidad de picos detectados (vean las transparencias y el libro).
Tengan presente que esta función recibe como parámetro de entrada el espectro calculado en la parte anterior.

b) Como bien dice Franco hay un error en los argumentos que le estás pasando a la función "fund". Fijate que recibe un objeto del tipo wave (el que obtenemos en el punto 1 de mi anterior respuesta). Para ver lo que deberías pasar como parámetro te sugiero usar la ayuda de R, "help(nombre_de_función)".

En este caso dice lo siguiente (copio solo lo relevante para los parámetros que te generan dudas):
fund(wave, f, ..., fmax = f/2, ...)
wave - an R object.
f - sampling frequency of wave (in Hz). Does not need to be specified if embedded in wave.
fmax - the maximum frequency to detect (in Hz).

Ahí se puede ver que el primer argumento es un objeto R y si bien no lo especifica tiene que ser un "wave" como indica su nombre. Luego el argumento "f" corresponde a la frecuencia de muestreo. Verás que aclara que no es necesario especificarlo si está indicado en el archivo de audio, lo cual es lo habitual. Por último, "fmax" es la frecuencia máxima a considerar como candidato para la detección de f0. Es decir, la función va a devolver una frecuencia fundamental por debajo de este límite. Esto tiene sentido para que el cálculo de f0 sea más rápido y para evitar posibles errores, pero no es necesario especificarlo en todos los casos. Por defecto se usa el valor fmax=f/2, es decir la mitad de la frecuencia de muestreo, por lo que se considera todo el espectro. Recuerden que una señal digital muestreada a una frecuencia de muestreo f puede tener componentes de frecuencia hasta la frecuencia de Nyquist, es decir f/2.

Espero que haya aclarado.

Saludos
En respuesta a Martin Rocamora

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Maila Scheffer -

Hola! Gracias a todos por la ayuda, el b lo pude resolver con el objeto poniendo peewit4, lo que no me queda claro, el a, porque pareciera como  parte del ejercicio anterior, si realizamos la función fpeaks y los argumentos, para detectar solo el primer pico, te tiraria un plot? y  a partir de eso observo el primer pico?

desde ya muchas gracias de nuevo

En respuesta a Maila Scheffer

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Rocio Bahia -
ay gracias! me habia saltado el mismo error con el tema del .wave.
No lo hice como pone franco, no se me ocurrió... me resultó mas simple con el fpeaks y luego fui ajustando los argumentos. Para el b y respecto a lo que preguntabas, creo q determina 2000 Hz porque estiman que la frecuencia fundamental no superaría ese valor. Como me había pasado lo mismo que a vos probe haciendo :
fund(peewit, at=center, fmax=2000, plot=FALSE)
y usé esa frec máxima que era la misma que el libro recomendaba. Haciendolo asi no me detecto ningun problema...
En respuesta a Maila Scheffer

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Martin Rocamora -
La función fpeaks devuelve una lista de los picos detectados, con el valor de frecuencia y amplitud para cada uno de ellos. Si consultan esa lista pueden determinar el valor de frecuencia del primer pico.
En respuesta a Martin Rocamora

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Maila Scheffer -

ah bueno , estaba haciendo eso, con la funcion localpeaks como me dijo Franco, me da otro valor distinto. ¿ es el primer valor de la lista cuando consultamos fpeaks?

el tercer ejercicio, cuando tenemos que comparar la f0 y fd, ahi podemos poner el siguiente comando como este, que aparece en el libro  :

fspec <- spec(Peewit, at=center, plot=FALSE) # frequency spectrum

p <- fpeaks(fspec, nmax=3, plot=FALSE) # frequency peaks

d <- diff(p[,1], differences=2) # second derivative

sum(d)

y dependiendo de cuanto me de la suma total, puedo definir si estan en relacion armonica o no?

ese valor de nmax, es en relacion al punto anterior que teniamos que considerar el numero de picos detectados?


perdón si hago muchas preguntas, pero me cuesta bastante aplicar la física del sonido y R.


En respuesta a Maila Scheffer

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Martin Rocamora -
Hola Maila. En la parte 2 se pide lo siguiente:

2) Calcular la frecuencia fundamental (f0):
a) como la frecuencia del primer pico de la serie armónica
b) usando la función fund y compare con la anterior

Por lo que para la parte a) alcanza con reportar la frecuencia del primer pico. Y para la parte b) hay que usar la función fund.

En la parte 3 se pide comparar el valor de f0 y fd, indicando si son frecuencias en relación armónica. Para eso no es necesario programar, simplemente hay que verificar si una es aproximadamente un múltiplo entero de la otra, es decir un armónico. ¿Son frecuencias en relación armónica?

Espero que haya aclarado.

Saludos
En respuesta a Martin Rocamora

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Maila Scheffer -

Gracias Martin, a mi me parece que la frecuencia fundamental ademas de ser distinta a la frecuencia dominante, el valor no esta dentro de los picos detectados por fpeaks. La frecuencia fundamental me da:

          x        y

[1,] 0.37 1.191892


y la frecuencia dominante:

Freq               Amp

2.2394531 1.0000000000


Los primeros 6 picos detectados:

 freq          amp

 [1,]  0.5167969 0.0153307735

 [2,]  1.1197266 0.4901355583

 [3,]  1.6365234 0.0514391684

 [4,]  2.2394531 1.0000000000

 [5,]  2.4978516 0.1019013467

 [6,]  2.7562500 0.1435550224




En respuesta a Maila Scheffer

Re: consulta- FRECUENCIA DOMINANTE Y FUNDAMENTAL

de Martin Rocamora -
Hola Maila, creo que estás confundida con lo de que el valor de la frecuencia fundamental no está dentro de los picos detectados por fpeaks. El segundo de los picos detectados tiene una frecuencia muy cercana a f0 (1.119 vs 1.191). También ocurre que estás detectando 6 picos, cuando solo hay unos 3 o 4 de interés. En particular, la amplitud del primero y del tercero son muy bajas. Te conviene ver estas cosas en la gráfica que devuelve fpeaks, para identificar cuáles son picos verdaderos y cuáles son picos espúreos. Saludos