Freigeben über


Filtern von Daten (vorherige Version)

Um den Datendurchsatz zu optimieren, muss Ihr Sensorgerät Filterkriterien auf die Datenaktualisierungsereignisse anwenden, damit sie nur bei Bedarf ausgelöst werden. Diese Filterung führt zu einer geringeren CPU-Auslastung (aufgrund des reduzierten Sensordurchsatzes) und zu einem geringeren Stromverbrauch (sowohl für den Sensor als auch für die CPU).

Es gibt zwei Werte (oder Eigenschaften), die die Filterkriterien eines Sensorgeräts unterstützen. Die erste ist das aktuelle Berichtsintervall (CRI) und die zweite ist die Änderungssensitivität (Change Sensitivity, CS). Beide Eigenschaften können von einer Sensoranwendung festgelegt werden.

Das aktuelle Berichtsintervall ist der Mindestzeitraum (in Millisekunden) zwischen Datenupdates, die ein Client erhalten möchte, wenn eine sinnvolle Änderung eingetreten ist. Die Änderungssensitivität ist der Wert (oder Prozentsatz), der verwendet wird, um eine sinnvolle Änderung anzugeben.

Eine Wetterstationsanwendung kann ein aktuelles Berichtsintervall (CRI) für einen Temperatursensor von 60.000 (eine Minute) angeben. Der Temperatursensor erfordert einen Wert für die Änderungsempfindlichkeit (im Gegensatz zu einem Prozentsatz). Wenn dieser Temperatursensor Grad Celsius zurückgibt und der Änderungsempfindlichkeitswert die Temperatur 2,0 betrug, würde dieser spezielle Sensor das Daten-update-Ereignis nur anheben, wenn die Temperatur über das angeforderte Berichtsintervall um 2,0 Grad Celsius gestiegen oder verringert wurde.

Ein Umgebungslichtsensor (ALS) ist ein Beispiel für einen Sensor, für den die Änderungsempfindlichkeit als Prozentsatz angegeben werden muss. Wenn beispielsweise der Wert für die Änderungsempfindlichkeit für die Beleuchtungsstärke 2,0 lautet, interpretiert dieser Sensor den Wert als Prozentsatz und löst das Ereignis mit der Aktualisierung der Daten nur dann aus, wenn der LUX-Wert entweder gesunken oder um 2 % erhöht wurde.

In der folgenden Tabelle sind sechs allgemeine Sensoren, die jeweils zugeordneten Daten und die entsprechende Änderungsempfindlichkeit aufgeführt.

Sensor Datenfeld Ändern des Vertraulichkeitswerts
Lichtsensor LUX Lux-Veränderung in %
Beschleunigungsmesser Beschleunigung X Beschleunigung G-Kraft
Beschleunigung Y Beschleunigung G-Kraft
Beschleunigung Z Beschleunigung G-Kraft
3D Gyrometer Angular Speed X Angular Geschwindigkeit (Grad pro Sekunde)
Angular Geschwindigkeit Y Angular Geschwindigkeit (Grad pro Sekunde)
Angular Speed Z Angular Geschwindigkeit (Grad pro Sekunde)
Kompass Magnetische Richtung Norden Grad
True North Heading Grad
Neigungsmesser Gieren Grad
Neigung Grad
Rollen Grad
Geräteausrichtung Quaternion Gradbewegung
Rotationsmatrix Gradbewegung

In der folgenden Tabelle sind die empfohlenen CRI-Standardwerte (Current Report Interval) aufgeführt.

Sensortyp Empfohlenes Standardberichtsintervall
Umgebungslicht 5.000
Beschleunigungsmesser 100
Gyrometer 100
Kompass 100
Neigungsmesser 50
Ausrichtung 50

In der folgenden Tabelle sind die empfohlenen Cs-Standardwerte (Change Sensitivity) aufgeführt.

Sensortyp Empfohlene Standardänderungsempfindlichkeit
Umgebungslicht 50
Beschleunigungsmesser 0,02
Gyrometer 0,50
Kompass 0,20
Neigungsmesser 0,50
Ausrichtung 0,50

Änderungsempfindlichkeit (CS) für Neigungsmesser und Orientierungssensoren

Die Änderungsempfindlichkeit für den Neigungsmesser und den Orientierungssensor sollte als Winkel zwischen zwei Quaternionen berechnet werden. Mathematisch ausgedrückt als:

2* cos⁻1(punkt product(q1, q2))

Diese Berechnung stellt die Konsistenz der Geräteausrichtung sicher.

Effektives aktuelles Berichtsintervall (CRI) und Änderungssensitivität (CS)

Mehrere Anwendungen können die Eigenschaften Current Report Interval (CRI) und Change Sensitivity (CS) für einen bestimmten Sensor festlegen. Es liegt in der Verantwortung Ihres Treibers zu bestimmen, welche angeforderte Eigenschaft zutrifft. Die vom Treiber festgelegten Eigenschaften werden als effektive aktuelle Report-Interval (E-CRI) und Effektive Change-Sensitivity (E-CS) bezeichnet.

Festlegen von E-CRI und E-CS für Clientanwendungen

Wenn eine Clientanwendung eine Verbindung mit einem Sensor herstellt, muss Ihr Treiber die E-CRI- und E-CS-Werte festlegen. Diese Werte werden in einem sogenannten Clientcontainer gespeichert. In der folgenden Tabelle sind sechs Methoden aufgeführt, die von einem Sensortreiber unterstützt werden, und es wird angegeben, was Der Treiber mit seinem Clientcontainer und den Eigenschaften E-CRI und E-CS tun soll.

Ereignis von Interesse Ereignishandleraktivitäten
ISensorDriver::OnClientConnect Hinzufügen eines Clientelements zum Clientcontainer

Lesen sie die Standard-CRI- und CS-Werte nach Bedarf, Speichern im Clientcontainer.
ISensorDriver::OnClientDisconnect Entfernen sie den Client aus dem Clientcontainer, und legen Sie die E-CRI und E-CS basierend auf den verbleibenden Clients entsprechend fest.
ISensorDriver::OnClientSubscribeToEvents Aktualisieren Sie das Feld "abonnierte Ereignisse" (auf TRUE festgelegt) für den betreffenden Sensor. Aktivieren Sie die Ereignisberichterstattung über den Sensor.
ISensorDriver::OnClientUnSubscribeToEvents Aktualisieren Sie das Feld "abonnierte Ereignisse" (auf false festgelegt) für den betreffenden Sensor. Wenn keine Abonnenten verbleiben, deaktivieren Sie die Ereignisberichterstattung vom Gerät.
ISensorDriver::OnSetProperties Wenn CS- oder CRI-Eigenschaften festgelegt sind, aktualisieren Sie die entsprechenden Clientcontainerfelder.
IFileCallbackCleanup::OnCleanupFile Der Client ist abgestürzt oder reagiert nicht mehr. Der Client sollte aus dem Clientcontainer entfernt werden.

Die folgende Tabelle stellt den Clientcontainer für einen 3D-Beschleunigungsmesser mit vier verbundenen Clientanwendungen dar. Zwei dieser Client-Apps (entsprechend der 2. und 4. Zeile) haben Ereignisse abonniert.

Clientdateihandle Abonnierte Ereignisse CRI CS (X) CX (Y) CS (Z)
FF80A267 FALSE 50 0.001 0.001 0.001
FF802489 true 70 0,02 0,02 0,02
FF80D345 FALSE 15 NULL NULL NULL
FF803287 true 100 0,005 0,005 0,005

Nachdem der Treiber diesen Satz verbundener Clients ausgewertet hat, wählte er die folgenden Werte für E-CRI und E-CS aus:

  • E-CRI: 70 ms
  • E-CS-Werte: (kann bei Verwendung des kleinsten Schwellenwerts auf einen einzelnen Wert reduziert werden)
    • X:0.005
    • Y:0.005
    • Z: 0,005

Beachten Sie in diesem Beispiel, dass Clients, für die keine Ereignissenke festgelegt ist (erste und dritte Zeile), ignoriert werden, da die Ereignisfilterung für diese Clients nicht gilt.

Filtern von Datenaktualisierungsereignissen durch Auswertung der effektiven CRI- und CS-Werte (E-CRI, E-CS)

Nachdem die aktuellen E-CRI- und E-CS-Werte ermittelt und aktualisiert wurden, wenn sich der Sensorverbindungsstatus ändert, verwendet Ihr Sensorgerät diese Werte, um Ereignisse zu filtern, die für verbundene Clientanwendungen ausgelöst werden. Diese Werte werden mit der Differenz zwischen den "aktuellen" Datenwerten und den vorherigen Datenwerten verglichen. Wenn die E-CS-Werte für einen Zeitraum überschritten wurden, der gleich oder größer als die E-CRI ist, sollte nur dann ein Datenereignis ausgelöst werden. Die einzige Ausnahme ist der Start des Sensorgeräts, wenn die Standardwerte angewendet werden, damit Clients die richtige Benachrichtigung erhalten können.

Die folgende Abbildung veranschaulicht, wie die Zeitfilterung von Sensorrohdaten ausgewertet wird, um zu bestimmen, wann Datenereignisse ausgelöst werden sollen.

Abbildung der zeitgefilterten Sensordaten.

In der vorherigen Abbildung stellen die roten Daten im unteren Teil des Diagramms die Rohdaten des Sensors dar. Die grüne Linie stellt Daten dar, die an Clients zurückgegeben werden, die Daten abfragen (eine von vielen Möglichkeiten zum Implementieren dieses Verhaltens), und die roten X-Werte stellen dar, wenn Datenereignisse ausgelöst werden. Blaue Linien sind die Schwellenwerte für die E-CS-Grenzen (+/- E-CS relativ zum letzten Datenereigniswert).

Durch die Implementierung dieser Ereignisfilterlogik kann die Anzahl aktualisierter Datenereignisse erheblich reduziert werden, und Anwendungen können weiterhin benachrichtigt werden, wenn sinnvolle Änderungen an Sensordaten auftreten.

Optimierungen der Gerätelaufzeit für die Datenfilterung

In diesem Abschnitt werden mehrere Laufzeitoptimierungen beschrieben, die Sie beim Entwickeln eines Sensortreibers in Betracht ziehen sollten.

Unterstützungsunterbrechungen

Ihr Treiber sollte sich auf Unterbrechungen verlassen, anstatt das Gerät abfragen zu müssen. Dies führt zu Leistungs- und Energieverwaltungsverbesserungen. Zu diesen Verbesserungen gehören die folgenden:

  1. Ihr Gerät kann basierend auf der aktuellen Änderungsempfindlichkeit und dem Berichtsintervall in einen niedrigeren Leistungszustand wechseln.
  2. Die Verwendung von Interrupts reduziert unnötige Codeausführungen sowohl im Treiber als auch in der Sensorfirmware.
  3. Die Verwendung von Interrupts reduziert die Busaktivität.

Hinweis

Wenn ein Treiber auf Interrupts angewiesen ist, aber das aktuelle Berichtsintervall und die Änderungsempfindlichkeitslogik im Treiber vorhanden sind, erhält der Treiber möglicherweise eine erhebliche Anzahl von Unterbrechungen zwischen Datenupdates. Daher muss der Treiber Unterbrechungen möglicherweise deaktivieren (oder maskieren), bis das aktuelle Berichtsintervall abläuft.

Verschieben der Unterstützung der Änderungsempfindlichkeit auf das Gerät

Wenn Ihre Sensorhardware oder -firmware die Schwellenwerterkennung unterstützt, sollten Sie dieses Feature verwenden, um die Änderungsempfindlichkeit zu unterstützen. Indem Sie die Unterstützung auf das Gerät verschieben und dann auf den entsprechenden Interrupt reagieren, reduzieren Sie den Verarbeitungsaufwand in Ihrem Treiber.

Verschieben der Unterstützung für Berichtsintervalle auf die Geräte

Wenn Ihre Sensorhardware oder -firmware das Konzept eines Berichtsintervalls unterstützt, sollten Sie dieses Feature verwenden.

Wenn Ihr Sensor keine native Berichtsintervallunterstützung bietet, sollten Sie interrupts für eine Teilmenge des aktuellen Berichtsintervalls deaktivieren. Rufen Sie dann nach Ablauf dieses Zeitraums die aktuellen Gerätedaten ab.