Ret i Doxyfile til jeres navn 1
Loading...
Searching...
No Matches
aversum_variance_fast01.ino
Go to the documentation of this file.
1/* nov 25/JDN
2 ESP32 kan have en ret dårlig ADC
3 Her er lidt SW der tager 1,2,3,.-.. hvor mange vil have så hurtigt som muligt og lave en middelvaerdi
4 Det burde fjerne lidt støj på signalet
5 Prisen er at det teger lidt tid
6
7JEG har brugt en esp32 dev kit v1
8
9ADC måler på en spændingsdeler med to modstande der spændingsdeler de 3.3V der er forsyningsspænding til esp32
10
11
12Dette program laver NRSAMPLES (11000) målinger på ADC så hurtig som muligt
13
14ADCen (pin 36) måle på en spændingsdeler af Vsupply (3.3V)
15
16ADC kører 12 bit
17
18Der regnes middelværdi og standard afvigelse ud for at få en ide om støjen
19
20Data gemmes i mV
21
22Der køres et simpelt midlingsfilter der er 1,2,3...10,20,30,...,1000 langt pr sample
23Du kan selv rette de tal nede i setup funktion
24
25Så kan man få en ide om hvor mange samples man skal midle for at få støjen ned
26
27*/
28
29
30// https://en.wikipedia.org/wiki/Probability_distribution
31
32// 11000 for er der plads til et maks 1000 pins averfilter
33// brugbare data ligge så fra +1000 til enden
34
35#define NRSAMPLES 11000
36#define DATASTART 1000
37
38#define RESOLUTION 4095
39#define VSUPPLY 3.3
41
42
43
44
45
46void doSampling(float dAr[]) {
47 int v;
48 for (int i = 0; i < NRSAMPLES; i++) {
49 v = analogRead(36);
50 dAr[i] = 1000.0 * VSUPPLY * v / RESOLUTION; // mV
51 }
52}
53
54float calcMean(float a[]) {
55 float m = 0.0;
56
57 for (int i = DATASTART; i < NRSAMPLES; i++)
58 m += a[i];
59 return m / (NRSAMPLES - DATASTART);
60}
61
62void calcAverage(float dstAr[], float valAr[], int averSize) {
63 float fSum;
64 //if (1000 < averSize)
65 for (int i = DATASTART; i < NRSAMPLES; i++) {
66 fSum = 0.0;
67 for (int j = i - (averSize - 1); j <= i; j++) {
68 fSum += valAr[j];
69 }
70 dstAr[i] = fSum / averSize;
71 }
72}
73
74float calcVariance(float valAr[]) {
75 float fMean = 0.0, fVariance = 0.0;
76
77 for (int i = DATASTART; i < NRSAMPLES; i++) {
78 fMean += valAr[i];
79 }
80
81 fMean /= (NRSAMPLES - DATASTART);
82
83 for (int i = DATASTART; i < NRSAMPLES; i++) {
84 fVariance += (valAr[i] - fMean) * (valAr[i] - fMean);
85 }
86
87 return (fVariance /= (NRSAMPLES - DATASTART));
88}
89
90
92
93#define SP(X) Serial.print(X)
94#define SPLN(X) Serial.println(X)
95
96#define BUGP
97#define DATAP
98void setup() {
99 Serial.begin(115200);
100
101#ifdef BUGP
102 SPLN(__FILE__);
103 SPLN(__DATE__);
104 SPLN(">>>>>>>>>>>>>>>");
105#endif
106
108#ifdef DATAP
109 for (int i = 1; i < 20; i += 1) {
110
112
115
116 SP("average window: , ");
117 SP(i);
118 SP(" , mean data: , ");
119 Serial.print(calcMean(fSampleValues), 4);
120 SP(" , aver: , ");
121 Serial.print(calcMean(fAverSampleValues), 4);
122 SP(" , std dev - data: , ");
123 Serial.print(sqrt(plainVariance), 8);
124 SP(" , aver: , ");
125 Serial.println(sqrt(averageVariance), 8);
126 }
127
128
129
130 for (int i = 20; i < 1000; i += 10) {
131
133
136
137 SP("average window: , ");
138 SP(i);
139 SP(" , mean data: , ");
140 Serial.print(calcMean(fSampleValues), 4);
141 SP(" , aver: , ");
142 Serial.print(calcMean(fAverSampleValues), 4);
143 SP(" , std dev - data: , ");
144 Serial.print(sqrt(plainVariance), 8);
145 SP(" , aver: , ");
146 Serial.println(sqrt(averageVariance), 8);
147 }
148#endif
149}
150
151
152void loop() {
153 return;
154
155 static int index = DATASTART;
156 Serial.print(fSampleValues[index], 8);
157 Serial.print(" , ");
158 Serial.print(fAverSampleValues[index], 8);
159 Serial.println(" ");
160 index++;
161 if (NRSAMPLES <= index)
162 index = DATASTART;
163}
float calcVariance(float valAr[])
float calcMean(float a[])
float plainVariance
#define NRSAMPLES
#define DATASTART
float fSampleValues[11000]
void calcAverage(float dstAr[], float valAr[], int averSize)
void doSampling(float dAr[])
#define RESOLUTION
#define SPLN(X)
float averageVariance
#define SP(X)
#define VSUPPLY
float fAverSampleValues[11000]