2013-04-09 4 views
0

J'ai plusieurs signaux 1D, montrant deux bandes ou plus. Un exemple est montré ci-dessous. raw dataClustering du signal 1D

J'ai besoin d'extraire les points de données appartenant à une seule bande. Ma première approche simple était de prendre une moyenne mobile des données, et obtenir les indices où les données sont plus grandes que la moyenne.

def seperate(x): 
    average = scipy.ndimage.gaussian_filter(x, 10) 
    # this gives me a boolean array with the indices of the upper band. 
    idx = x > average 
    # return the indices of the upper and lower band 
    return idx, ~idx 

traçant ces derniers et la courbe moyenne ressemblerait à ceci, où le rouge désigne la bande inférieure supérieure et bleu. Cela fonctionne plutôt bien pour cet exemple, mais échoue lorsque plus de deux bandes sont présentes et/ou les bandes ne sont pas si bien séparées.

Je suis à la recherche d'une solution plus robuste et plus générale. Je cherchais dans scikit-learn et je me demandais si l'un des algorithmes de clustering peut être utilisé pour y parvenir.

Répondre

2

Regardez mesures de similarité série temporelle.

En effet, j'ai vu ce seuillage binaire que vous avez essayé là-bas appelé "seuil de franchissement", et bien d'autres encore.

En général, il n'y a pas de similarité de séries chronologiques "one size fits all". Différents types de signaux nécessitent des mesures différentes. Cela peut probablement être mieux vu par le fait que certains sont beaucoup mieux analysés après FFT, tandis que pour d'autres FFT n'a absolument aucun sens.