2011-03-12 15 views
8

He estado trabajando en una configuración de detección de frecuencia simple en el iphone. El análisis en el dominio de frecuencia utilizando resultados de FFT ha sido poco fiable en presencia de armónicos. Esperaba usar los resultados de Cepstrum para ayudar a decidir qué frecuencia fundamental se está reproduciendo.Limpiar resultados ruidosos de Cepstrum

Estoy trabajando con AudioQueues en el marco de AudioToolbox, y hago las transformadas de Fourier usando el marco Accelerate.

Mi proceso ha sido exactamente lo que figura en el artículo Cepstrum de la Wikipedia para el Real Power Cepstrum, específicamente: señal → FT → abs() → cuadrado → log → FT → abs() → cuadrado → cepstrum.

El problema que tengo es que los resultados de Cepstrum son extremadamente ruidosos. Tengo que soltar los primeros y últimos 20 valores ya que son astronómicos en comparación con los otros valores. Incluso después de "limpiar" los datos, todavía hay una gran cantidad de variación, mucho más de lo que esperaría dado el primer gráfico. Vea las imágenes a continuación para las visualizaciones del dominio de frecuencia y el dominio de quefrency. FFT FFT Cepstrum Cepstrum

Cuando veo un claro ganador como en el dominio de la frecuencia como en ese gráfico, espero ver un resultado igualmente clara en el dominio quefrency. Jugué A440 y esperaba que bin 82 tuviera la mayor magnitud. El tercer pico en el gráfico representa bin 79, que es lo suficientemente cerca. Como dije, los primeros 20 o más contenedores son de una magnitud tan astronómica que no pueden ser utilizados, y tuve que eliminarlos del conjunto de datos para poder ver algo. Otra cualidad extraña de los datos del cepstrum es que los compartimientos pares parecen ser mucho más altos que los bins impares. Aquí están los contenedores de frecuencia de 77-86:

77: 151150.0313 
78: 22385.92773 
79: 298753.1875 
80: 56532.72656 
81: 114177.4766 
82: 31222.88281 
83: 4620.785156 
84: 13382.5332 
85:  83.668259 
86: 1205.023193 

Mi pregunta es cómo limpiar el dominio de la frecuencia para que mis resultados de dominio Cepstrum no son tan salvajes. Alternativamente, ayúdeme a entender mejor cómo interpretar estos resultados si son como uno esperaría en un análisis de Cepstrum. Puedo publicar ejemplos del código que estoy usando, pero en su mayoría usa llamadas vDSP y no sé qué tan útil sería.

+1

Es posible que desee probar la aplicación de una función de ventana antes de la primera FFT. –

+1

Pasé la mayor parte de la mañana tratando de entender por qué tanta gente lo sugiere. No es obvio por qué una función de ventana mejorará las transformaciones. No entendí la fuga espectral hasta ahora, y creo que eso está contribuyendo al desorden. ¡Gracias por el consejo! – brodney

Respuesta

3

Un cepstro, o análisis cepstral, es una técnica utilizada para tratar de separar una señal con alto contenido armónico en dos partes. La porción cercana a DC representa la envolvente espectral de todos los armónicos, o el formante del habla, que podría ser útil para el reconocimiento de hablantes o instrumentos. Los picos posteriores en el resultado cepstrum representan la frecuencia o frecuencias del excitador, si esa frecuencia genera suficiente contenido armónico de armónicos.

Dado que un cepstrum generalmente se realiza sin ninguna ventana (no rectangular), puede producir una respuesta Sinc incluso a una secuencia de armónicos clara, con el ancho de la respuesta inversamente aproximado a la duración de la secuencia de armónicos o número de armónicos Y, por supuesto, cualquier sobretono ligeramente inarmónico (como el que se encuentra en los instrumentos musicales reales) hará que los resultados del cepstrum sean aún más confusos. Por lo tanto, un pico de cepstrum solo puede ser bueno para darle a uno la ubicación aproximada de la frecuencia fundamental, lo que aún podría ser un resultado útil al rechazar otros candidatos de frecuencia al hacer una estimación de frecuencia.

Un cepstrum "de aspecto limpio" podría ser el resultado de una secuencia muy larga de armónicos armónicos con una respuesta de frecuencia casi plana, que tal vez no sea la que se encuentra en las señales de la vida real.

+0

Por lo tanto, no es realista intentar limpiar los resultados de Cepstrum. ¿Es común tirar el primero y el último varios contenedores? ¿Hay alguna otra técnica de clarificación que pueda usar? – brodney

+0

@ fast4ear: los contenedores cerca de DC contienen información sobre el formante. Si no le importa la forma del formante, es posible que no necesite la información en esos contenedores. – hotpaw2

+0

Así que si estoy muestreando a 44100Hz y tengo una muestra de 4096 bin, y estoy interesado en 440Hz, buscaría en bin 82 ((22050/4096) * 82) en el dominio de la frecuencia. ¿Debo también buscar en bin 82 en el dominio de quefrency? ¿O buscaría en bin 50 (22050/440)? – brodney

1

Si entiendo bien, el problema principal es detectar una frecuencia de una señal de audio.

Seguro que decir de la mejor frecuencia en el espectro de lo que sugiero utilizar este excelente biblioteca http://www.schmittmachine.com/dywapitchtrack.html

"El corazón del algoritmo es un algoritmo muy potente tren de ondas, que se describe en un artículo de Eric Larson y Ross Maddox: "Seguimiento de tono de dominio de tiempo en tiempo real usando Wavelets" de UIUC Physics ".

Esperanza esta ayuda

+0

¡Gracias por agregar esta respuesta! Otra herramienta en la caja de herramientas siempre ayuda, especialmente para un problema tan difícil. Lo verificaré esta noche y responderé con los resultados. – brodney

+0

Es un algoritmo bastante impresionante. Probé usando un piano digital usando muestras de Steinway y era razonablemente preciso entre C2 y C5. Neat find, gracias de nuevo por compartir. – brodney

2

El siguiente análisis ilustra el rendimiento del cepstrum en las señales sintéticas y del mundo real.

Primero examinamos una señal sintética.

El siguiente diagrama muestra una nota sintética de estado estacionario E2, sintetizada usando una componente típica de CC cercano, una fundamental a 82,4 Hz y un total de 8 armónicos a múltiplos enteros de 82,4 Hz. La sinusoide sintética se programó para generar 4096 muestras.

Synthetic E2 note spectrum

La trama abajo muestra un primer plano de la entrada que se utilizó para el cálculo de la nota Cepstrum E2 sintético. Es el resultado log (| FFT |^2) de la nota sintética E2.

Cepstrum input: synthetic E2 note's spectrum

La trama siguiente muestra la Cepstrum de la nota E2 sintético. Observe el pico no DC prominente a las 12.36. El ancho de Cepstrum es 1024 (la salida de la segunda FFT), por lo tanto, el pico corresponde a 1024/12.36 = 82.8 Hz, que está muy cerca de los 82.4 Hz reales de la fundamental.

Synthetic E2 note cepstrum closeup

examinamos ahora una señal del mundo real.

El siguiente diagrama muestra el espectro de la nota E2 de una guitarra acústica real.

Guitar E2 note spectrum closeup

La siguiente gráfica muestra un primer plano de la entrada que se utilizó para el cálculo de la nota cepstrum E2 de la guitarra acústica. Es la salida de registro (| FFT |^2) de la nota E2 de la guitarra acústica.

enter image description here

La siguiente gráfica muestra el cepstrum de la nota E2 de la guitarra acústica. Observe el pico no DC prominente en 542.8. El ancho de Cepstrum es 32768 (la salida de la segunda FFT), por lo tanto, el pico corresponde a 32768/542.8 = 60.4 Hz, que está bastante lejos de los 82.4 Hz reales de la fundamental.

Guitar E2 note cepstrum closeup

La grabación de la nota de guitarra E2 utilizado para este análisis fue muestreada a 44,1 KHz con un micrófono de alta calidad bajo condiciones de estudio, que contiene esencialmente cero ruido de fondo, y no hay otros instrumentos o voces.

Esto ilustra el importante desafío de utilizar el análisis Cepstral para la determinación de tono en señales de audio del mundo real.

Referencias:

datos de la señal de audio real la producción sintética de la señal, parcelas, FFT, y análisis cepstral se realizaron aquí: Musical instrument cepstrum

+0

Sus gráficos lo resumen bastante bien. Abandoné el cepstrum porque es intratablemente ruidoso tomar una decisión algorítmica. – brodney