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;
}