Programa en C

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#define TAPS 101    //longitud del filtro FIR

#define LEN 1000    //numero de muestras tomadas

int llenado(double *);

int filtrado(double *);

int main(void){     //funcion main que llama a las demas

    int d;

    double vec[LEN];

    llenado(vec);

    filtrado(vec);

    printf("terminado...\n");

    scanf("%d",&d);

    return 0;

    }

    

//Funcion que genera una señal compuesta de dos señoidales superpuestas

int llenado(double * vec){

    double rad;

    int i,j;

     

    FILE *fp;

    fp=fopen("original.txt","w");

    rad=3.1415/180;

    for(i=0;i<=LEN-1;i++){

        vec[i]=1*(sin((double)(i*rad*4))+sin((double)(i*rad*80)));

        fprintf(fp,"%f\n",vec[i]);

            }  

    fclose(fp);

}

//funcion que toma señal y la filtra segun coeficientes del filtro FIR

int filtrado(double * vec){ 

     

   static double k[TAPS] = {

0.000000, 

-0.000022, 

-0.000058, 

-0.000110, 

-0.000181, 

-0.000271, 

-0.000383, 

-0.000517, 

-0.000673, 

-0.000848, 

-0.001040, 

-0.001245, 

-0.001457, 

-0.001669, 

-0.001873, 

-0.002058, 

-0.002213, 

-0.002326, 

-0.002382, 

-0.002367, 

-0.002267, 

-0.002068, 

-0.001754, 

-0.001313, 

-0.000732, 

-0.000000, 

0.000890, 

0.001945, 

0.003168, 

0.004558, 

0.006111, 

0.007821, 

0.009676, 

0.011662, 

0.013760, 

0.015948, 

0.018202, 

0.020495, 

0.022796, 

0.025075, 

0.027298, 

0.029434, 

0.031450, 

0.033314, 

0.034996, 

0.036471, 

0.037712, 

0.038700, 

0.039418, 

0.039854, 

0.040000, 

0.039854, 

0.039418, 

0.038700, 

0.037712, 

0.036471, 

0.034996, 

0.033314, 

0.031450, 

0.029434, 

0.027298, 

0.025075, 

0.022796, 

0.020495, 

0.018202, 

0.015948, 

0.013760, 

0.011662, 

0.009676, 

0.007821, 

0.006111, 

0.004558, 

0.003168, 

0.001945, 

0.000890, 

-0.000000, 

-0.000732, 

-0.001313, 

-0.001754, 

-0.002068, 

-0.002267, 

-0.002367, 

-0.002382, 

-0.002326, 

-0.002213, 

-0.002058, 

-0.001873, 

-0.001669, 

-0.001457, 

-0.001245, 

-0.001040, 

-0.000848, 

-0.000673, 

-0.000517, 

-0.000383, 

-0.000271, 

-0.000181, 

-0.000110, 

-0.000058, 

-0.000022, 

0.000000,

}; 

int j,i;

double res[LEN];

FILE *fo;

fo=fopen("filtrado.txt","w");

    for(i=TAPS+2;i<=LEN-TAPS-2;i++){

        res[i]=0;

        for(j=0;j<=TAPS-1;j++)

           res[i]+=k[j]*vec[i-j]; 

                 

        fprintf(fo,"%f\n",res[i]);

    }    

    fclose(fo);

    return 0;

    }