J'ai une série de données (tableau unique). Si je prends ces données et les trace, je peux voir qu'il y a plusieurs pics. Cependant, si je fais un zoom avant sur une section de données, je constate qu'il y a un bruit important.
J'aime détecter le nombre de pics dans les données en utilisant peu de temps CPU et d'énergie. J'ai pensé à détecter les pentes de ces pics (qui pourraient être nettes ou montantes ou descendantes) et regarder le nombre de pentes pour déterminer le nombre de pics. (2 pentes positives et négatives pour chaque pic)
Avez-vous des indications sur la façon de calculer les pentes en présence de bruit?
Le code ira dans un système embarqué, la mémoire est limitée, de préférence j'aime implémenter quelque chose qui ne nécessite aucune copie de données significative.
la source
Réponses:
Cela dépend du type de bruit et du type de signal. Montrez un exemple si vous voulez une bonne réponse. Mais, cela dit, en général, vous voulez probablement filtrer le signal passe-bas. Si j'étais vous, je prendrais un spectre de puissance de Fourier pour voir si la plupart du bruit est à haute fréquence, et le signal dont je me soucie principalement dans une plage inférieure. S'ils se chevauchent, eh bien c'est la vie. Il faudrait que je réfléchisse davantage aux choses.
Un filtre passe-bas qui est bon pour le signal bruyant dans de nombreux cas est le filtre Savitzky-Golay. Il est décrit dans Recettes numériques, et pour Python, il y a une fonction dans le livre de recettes Python Numpy. Il s'agit simplement d'une convolution avec un petit noyau. Vous choisissez la taille de la fenêtre en fonction de la largeur des pics ou d'autres fonctionnalités, suffisamment large pour réduire le bruit, mais pas plus large que les fonctionnalités. Il peut être petit, disons cinq points, ou plus gros comme des dizaines, peut-être une centaine.
Vous choisissez également un ordre polynomial - généralement j'utilise 2 ou 4. L'ordre 2 est très bien lorsque la fenêtre est petite, <10 points ou elle s'étend sur moins d'un demi-cycle (si votre signal ressemble à un sinus) tandis que l'ordre 4 est mieux pour faire correspondre les formes de pic déformées, mais aime avoir environ 9 points ou plus. Mais cela dépend beaucoup de la forme et de la fréquence du bruit.
Comme d'autres disent dans les commentaires, trouver des dérivés n'est probablement pas la meilleure stratégie, mais si vous voulez quand même trouver des dérivés, le filtre Savitzky-Golay peut le faire - lisser et signaler simultanément le dérivé au lieu du signal.
la source