Aplicando ponderación A

11

Quiero calcular el volumen de una señal dada y me he encontrado con este hilo . Estoy un poco confundido sobre el aspecto de A-Weighting. No puedo publicar imágenes, pero creo que este sitio tiene la fórmula que necesito. (Wa = 10log ...)

Lo que no entiendo es cómo usarlo realmente en mi programa. Si fsignifica frecuencia, entonces presumiblemente puedo codificar los valores ya que permanecerán constantes. Si ese es el caso, ¿cómo aplico Waa mis valores de muestra y qué valores utilizo? ¿Calculo el espectro de potencia para obtener WINDOW_SIZE/2valores y multiplico cada valor en la banda de frecuencia con un Wavalor precalculado relevante o es esa la forma incorrecta de hacerlo? Gracias de antemano.

TryNCode
fuente

Respuestas:

8

Sí, podría codificar los valores, hacer una FFT de su señal y multiplicar por los valores codificados, luego obtener la amplitud en el dominio de frecuencia del teorema de Parseval ( ejemplo ).

También podría implementar un filtro digital y hacerlo en el dominio del tiempo. Aquí está el código de Matlab y mi traducción a Python .

Tenga en cuenta que la transformación bilineal hace que el filtro digital se desplace más rápidamente que el filtro analógico, introduciendo errores de medición a frecuencias de muestreo comunes. Una solución simple es muestrear primero los datos, por lo que se minimiza la discrepancia. Otros enfoques de diseño de filtros aquí: http://dsp.stackexchange.com/q/36077/29

endolito
fuente
Gracias, lo entiendo un poco mejor. En su ejemplo de Parseval, ¿es rms_flat la ecuación RMS (SQRT(x1^2 + x2^2...xn^2/n))y cuál es la diferencia entre rms_flat de la señal y rms_flat de la FFT?
TryNCode
@ExpAns: Sí, rms_flat()es justo sqrt(mean(absolute(a)**2)). El /nestá en el exterior. El valor RMS de la señal y FFT son los mismos, excepto por un factor de escala.
Endolith