Mesurar frequencia d'entrada i filtrat per filtre alfa

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }