]> git.piffa.net Git - arduino/blob - books/ArduinoNextSteps-master/ArduinoNextSteps/filter_test/filter_test.ino
first commit
[arduino] / books / ArduinoNextSteps-master / ArduinoNextSteps / filter_test / filter_test.ino
1
2
3 // 300 to 3000 band stop filter
4 // 100 kHz sample rate
5 // http://www.schwietering.com/jayduino/filtuino/index.php?characteristic=bu&passmode=bs&order=2&usesr=usesr&sr=100000&frequencyLow=300&noteLow=&frequencyHigh=3000&noteHigh=&pw=pw&calctype=float&run=Send
6
7 //Band stop butterworth filter order=2 alpha1=0.003 alpha2=0.03 
8 class filter
9 {
10         public:
11                 filter()
12                 {
13                         for(int i=0; i <= 4; i++)
14                                 v[i]=0.0;
15                 }
16         private:
17                 float v[5];
18         public:
19                 float step(float x)
20                 {
21                         v[0] = v[1];
22                         v[1] = v[2];
23                         v[2] = v[3];
24                         v[3] = v[4];
25                         v[4] = (8.869368704884e-1 * x)
26                                  + ( -0.7866981284 * v[0])
27                                  + (  3.3285093824 * v[1])
28                                  + ( -5.2961761521 * v[2])
29                                  + (  3.7543536539 * v[3]);
30                         return 
31                                  1.000000 * v[0]
32                                 +v[4]
33                                 - 3.992879 * (v[1] + v[3])
34                                 +5.985770 * v[2];
35                 }
36 };
37
38 filter f;
39
40 void setup() 
41 {
42   Serial.begin(9600);
43 }
44
45 void loop() 
46 {
47   int r = analogRead(A0);
48   float filtered = f.step(r);
49   Serial.print(r); Serial.print(","); Serial.println((int)filtered);
50   delay(100);
51 }
52
53