Exemple #1
0
void modulador() {

    codificador();
    mapeador();
    muestreo();
    filtro();
    oscilador();
    sumador();
    introducirSincronizacion();
    crearEntradaParaDAC();
}
        int main(int argc, char* argv[]){
     
                SNDFILE *sf;
                SF_INFO info;
                FILE *fout,*res;
                short int *buffer, max=0;
                float *fbuffer,max2,med,min;
                int num, num_samples, frames, channels, i, j, c;
                char fname[20];
                char fOutName[25];
                res = fopen("res.csv","w");
          DIR           *d;
          struct dirent *dir;
          d = opendir(argv[1]);
          if (d)
          {
                while ((dir = readdir(d)) != NULL)
                {
     
     
                sf = sf_open(dir->d_name,SFM_READ,&info);
                if (sf == NULL){
                        continue;
                }
                fprintf(res,"%s,",dir->d_name);
                frames = info.frames;
                channels = info.channels;
                num_samples = frames*channels;
                buffer = (short int *)malloc(num_samples*sizeof(short int));
                num = sf_read_short(sf,buffer,num_samples);
                sf_close(sf);
     
                //fout nome -> fopen nome + .csv
                //fout = fopen("amostraskalimu.csv","w");
     
     
                buffer=filtro(buffer,num_samples);//filtro média flutuante
                num_samples-=VALORdeSALTO;//retirar as posições eliminadas
                buffer=realloc(buffer,sizeof(short)*(num_samples));
     
     
                max=findMaxAbs(buffer,num_samples);//encontrar máximo
                fbuffer = (float *)malloc(num_samples*sizeof(float));
                fbuffer=normal(buffer,num_samples,max);//normalização
     
     
     
                fbuffer=decima(fbuffer,num_samples);//decimação
                num_samples/=DECVALUE;//igualar num_samples a "j" da função decima()
     
                fbuffer=envelope(fbuffer,num_samples);//Envelope Shannon
     
                //max2=findMaxAbsfloat(fbuffer,num_samples);
                //fbuffer=normalfloat(fbuffer,num_samples,max2);
                //min=findMinAbsfloat(fbuffer,num_samples);
                //med=Media(fbuffer,num_samples);
	                
		int * peaks = NULL;
		int ccc = 0;
                peaks = s1s2toVector(fbuffer,num_samples,peaks,&ccc);
		if(fbuffer[peaks[0]]<fbuffer[peaks[1]] && fbuffer[peaks[1]]>fbuffer[peaks[2]])
			fprintf(res," ,");
		for(i=0;i<ccc;i++)
 			fprintf(res,"%d,",peaks[i]);

		/*
		//printf("::::%d\n",ccc); /// ccc ---> size do vetor
		//for(i=0;i<ccc;i++)
		//	printf("%d: %d\n",i,peaks[i]);
                //int borders[ccc*2];
                //areaofbeats(fbuffer,peaks,sizeof(peaks)/sizeof(int),10,borders);
                //float temp[sizeof(fbuffer)/sizeof(float)];
                TEMPbordersToGraph(fbuffer,borders,temp);
             */ //  s1s2(fbuffer,num_samples,res);
	         
	      /* for (i=0;i<num_samples;i+=channels){//escrita para o ficheiro
                      for (j=0;j<channels;j++){
     
                                      fprintf(fout,"%d %f",i+j+1,fbuffer[i+j]);
                      }
                      fprintf(fout,"\n");
                }
     */
     
                /*
                for (i=0;i<num_samples;i++){//escrita para o ficheiro
                        fprintf(fout,"\n");
                }
                */
     
                fprintf(res,"\n");
                //fclose(fout);
                }
     
                closedir(d);
                }
        fclose(res);
     
     
        return 0;
     
        }
void ConjugateGradient(int n, Matriz* A, Matriz* b, Matriz* x)
{

	int k;

	double alfa, beta, alfaNum, alfaDen, betaNum;

	Matriz d;
	Matriz d1;   // proximo vetor d
	Matriz r;
	Matriz r1;   // proximo vetor r
	Matriz x1;   // proximo vetor x
	Matriz w;    // vetor que recebe Ax
	Matriz w1;	  // vetor multiplica Adk
	Matriz temp; // vetor temporario
	Matriz temp2; // vetor temporario2
	int iteracoes = 0;

	cria_linhas(n, &d);  //Criando vetor d
	cria_linhas(n, &d1); //Criando vetor d1
	cria_linhas(n, &r); //Criando vetor r
	cria_linhas(n, &r1); //Criando vetor r1
	cria_linhas(n, &x1); //Criando vetor x1
	cria_linhas(n, &w); //Criando vetor w
	cria_linhas(n, &w1); //Criando vetor w1
	cria_linhas(n, &temp); //Criando vetor temp
	cria_linhas(n, &temp2); //Criando vetor temp


	multiplicacao_matriz_vetor(A, x, &w); //multipica Ax, salva em w

	print(&w);
	printf("-------------w \n");

	subtrai_vetores(b, &w, &temp2); //diminui b-w  --> b - Ax , salva em w

	print(&temp2);
	printf("-------------temp2 \n");
	copia(&temp2, &w);
	printf("-------------w \n");

	copia(&w, &r); // copia r = w 

	print(&r);
	printf("-------------r \n");

	copia(&r, &d); // copia d = r

	print(&d);
	printf("-------------d \n");
	
	for (k = 0; k < n; k++, iteracoes++)
	{

		if (r.i[0].numero_de_colunas == 0)
			break;

		alfaNum = multiplicacao_vetor_vetor(&r, &r); // rT*r ---> numerador de alfa

		printf("%f \n", alfaNum);
		printf("-------------AlfaNum \n");

		transposta(&d, &temp2);
		multiplicacao_matriz_vetor(A, &temp2, &w1); // Ad ---> matriz A * dk, denominador de alfa e salva no vetor w1
		transposta(&w1, &temp2);
		copia(&temp2, &w1);
		filtro(&w1);

		print(&w1);
		printf("------------w1 \n");

		alfaDen = multiplicacao_vetor_vetor(&d, &w1); // dkT * Adk --> multiplicao no denominador de alfa
				
		printf("%f \n", alfaDen);
		printf("-------------alfaDen \n");

		alfa = alfaNum / alfaDen; // calculo do alfa

		printf("%f \n", alfa);
		printf("-------------alfa \n");

		// inicio do calculo de Xk+1

		multiplicacao_escalar_vetor(alfa, &d, &temp); //alfa * d --> multiplica alfa pelo vetor d 

		print(&temp);
		printf("------------temp \n");

		adicao_vetores(x, &temp, &x1); // Xk + alfaDk  ---> soma de vetores

		print(&x1);
		printf("-----------x1 \n");

		multiplicacao_escalar_vetor(alfa, &w1, &temp); // alfa * Adk 

		print(&temp);
		printf("-----------temp \n");

		subtrai_vetores(x, &temp, &r1); // Rk+1 = Rk - alfa*Adk

		print(&r1);
		printf("-----------r1 \n");

		betaNum = multiplicacao_vetor_vetor(&r1, &r1); // Rk+1(transposto) * Rk+1

		printf("%f \n", betaNum);
		printf("-----------betaNum \n");

		beta = betaNum / alfaNum; // denominador de Beta eh o mesmo numerador de alfa

		printf("%f \n", beta);
		printf("-----------beta \n");

		multiplicacao_escalar_vetor(beta, &d, &temp); // beta * dk

		print(&temp);
		printf("-----------temp \n");

		adicao_vetores(&r1, &temp, &d1); // Rk+1 + beta * dk 

		print(&d1);
		printf("-----------d1 \n");

		copia(&r1, &r);
		copia(&x1, x);
		copia(&d1, &d);

	}



}
void calculaValorFinal(byte NroChanel){
  
  static bool fisrtTime=TRUE;
 
  int valorLinealizado;
  int vCompTamb;
  long tmpVal;
  
  
  if(fisrtTime==TRUE){                                  //es la primera vez?
    //descarto la primera medicion
    fisrtTime=FALSE;
    return;
  }
  
  
    #ifdef RUVAC
    	Linealizar(valnorm(NroChanel),SENSOR_MV,&valLinealizadoMV[NroChanel]);                               //linealizo mv 
   		valLinealizadoMV[NroChanel]=(int)((long)(valLinealizadoMV[NroChanel]+getValParametro(R_Offset+i))*getValParametro(R_Gan+i)/1000);          //aplico offset y gan	                                            
    #endif 
   
    vCompTamb =	CompTempAmb((t_sensor)getValParametro((R_Sensor+NroChanel)));          
   
    if (SENSOR_Tipo(getValParametro(R_Sensor+NroChanel))==TermoCupla)
  /*como la termocupla me entrega los mv de la diferencia(jc-jf)para compensar debo !sumar los mv de jf*/
      EstatusResult[NroChanel]=Linealizar((long)(valnorm(NroChanel)+(long)vCompTamb),(t_sensor)getValParametro(R_Sensor+NroChanel),&valorLinealizado);
    else
      EstatusResult[NroChanel]=Linealizar(valnorm(NroChanel),(t_sensor)getValParametro(R_Sensor+NroChanel),&valorLinealizado);
      
     tmpVal=(long)valorLinealizado;
  
    
     if(SENSOR_Tipo(getValParametro(R_Sensor+NroChanel))==TermoResistencia)
        tmpVal = (long)((long)(valorLinealizado+PRom[R_ACP+NroChanel])*(1000+PRom[R_AGP+NroChanel])/1000);  
   
 
     if(SENSOR_Tipo(getValParametro(R_Sensor+NroChanel))!=Lineal)      
        tmpVal/= div_dec[SENSOR_Decimales(getValParametro(R_Sensor+NroChanel))-getValParametro(R_Decimales+NroChanel)];  
   
     if(tmpVal>9999) 
        EstatusResult[NroChanel]=ERR_OF;
	   else if (tmpVal<-1999) 
	      EstatusResult[NroChanel]=ERR_UF;
	 
     #ifdef TARA	 
	      puestaCero();
     #endif	 

	   tmpVal=(long)(tmpVal+getValParametro(R_Offset+NroChanel))*getValParametro(R_Gan+NroChanel)/1000;         //preciso para pasar a long


     ValoresCalculados[NroChanel] = filtro ((int)tmpVal,
                                     getValParametro(R_Filtro1+NroChanel),
                                     DELTAT/100,
                                     200,
                                     &buffer_fil[NroChanel]
                                    );

 

    if (PRom[R_Ver]==VER_DIF)
        ValoresCalculados[0]=ValoresCalculados[0] - ValoresCalculados[1];
				
    #ifdef SENS_HUMEDAD
      if(getValParametro(R_Sensor+1)==SENSOR_HUM){
        Humedad = interpolacionDoble();
        if(Humedad ==ERR_OF)
          EstatusResult[1]=ERR_OF;
      }
    #endif


    #ifdef CCAL 
	    monit_colcal();
    #endif
  
    #ifdef HOLD
      if(getFlagHold())
        ValoresCalculados[0]=getBuffer();
    #endif 

    #ifdef MMAX
      calculoMmax();
      if(getFlagMmax())
        ValoresCalculados[0]=getBufferMmax();
    #endif
 

}