Mesurar frequencia d'entrada i filtrat per filtre alfa
Dependencies: mbed
main.cpp@0:3c722f935b14, 2015-10-21 (annotated)
- Committer:
- marcRonquillo
- Date:
- Wed Oct 21 20:34:14 2015 +0000
- Revision:
- 0:3c722f935b14
Mesurar frequencia d'entrada + filtrat per filtre alfa
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
marcRonquillo | 0:3c722f935b14 | 1 | #include "mbed.h" |
marcRonquillo | 0:3c722f935b14 | 2 | |
marcRonquillo | 0:3c722f935b14 | 3 | Serial pc(USBTX, USBRX); // I/O amb l'ordinador |
marcRonquillo | 0:3c722f935b14 | 4 | AnalogIn fIn(p17); //p15 -p20 accepten AnalogIn |
marcRonquillo | 0:3c722f935b14 | 5 | float fMitja, fActual, alpha; |
marcRonquillo | 0:3c722f935b14 | 6 | int p, pAnt; |
marcRonquillo | 0:3c722f935b14 | 7 | Timer tFlanc; |
marcRonquillo | 0:3c722f935b14 | 8 | float soroll; //Valor absolut màxim del soroll |
marcRonquillo | 0:3c722f935b14 | 9 | int cont; |
marcRonquillo | 0:3c722f935b14 | 10 | float periode; |
marcRonquillo | 0:3c722f935b14 | 11 | |
marcRonquillo | 0:3c722f935b14 | 12 | int main() { |
marcRonquillo | 0:3c722f935b14 | 13 | p=0; |
marcRonquillo | 0:3c722f935b14 | 14 | pAnt=0; |
marcRonquillo | 0:3c722f935b14 | 15 | fMitja=fIn; |
marcRonquillo | 0:3c722f935b14 | 16 | alpha=0.999; |
marcRonquillo | 0:3c722f935b14 | 17 | cont=0; |
marcRonquillo | 0:3c722f935b14 | 18 | soroll = 0.001; |
marcRonquillo | 0:3c722f935b14 | 19 | |
marcRonquillo | 0:3c722f935b14 | 20 | |
marcRonquillo | 0:3c722f935b14 | 21 | while(1) { |
marcRonquillo | 0:3c722f935b14 | 22 | fActual=fIn; |
marcRonquillo | 0:3c722f935b14 | 23 | fMitja=(alpha*fMitja)+((1-alpha)*fActual); //filtre alfa |
marcRonquillo | 0:3c722f935b14 | 24 | |
marcRonquillo | 0:3c722f935b14 | 25 | //pc.printf("%f\r\n", fActual); |
marcRonquillo | 0:3c722f935b14 | 26 | |
marcRonquillo | 0:3c722f935b14 | 27 | //Es resta l'offset a la senyal tenint en compte el soroll i es comprova si l'ona està per sobre del y=0 (p=1) o per sota (p=0) |
marcRonquillo | 0:3c722f935b14 | 28 | if( (fActual-fMitja) > soroll ) p=1; |
marcRonquillo | 0:3c722f935b14 | 29 | else if( (fActual-fMitja) < -soroll ) p=0; |
marcRonquillo | 0:3c722f935b14 | 30 | |
marcRonquillo | 0:3c722f935b14 | 31 | //Detectar flanc pujada |
marcRonquillo | 0:3c722f935b14 | 32 | if( (pAnt==0) && (p==1) ) { |
marcRonquillo | 0:3c722f935b14 | 33 | cont++; |
marcRonquillo | 0:3c722f935b14 | 34 | if (cont==1) { |
marcRonquillo | 0:3c722f935b14 | 35 | tFlanc.start(); |
marcRonquillo | 0:3c722f935b14 | 36 | } |
marcRonquillo | 0:3c722f935b14 | 37 | if(cont==2){ |
marcRonquillo | 0:3c722f935b14 | 38 | tFlanc.stop(); |
marcRonquillo | 0:3c722f935b14 | 39 | periode = tFlanc.read(); |
marcRonquillo | 0:3c722f935b14 | 40 | tFlanc.reset(); |
marcRonquillo | 0:3c722f935b14 | 41 | cont=0; |
marcRonquillo | 0:3c722f935b14 | 42 | pc.printf("Periode: %f \r\n",periode); |
marcRonquillo | 0:3c722f935b14 | 43 | } |
marcRonquillo | 0:3c722f935b14 | 44 | } |
marcRonquillo | 0:3c722f935b14 | 45 | pAnt=p; |
marcRonquillo | 0:3c722f935b14 | 46 | |
marcRonquillo | 0:3c722f935b14 | 47 | wait(0.0001); |
marcRonquillo | 0:3c722f935b14 | 48 | //pc.printf("%f \r\n",fActual); |
marcRonquillo | 0:3c722f935b14 | 49 | |
marcRonquillo | 0:3c722f935b14 | 50 | } |
marcRonquillo | 0:3c722f935b14 | 51 | } |