¿Qué filtro debo usar? Sólo quiero mantener altos valores de conteo

1

Estoy haciendo esta pregunta porque no estoy muy seguro de qué filtro debo usar.

La mía es simplemente una señal compuesta de valores discretos como s = [1 2 2 2 3 4 2 4 3 4 5 3 2 3 3] . Entonces me gustaría, por tamaño de ventana, una señal filtrada. Así por ejemplo si utilizo un tamaño de ventana de 5 para s entonces obtendría; %código%. Por lo tanto, quiero mantener los valores estadísticos que ocurren con mayor frecuencia por tamaño de ventana.

Actualmente estoy usando solo un filtro de mediana, pero no creo que este sea el enfoque correcto.

Aquí hay un código de Python para demostrar lo que estoy haciendo (pero como he dicho, lo que creo que es incorrecto).

import numpy as np
import pylab *
from scipy.signal import medfilt

test = np.random.randint(10, size=1000)

fig, ax1 = plt.subplots(1,sharey=True, sharex=True, figsize=(15,5))
ax1.plot(test)
ax1.plot(medfilt(test,[99]),'r')
plt.show()

Donde la línea roja es la señal filtrada para un tamaño de ventana de 99.

    
pregunta Astrid

1 respuesta

3

Si entiendo sus requisitos, tiene razón en que un filtro de mediana no los cumplirá.

Considere la siguiente secuencia de valores (ordenada según el algoritmo de filtro de mediana con una ventana de longitud 9.

(1 2 3 4 5 6 6 6 9)

El valor de la mediana es 5, pero el valor de frecuencia más alto (estadísticamente) es 6.

Ahora si hiciste un conteo de población

Bin    0 1 2 3 4 5 6 7 8 9
Count  - 1 1 1 1 1 3 - - 1

puede identificar el valor de frecuencia más alto como 6. No sé si este enfoque tiene un nombre formal, pero el "filtro de modo" parece describirlo bien, por analogía con el "filtro de mediana".

Esto podría ser costoso computacionalmente.

Sin embargo, si usó una ventana deslizante (por ejemplo, longitud 9), a medida que cada nuevo valor ingresa a la ventana, incrementa su conteo, y al salir de la ventana disminuye su conteo, entonces mantener el conteo de la población es barato. En otras palabras, antes de calcular la muestra N, agregue la muestra (N + 4) y elimine la muestra (N-4) de los contenedores de popcount.

Luego recorres las bandejas para encontrar la bandeja con el recuento máximo.

Cómo resolver casos en los que dos o más contenedores tienen el mismo conteo máximo, por ejemplo, en la secuencia

(1 2 3 3 5 6 6 8 9)

dando cuentas

Bin    0 1 2 3 4 5 6 7 8 9
Count  - 1 1 2 - 1 2 - 1 1

donde puedes tomar la respuesta como 3 o 6 ... eso depende de ti.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas