¿Cuáles son buenas maneras de detectar el recorte de señal en una grabación?

32

Dada una grabación, necesito detectar si se ha producido algún recorte.

¿Puedo concluir con seguridad que hubo recorte si alguna (una) muestra alcanza el valor máximo de la muestra, o debería buscar una serie de muestras posteriores al nivel máximo?

La grabación se puede tomar de convertidores A / D de 16 o 24 bits, y se convierten en valores de coma flotante que van desde . Si esta conversión toma la forma de una división entre o , entonces, presumiblemente, los picos negativos pueden ser algo menores que -1, y las muestras con el valor -1 no se recortan.2 15 - 1 2 23 - 11...121512231

Obviamente, siempre se puede crear una señal específica para vencer el algoritmo de detección de recorte, pero estoy viendo grabaciones de voz, música, ondas sinusoidales o ruido rosa / blanco.

Han
fuente
8
Tenga en cuenta que el nivel de recorte no siempre es el máximo digital. Si el circuito analógico (o incluso el lado analógico del ADC) tiene un nivel de recorte ligeramente más bajo que el máximo digital, se recortará antes. Si se recorta en analógico y luego pasa por algún filtrado, ni siquiera será una línea recta. ¿Qué escenarios necesitas detectar?
Endolito
1
Las grabaciones se realizan con un dispositivo de sonido de PC (generalmente conectado a través de USB). Principalmente son respuestas a un barrido o estímulo MLS y se utilizan para calcular una respuesta de impulso de la habitación. No controlo el hardware, por lo que el recorte podría incluso ocurrir en la salida de estímulo. No pensé en eso antes, pero me alegra que lo hayas pensado.
Han

Respuestas:

30

Estaba escribiendo una respuesta exactamente igual que la de Yoda . Probablemente sea el más confiable, pero le propondré una solución diferente para que tenga algunas opciones.


Si toma un histograma de su señal, lo más probable es que tenga forma de campana o triángulo, dependiendo del tipo de señal. Las señales limpias tenderán a seguir este patrón. Muchos estudios de grabación agregan un efecto de "sonoridad" que causa un pequeño golpe cerca de la parte superior, pero aún así tiene un aspecto suave. Aquí hay un ejemplo de una canción real de un músico importante:

Histograma

Aquí está el histograma de señal que Yoda da en su respuesta:

Histograma sin recorte

Y ahora el caso de su recorte:

Histograma con recorte

Este método puede ser engañado a veces, pero es al menos algo para tirar en su bolsa de herramientas para situaciones en las que el método FFT no parece funcionar para usted o son demasiados cálculos para su entorno.

Kellenjb
fuente
2
Ese es un efecto increíblemente loco. Muy interesante.
Kortuk
Me alegra que hayas sugerido este método. Debería haberlo incluido yo mismo ...
PearsonArtPhoto
Digo eso específicamente porque este parece ser el método más implementable. Es una forma aplicada de las otras opciones dadas, pero parece que la señal de "error" es mucho más clara.
Kortuk
1
También podría tomar primero el valor absoluto de la señal y obtener un histograma unilateral más suave
endolito
Mis dedos están ansiosos por probar esto con mis señales. Gracias.
Han
20

La respuesta más simple si se trata de grabaciones cortas es escucharla y detectar "pops" (sonido corto con pinchos) en la reproducción. Sin embargo, una solución más robusta es analizar el espectro de frecuencia de la grabación.

Recuerde que cuando una señal se recorta en algún umbral, localmente se parece a una onda cuadrada en las regiones recortadas. Esto introduce armónicos más altos en el espectro de frecuencia que no hubieran estado allí originalmente. Si su señal es ilimitada (la mayoría de las señales del mundo real lo son) y está muestreando muy por encima de la tasa de Nyquist, entonces esto se destaca bastante claro como el día.

Aquí hay un breve ejemplo en MATLAB que demuestra esto. Aquí, creo una señal de banda ilimitada de 1s de duración, muestreada a 1000Hz, y luego la recorto entre ±0.8(vea la gráfica superior en la figura a continuación)

time = 0:0.001:1;
cleanSignal = sin(2*pi*75*time).*chirp(time,50,1,200);
clippedSignal = min(abs(cleanSignal),0.8).*sign(cleanSignal);

ingrese la descripción de la imagen aquí

Puede ver claramente que el espectro de frecuencia de la forma de onda original, sin recortar, está limpio y llega a cero fuera del ancho de banda (abajo a la izquierda), mientras que en la señal recortada, hay una distorsión menor general del espectro (esperada si se recorta) y la mayoría Es importante destacar que los armónicos / picos / contribuciones distintas de cero en el espectro fuera del ancho de banda de la señal (abajo a la derecha).

En general, este podría ser un mejor enfoque, porque la detección de recorte al observar los valores generalmente no es precisa a menos que haya diseñado el equipo usted mismo y conozca con precisión el valor del umbral.

Lorem Ipsum
fuente
1
Algunas de mis señales (particularmente la MLS) van hasta la frecuencia Nyquist. Entonces, este método probablemente no siempre sea aplicable para mí.
Han
@yoda Con los espectros en la mano, ¿cómo se puede decir que un espectro está 'sucio' como usted indicó? ¿Qué prueba se puede realizar?
Spacey
9

Un poco de esto depende del método de registro. Parece que está usando solo 1 convertidor, lo que simplifica un poco las cosas.

Debe buscar cualquier cosa por encima de algún umbral, y específicamente por más de un punto uno al lado del otro. Por lo general, los convertidores A / D en realidad no leen su valor máximo a menos que lo pruebe exactamente, así que tenga en cuenta que el valor máximo puede ser más bajo de lo que parece posible.

Dados sus parámetros, buscaría señales consecutivas por encima de .98 o por debajo de -.98, con algunos ajustes para determinar cuál debería ser el umbral óptimo (no lo pondría por debajo de .9). Sería aconsejable detectar uno al máximo y otro cerca de algo como .8.

La razón para ignorar 1 medición específica es que es común que ocurran picos que no tienen nada que ver con la señal. Esto se reducirá en el caso de que esté utilizando un convertidor A / D bueno conocido. Es probable que si está utilizando una variedad de detectores, o una imagen, algunos de los detectores sean malos, posiblemente se corten con frecuencia.

PearsonArtPhoto
fuente
Consejos muy prácticos aquí. Junto con el enfoque de @ Kellenjb, esto debería darme lo suficiente para trabajar en una implementación.
Han
3

MLS (secuencias de longitud máxima) son particularmente difíciles de analizar para el recorte. Su factor de cresta (= pico / rms) está muy cerca de 1, que es incluso tres dB más pequeño que el de una onda sinusoidal. Muchos convertidores D / A están diseñados para tomar una onda sinusoidal como el peor de los casos y un MLS jugado a una amplitud completa puede acortar fácilmente el circuito de interpolación de salida de un D / A.

El siguiente problema es que un MLS recortado se ve casi idéntico a uno no recortado ya que las amplitudes son casi todas + -pico en primer lugar. Además, el análisis de PDF no funciona ya que el PDF de un MLS es simplemente dos picos grandes en los bordes.

En una medición de respuesta de impulso de habitación típica, el punto de recorte más probable es en realidad el D / A, el amplificador o el altavoz. Una vez que atraviesa la sala, se parece mucho menos a un MLS y, por lo tanto, es más fácil evaluar el recorte con los métodos descritos anteriormente.

En casi todas las mediciones acústicas, el ruido de fondo está determinado por el ruido propio del micrófono o los ruidos de fondo y no por el A / D. Por lo tanto, no es muy importante optimizar la ganancia de entrada en el A / D y dejar suficiente espacio para la cabeza antes del recorte (aproximadamente 10 dB) está perfectamente bien.

Por lo general, es una buena idea medir con varios niveles de excitación diferentes y observar la SNR de la medición. En niveles bajos, el ruido de fondo acústico domina y en niveles altos algo limitará, comprimirá o recortará. El truco para hacer una buena medición es encontrar un buen punto intermedio.

Hilmar
fuente