Détection et calcul en temps réel des pentes et des pics

9

J'ai un signal que j'échantillonne à 500 kHz. J'essaie de détecter une hausse, une chute et le pic des données entrantes. La base du pic pourrait être de 250 usec ou 2,5 ms, l'amplitude pourrait être de 6 dB ou 15 dB au-dessus du plancher de bruit. Je n'ai malheureusement pas de bons snr. Le niveau continu du signal n'est pas constant mais se déplace beaucoup plus lentement que la composante alternative.  

Au point de décision, j'ai besoin de connaître la pente de la montée et de la chute. C'est un système difficile en temps réel et j'ai vraiment besoin de prendre une décision dans le 100usec après que la pente descendante atteigne le niveau DC. 

Je recherche des suggestions sur la façon de mettre en œuvre efficacement un algorithme décent.  

Actuellement, je fais une moyenne mobile (les 25 derniers points de données ajoutés ensemble) et j'essaie de détecter la tendance. Une fois que je détecte la tendance à la hausse, je commence à rechercher une tendance à la baisse et une fois que je le fais, je recueille peut-être 50 autres échantillons et commence à calculer. 

Le bruit visse désormais facilement cet algorithme, d'où la question. 

Mise à jour

Pour le bien des autres, j'ai fini par implémenter une moyenne mobile suivie d'un intégrateur. La moyenne mobile des 64 dernières données s'est suffisamment lissée mais a perdu une hausse d'un degré, en intégrant les 8 dernières valeurs, j'ai récupéré la hausse et je recherche simplement la montée et la chute, puis j'ai fait une régression linéaire pour la pente. Fonctionne bien, pas génial mais ok.

Ktuncer
la source
Pouvez-vous publier un tracé d'une séquence de données sur laquelle votre algorithme actuel échoue?
Jim Clay
Faire ce genre de choses malgré un bruit important est assez difficile. La suggestion de Juancho d'un différenciateur est probablement une bonne idée.
Daniel R Hicks

Réponses:

5

Vous devez commencer par un différenciateur à bande limitée (équivalent à un différenciateur suivi d'un filtre passe-bas). Le différenciateur supprimera la tendance des basses fréquences et répondra fortement à vos pics et pentes. Le composant passe-bas supprimera le bruit au-delà de la fréquence de coupure.

Vous devez concevoir votre fréquence de coupure de manière à obtenir des impulsions propres pour vos pentes.

Les pentes positives ralentiront sous forme d'impulsions positives; les pentes négatives sous forme d'impulsions négatives, et le pic correspondra au passage par zéro entre positif et négatif.

Ce type de filtre est normalement implémenté en tant que filtre FIR. Le nombre d'échantillons pour votre filtre dépendra alors de vos contraintes en temps réel, de la netteté à la fréquence de coupure et de la fréquence de coupure elle-même.

Juancho
la source
Je ne connais pas très bien le DSP. Pouvez-vous m'indiquer une éventuelle mise en œuvre? Sur la base de votre réponse et de mes connaissances limitées, je pense que le lien ( holoborodko.com/pavel/numerical-methods/numerical-derivative/… ) fait exactement ce que vous mentionnez. Si je devais utiliser une telle approche, je ne sais pas 1) Comment déterminer mes fréquences? 2) Comment sélectionner les coefficients de filtre?
Ktuncer
Le lien suivant résout également un problème similaire et contient un bon groupe de liens. dsprelated.com/showmessage/123740/1.php
Ktuncer