Suavizar la señal / detectar golpes en un flujo de datos

11

(EDITAR: Esta pregunta se deduce de la extracción de datos binarios de tarjetas de banda magnética de WAV sin procesar )

Aquí está mi señal (línea superior) y un filtro IIR básico aplicado (línea inferior)

ingrese la descripción de la imagen aquí

(EDITAR: mi tarea es dividir la señal en binario 0 (frecuencia F) y binario 1 (frecuencia 2F), por eso se llama F2F. Por lo tanto, necesito procesarlo de tal manera que no garantice picos falsos. la captura de pantalla hace que parezca trivial, existe un problema potencial de obtener un pico doble y también de obtener falsos positivos en el canal entre picos reales).

Mi pregunta es, ¿qué métodos están disponibles para suavizar esta señal? ¿Es IIR mi mejor apuesta?

Puedo ver al menos tres posibilidades:

  • IIR y [n] = 0.9 * y [n-1] + 0.1 * x [n] donde y [x] = 0 cuando x <0

  • Media móvil / en ventana: coloque una curva de Bell con área 1.0 sobre el entorno, digamos w = 10 muestras a cada lado e integre bellSmooth (x) = integral [xw, x + w] {bell (k) .samp (k)} dk

  • Determine la frecuencia esperada y FFT / elimine contenedores de orden superior / FFT inversa

Es posible que haya respondido mi propia pregunta, pero probablemente esto esté incompleto y estoy seguro de que estoy usando la terminología incorrecta. Además, realmente no puedo predecir los pros y los contras. El último método es menos atractivo, ya que requiere el conocimiento de la frecuencia de señal básica. Pero entonces también lo hace el segundo método; Necesito elegir una longitud de ventana adecuada.

¿Hay otros métodos?

Pi
fuente
66
¿Qué características de la señal original está tratando de preservar / medir? Por ejemplo, el tiempo entre los puntos pico, la altura del pico, la cantidad de tiempo por encima de un umbral, ¿algo más?
Martin Thompson
Tiempo entre picos ... e incluso esto no necesita ser demasiado preciso: es una señal F2F (enmendaré la pregunta para hacer referencia a la fuente de señal y dar un contexto)
P i
¿Es esto para el procesamiento en línea o fuera de línea?
El tema de mi tesis es el suavizado de ruido en el flujo de datos. ¿Te gusta este artículo o tema?

Respuestas:

6

Efectos del promedio

El uso de un filtro de promedio móvil suavizará las irregularidades en la señal. El ruido se convierte en E / N donde N es la longitud del filtro de promedio móvil. El efecto secundario de usar un MA es que los picos de señal se vuelven más anchos y menos profundos.

Además, el contenido de frecuencia de la señal cambiará. Un filtro de promedio móvil en el dominio del tiempo es lo mismo que convolucionar la señal del dominio de frecuencia por una función sinc, todo se borra.

Algoritmo de detección de picos La detección de picos es un problema común en problemas de ingeniería 9/10. (No realmente, pero un TON depende de ellos)

Por lo general, esto es lo que se hace:

Umbral medio

1) Look for all peaks in your signal. (i.e., a point that is larger than the two
   adjacent points
2) take this list of points and for each one of them compute:
   med_threshold = median(Peak,Width) + constantThresholmedian   where median is the
   median value of the data centered at "Peak" with Width being the number of 
   points to look at.
       a) The Width(usually written as Lambda in literature) and constantThreshold
          (usually written as C) are determined by trial and error and using the ROC
          curve (Acronym below)
3) if the peak's magnitude is above this threshold accept it as a true peak. 
   Else: Discard it, its a false peak
4) Generate a Receiver Operating Characteristic Curve(ROC) to how well the algorithm
   is performing.

Aquí hay un ejemplo:

suppose we have the signal X = [ 0 0 0 0 1 3 **9** 2 1 1 **2** 1 1 ] 
1) 9 and 2 are both potential peaks 
2) Lets use a window of 5 and  a threshold =2
so at 9 we have [1 3 9 1 2] -> [1 1 2 3 9]  so Median(9,5) = 2
9 > 2 +2, therefor its a peak
Lets take a look at 2: [ 1 1 2 1 1] -> [1 1 1 1 2 ] Median(2,5) = 1
2 < 1+2, therefor it is NOT a peak. 

Determinación de frecuencia

Ahora que ha encontrado efectivamente la localización del tiempo del pico, intente encontrar su frecuencia:

1) Use the locations of the peaks to generate a pulse train
      a) this means create sum(Dirac_delta[t-L(n)]) where L(n) is the nth time that 
      you've localized through median thresholding
2) Apply FFT Algorithm
3) Look for largest peak. 

Estimación de frecuencia alternativa

1) Think of this like a beat in a piece of music (I learned about thresholding by
   researching Onset Detection.
2) Compute the average time distance between detected peaks.
3) now call your results BPM or PPM (pulses per minute) 

Avenidas adicionales de investigación

Si bien es posible que esté satisfecho con la señal máxima, hay algoritmos que se aplican a una serie de problemas completamente diferentes llamada Detección de inicio.

La detección de inicio es un área grande en la investigación de recuperación de información musical. Se utiliza para determinar cuándo se reproduce una nota.

Muestra de música de un inicio

Si piensa que la señal de su cabezal de cinta es una señal altamente muestreada, puede aplicar muchos de los algoritmos que encontrará en este documento:

http://www.elec.qmul.ac.uk/people/juan/Documents/Bello-TSAP-2005.pdf

CyberMen
fuente
"[1 3 9 1 2]" ¿Cómo obtiene el número 2 si su ventana es ancho = 5?
Spacey
Observe cómo alineé los números. la mediana es el número del medio en un conjunto ordenado. [1 1 2 3 9] <- ordenado, el número del medio es 2.
CyberMen
Mira tus números, son [1 3 9 1 1]. ¿De dónde sacaste el 2?
Spacey
@Mohammad realizó algunas ediciones mientras trabajaba en él, fue eliminado. Fijo.
CyberMen
¡Genial, gracias! Ahora, cuando dices 'nota' en el contexto musical, ¿eso significa frecuencia única o muchas frecuencias? ¿O no importa? Estoy pidiendo ver si esta es una forma de usarse también con algunas otras aplicaciones que son de banda estrecha (tono único).
Spacey