Erkennung und Berechnung von Steigungen und Spitzen in Echtzeit


9

Ich habe ein Signal, das ich bei 500 kHz abtaste. Ich versuche, einen Anstieg, Abfall und die Spitze in den eingehenden Daten zu erkennen. Die Basis des Peaks könnte 250 usec oder 2,5 ms betragen, die Amplitude könnte 6 dB oder 15 dB über dem Grundrauschen liegen. Ich habe leider keinen guten snr. Der Gleichstrompegel des Signals ist nicht konstant, sondern bewegt sich viel langsamer als die Wechselstromkomponente.  

Am Entscheidungspunkt muss ich die Steigung des Anstiegs und Abfalls kennen. Dies ist ein hartes Echtzeitsystem, und ich muss im 100usec wirklich eine Entscheidung treffen, nachdem die Abwärtsneigung das Gleichstromniveau erreicht hat. 

Ich suche nach Vorschlägen, wie ich einen anständigen Algorithmus effizient implementieren kann.  

Derzeit mache ich einen laufenden Durchschnitt (über 25 Datenpunkte addiert) und versuche, den Trend zu erkennen. Sobald ich den Trend nach oben erkenne, suche ich nach dem Trend nach unten und wenn ich das tue, sammle ich vielleicht weitere 50 Proben und beginne zu berechnen. 

Rauschen schraubt diesen Algorithmus jetzt leicht, daher die Frage. 

Aktualisieren

Zum Wohle anderer habe ich am Ende einen gleitenden Durchschnitt gefolgt von einem Integrator implementiert. Der gleitende Durchschnitt der letzten 64 Daten wurde ausreichend geglättet, verlor jedoch bis zu einem gewissen Grad an. Durch die Integration der letzten 8 Werte wurde der Anstieg zurückgewonnen, und ich suche einfach nach Anstieg und Abfall. Später führte ich eine lineare Regression für die Steigung durch. Funktioniert ok, nicht großartig, aber ok.


Können Sie eine Darstellung einer Datensequenz veröffentlichen, bei der Ihr aktueller Algorithmus fehlschlägt?
Jim Clay

Es ist ziemlich schwierig, so etwas trotz erheblichen Lärms zu tun. Juanchos Vorschlag eines Unterscheidungsmerkmals ist wahrscheinlich gut.
Daniel R Hicks

Antworten:


5

Sie sollten mit einem bandbegrenzten Differenzierer beginnen (entspricht einem Differenzierer, gefolgt von einem Tiefpassfilter). Das Unterscheidungsmerkmal entfernt den Niederfrequenztrend und reagiert scharf auf Ihre Spitzen und Steigungen. Die Tiefpasskomponente entfernt Rauschen über die Grenzfrequenz hinaus.

Sie sollten Ihre Grenzfrequenz so gestalten, dass Sie saubere Impulse für Ihre Steigungen erhalten.

Positive Steigungen verlangsamen sich als positive Impulse; negative Steigungen als negative Impulse, und die Spitze entspricht dem Nulldurchgang zwischen positiv und negativ.

Dieser Filtertyp wird normalerweise als FIR-Filter implementiert. Die Anzahl der Abtastwerte für Ihren Filter hängt dann von Ihren Echtzeitbeschränkungen, der Schärfe bei der Grenzfrequenz und der Grenzfrequenz selbst ab.


Ich bin nicht sehr gut mit DSP vertraut. Können Sie mich auf eine mögliche Implementierung hinweisen? Aufgrund Ihrer Antwort und meines begrenzten Wissens denke ich, dass der Link ( holoborodko.com/pavel/numerical-methods/numerical-derivative/… ) genau das tut, was Sie erwähnen. Wenn ich einen solchen Ansatz verwenden würde, weiß ich nicht 1) Wie bestimme ich meine Frequenzen? 2) Wie wähle ich Filterkoeffizienten aus?
Ktuncer

Auch der folgende Link löst ein ähnliches Problem und enthält eine Reihe von Links. dsprelated.com/showmessage/123740/1.php
Ktuncer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.