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;

}