¿Cómo promediar respuestas complejas (y justificación)?


11

Estoy desarrollando un software que calcula la respuesta de un sistema comparando la FFT de las señales de entrada y salida. Las señales de entrada y salida se dividen en ventanas y, para cada ventana, las señales se restan a la mediana y se multiplican por una función de Hann. La respuesta del instrumento para esa ventana es entonces la relación de las FFT de los datos procesados.

Creo que lo anterior es un procedimiento estándar, aunque puedo estar describiéndolo mal. Mi problema viene en cómo combinar las respuestas de las ventanas múltiples.

Hasta donde puedo ver, el enfoque correcto es promediar los valores complejos, en todas las ventanas. La amplitud y la respuesta de fase son entonces la amplitud y la fase del valor complejo promedio en cada frecuencia:

av_response = sum_windows(response) / n
av_amplitude = sqrt(real(av_response)**2 + imag(av_response)**2)
av_phase = atan2(imag(av_response), real(av_response))

con bucles implícitos sobre bins de frecuencia.

Pero me han pedido que cambie esto para calcular primero la amplitud y la fase en cada ventana , y luego promediar las amplitudes y fases en todas las ventanas:

amplitude = sqrt(real(response)**2 + imag(response)**2)
av_amplitude = sum_windows(amplitude) / n
phase = atan2(imag(response), real(response))
av_phase = sum_windows(phase) / n

He argumentado que esto es incorrecto porque promediar ángulos es "simplemente incorrecto": el promedio de 0 y 360 grados es 180, por ejemplo, pero las personas con las que estoy trabajando respondieron diciendo "OK, solo mostraremos la amplitud".

Entonces mis preguntas son:

  • ¿Estoy en lo cierto al pensar que el segundo enfoque generalmente también es incorrecto para las amplitudes?
  • Si es así, ¿hay alguna excepción que pueda ser relevante y que explique por qué las personas con las que estoy trabajando prefieren el segundo método? Por ejemplo, parece que los dos enfoques estarán de acuerdo a medida que el ruido se vuelva pequeño, entonces, ¿tal vez esta sea una aproximación aceptada para poco ruido?
  • Si el segundo enfoque es incorrecto, ¿hay alguna referencia convincente y autoritativa que pueda usar para mostrar esto?
  • Si el segundo enfoque es incorrecto, ¿hay ejemplos buenos y fáciles de entender que muestren esto para la amplitud (como lo hace el promedio de 0 y 360 grados para la fase)?
  • Alternativamente, si yo soy incorrecto, lo que sería un libro bueno para mí para educar mejor a mí mismo?

He tratado de argumentar que el promedio de -1 1 1 -1 1 -1 -1 debería ser cero en lugar de 1, pero eso no fue convincente. Y aunque creo que, con el tiempo, podría construir un argumento basado en la estimación de máxima probabilidad dado un modelo de ruido particular, no es el tipo de razonamiento que escucharán las personas con las que estoy trabajando. Entonces, si no estoy equivocado, necesito un argumento poderoso de la autoridad o una demostración "obvia".

[Intenté agregar más etiquetas, pero no puedo encontrar las relevantes y no puedo definir nuevas como un nuevo usuario, lo siento]


¿Qué razón dan para desfavorecer su método?
nibot

la respuesta se ve más suave cuando se traza con el segundo método. Creo que esto se debe a que, para los casos observados, no hay una señal significativa (en f más alta), mientras que el segundo enfoque obliga a una señal a "aparecer" del ruido. También, varios problemas políticos / de comunicación como se podría adivinar
Andrew Cooke

1
¿Has intentado proporcionar algunos casos de prueba? Tome datos aleatorios y filtre a través de algunos filtros con respuesta de frecuencia conocida. Verifique que la estimación de la función de transferencia converja con la función de transferencia conocida.
nibot

No. no lo he hecho Esa es una buena sugerencia. Gracias. si se presenta bien, podría ver que es convincente.
Andrew Cooke

Respuestas:


13

La estimación de la función de transferencia generalmente se implementa de manera ligeramente diferente al método que usted describe.

Tu método calcula

F[y]F[x]

F

Una implementación más típica calculará la densidad espectral cruzada de xey dividida por la densidad espectral de potencia de x:

F[y]F[x]|F[x]|2=F[y]F[x]F[x]F[x]

F[x]

Estimación incoherente

Su empleador le ha sugerido que calcule la función de transferencia utilizando

|F[y]||F[x]|

Esto funcionará , pero tiene dos grandes desventajas:

  1. No obtienes ninguna información de fase.
  2. xy

Su método y el método que describí evitan estos problemas mediante el uso de promedios coherentes .

Referencias

La idea general de usar segmentos superpuestos y promediados para calcular las densidades espectrales de potencia se conoce como el método de Welch . Creo que la extensión de usar esto para estimar las funciones de transferencia también se conoce a menudo como el método de Welch, aunque no estoy seguro de si se menciona en el documento de Welch. Buscar el artículo de Welch podría ser un recurso valioso. Una monografía útil sobre el tema es el libro de Bendat y Piersol, Datos aleatorios: procedimientos de análisis y medición .

Validación

Para validar su software, sugiero aplicar varios casos de prueba, donde genere ruido blanco gaussiano y lo alimente a través de un filtro digital con una función de transferencia conocida. Alimente las entradas y salidas en la rutina de estimación de la función de transferencia y verifique que la estimación converja con el valor conocido de la función de transferencia.


ah! gracias. Investigaré / intentaré esto.
Andrew Cooke

@nibot ¿Qué, exacto, longitudes FFT se utilizan aquí?
Spacey

Puedes usar cualquier longitud. La longitud determina la resolución e, implícitamente (dada una cantidad fija de datos para trabajar), el número de promedios. Fft más largo = mejor resolución pero también errores más grandes debido a tener menos promedios.
nibot

ok, otra diferencia es que tienes <F (y) F * (x)> / <F (x) F * (x)> mientras que Phonon tiene <F (y)> <F * (x)> / (< F (x)> <F * (x)>) afaict: o (
andrew cooke

No tiene sentido calcular <F (y)> <F * (x)> / (<F (x)> <F * (x)>), ya que los <F * (x)> se cancelarán inmediatamente. Creo que es correcto como lo he escrito.
nibot

12

¡Bienvenido al procesamiento de señales!

Estás absolutamente en lo correcto. No puede simplemente promediar las magnitudes y fases de DFT por separado, especialmente las fases. Aquí hay una demostración simple:

z=a+bi|z|zz

|z|=a2+b2
z=tan1(ba)

zz1z2

z=z1+z22=a1+b1i+a2+b2i2=(a1+a2)+(b1+b2)i2

En este caso,

|z|=(a1+a2)24+(b1+b2)24=12(a1+a2)2+(b1+b2)2a12+b12+a22+b222

También,

z=tan1(b1a1)+tan1(b2a2)2tan1(2(b1+b2)2(a1+a2))

|z|z

Ahora, para hacer lo que intenta hacer, sugiero lo siguiente. Teóricamente, puede encontrar una respuesta de impulso de un sistema dividiendo DFT de la salida por DFT de la entrada. Sin embargo, en presencia de ruido, obtendrá resultados muy extraños. Una forma ligeramente mejor de hacerlo sería utilizar la estimación de respuesta de impulso FFT de doble canal, que es la siguiente (derivación no proporcionada aquí, pero puede encontrarla en línea).

Gi(f)=Fi1(f)+Fi2(f)++FiN(f)NFik(f)kkiGo(f)=Fo1(f)+Fo2(f)++FoN(f)NGH^(f)H(f)

H^(f)=Go(f)Gi(f)|Gi(f)|2

()


2
Gracias; no estaba seguro de si votar esta o la mejor respuesta de nibot, creo que están abogando por el mismo proceso, así que seguí con la recomendación del libro, pero si tuviera dos votos también habría incluido esto ...
andrew cooke

1
@andrewcooke Sí, ambos defienden exactamente lo mismo. Espero que esto aclare las cosas para usted y sus colegas.
Phonon

Ha sido de gran ayuda para mí (gracias de nuevo). el lunes sugeriré que (1) implemente el método sugerido y (2) haga comparaciones con datos conocidos (sintéticos) para los tres. entonces espero que gane el mejor enfoque: o)
Andrew Cooke

@Phonon ¿Qué longitudes de FFT estamos usando para calcular las FFT aquí? length_of_signal + max_length_of_channel + 1?
Spacey

@Mohammad Tiene que ser al menos el doble de la demora que espera encontrar. Esto se debe a la simetría circular de la DFT, por lo que obtendrá valores de retardo causales y no causales en su resultado.
Phonon

3

Esta es una diferencia entre el promedio coherente e incoherente de los espectros FFT. El promedio coherente es más probable que rechace el ruido aleatorio en el análisis. Incoherente tiene más probabilidades de acentuar magnitudes de ruido aleatorias. ¿Cuál de estos es más importante para su informe de resultados?


si dan resultados diferentes, supongo que quiero una estimación imparcial. ¿Es imparcial?
Andrew Cooke
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.