Manchmal ist das, was einfach aussieht, nicht so einfach. Sie müssen eine recht komplexe Messung durchführen, möchten jedoch ein einfaches Ergebnis erzielen. Was Sie messen möchten, ist nicht konstant, sondern variiert in der Zeit. Abhängig von Ihrem Anforderungsniveau können Sie eine oder mehrere Eigenschaften des Stromverbrauchs berechnen. Mithilfe dieser Eigenschaften können Sie das System besser überwachen. Ich schlage Ihnen 3 verschiedene Lösungen in aufsteigender Komplexität vor.
Lösung 1: Durchschnitt
Sie möchten ein einwertiges Ergebnis erzielen -> den zeitlichen Durchschnitt ermitteln. Verwenden Sie, wie bereits von @akellyirl vorgeschlagen, einen Tiefpassfilter. Berechnen Sie float y = alpha*input + (1-alpha)*y
für jede Probe, wo alpha
der Glättungsfaktor ist. Siehe Wikipedia für Details.
Lösung 2: Max + Durchschnitt
Sie sind daran interessiert, den Durchschnitt und den Maximalwert zu ermitteln. Die Überwachung des Maximalwerts kann beispielsweise für die Dimensionierung von Bauteilen interessant sein.
if (y > max)
max = y;
Lösung 3: Standardabweichung + Max + Durchschnitt
Warum?
Siehe unten stehende Diagramme. Es gibt 3 Signale unterschiedlicher Form. Ein Dreieck , ein Sinus und ein Spitzensignal . Sie sind alle periodisch mit der gleichen Periode, der gleichen Amplitude , dem gleichen Durchschnitt und den gleichen min und max . Aber sie haben unterschiedliche Formen und in der Tat eine völlig andere Geschichte ...
Einer der Unterschiede ist die Standardabweichung. Aus diesem Grund empfehle ich Ihnen, Ihre Messungen zu erweitern und die Standardabweichung einzubeziehen. Das Problem ist, dass die Standardmethode für die Berechnung die CPU beansprucht. Hoffentlich gibt es eine Lösung.
Wie?
Verwenden Sie die Histogrammmethode . Erstellen Sie ein Histogramm aller Messungen und extrahieren Sie effizient die Statistiken (min, max, avg, Standardabweichung) des Datensatzes. Das Histogramm fasst Werte zusammen, die denselben Wert oder denselben Wertebereich haben. Der Vorteil besteht darin, dass nicht alle Abtastwerte gespeichert werden (zunehmende Anzahl von Daten) und eine schnelle Berechnung für eine begrenzte Anzahl von Daten möglich ist.
Erstellen Sie vor dem Erfassen von Messungen ein Array zum Speichern des Histogramms. Es handelt sich um ein eindimensionales ganzzahliges Array der Größe 32, zum Beispiel:
int histo[32];
Passen Sie je nach Reichweite des Amperemeter die folgende Funktion an. Wenn der Bereich beispielsweise 256 mA beträgt, bedeutet dies, dass Bin 0 des Histogramms um einen Wert zwischen 0 und 8 mA, Bin 1 um einen Wert zwischen 8 und 16 mA usw. erhöht wird. Sie benötigen also eine ganze Zahl zur Darstellung Nummer des Histogrammfachs:
short int index;
Suchen Sie jedes Mal, wenn Sie eine Probe erhalten, den entsprechenden Bin-Index:
index = (short int) floor(yi);
Und inkrementiere diesen Bin:
histo[index] += 1;
Führen Sie diese Schleife aus, um den Mittelwert zu berechnen:
float mean = 0;
int N = 0;
for (i=0; i < 32 ; i++) {
mean = i * histo[i]; // sum along the histogram
N += i; // count of samples
}
mean /= N; // divide the sum by the count of samples.
mean *= 8; // multiply by the bin width, in mA: Range of 256 mA / 32 bins = 8 mA per bin.
Führen Sie diese Schleife aus, um die Standardabweichung zu berechnen:
float std_dev = 0;
for (i=0; i < 32 ; i++) {
std_dev = (i - mean) * (i - mean) * histo[i]; // sum along the histogram
}
std_dev /= N; // divide the sum by the count of samples.
std_dev = sqrt(std_dev); // get the root mean square to finally convert the variance to standard deviation.
Die Strategie der Histogrammmethode besteht darin, die langsamen Operationen an einigen wenigen Behältern anstelle aller erfassten Signalabtastungen durchzuführen. Je länger die Stichprobe, desto besser. Wenn Sie weitere Informationen wünschen, lesen Sie diese interessante Seite Das Histogramm, Pmf und Pdf .