#include
#include
#include
#include"FFT.h"
/*´øÍ¨Â˲¨Òò×Ó
num--Â˲¨Òò×Ó³¤¶È£¨ÆæÊý£©
f0--ͨƵ´øÖÐÐÄÆµÂÊ
hf--ͨƵ´ø°ë¿í¶È
dt--ʱ¼ä²ÉÑù¼ä¸ô(ÓëÊäÈëÐźÅÏàͬ)
*/
void FilterH(float h[],int num,float f0,float hf,float dt)
{
int i,j;
double pi=3.1415926;
float t;
float *w;
//²úÉúººÃ÷ʱ´°w[]
w=(float *)calloc(num,sizeof(float));
for(i=0; i<=num/2; i++)
w[ i ]=0.54+0.46*cos(2*pi*i/num);
for(i=num/2+1; i
w[ i ]=w[num-i];
//²úÉúÂ˲¨Òò×Ó
h[0]=4.0*hf;
for(i=1; i
{
h[ i ]=0.0;
if(i<=num/2)
{ t=i*dt;j=i;}
else
{ j=num-i; t= -j*dt;}
h[ i ]=2.0*sin(2*pi*hf*t)*cos(2*pi*f0*t)*w[ j ]/(pi*t);
}
}
/*ÊäÈëÐźÅÓëÂ˲¨Òò×ÓñÞ»ý
h[]--Â˲¨Òò×Ó,x[]--ÊäÈëÐźÅ
±£Ö¤x[]¸ü³¤,½á¹û´æ·ÅÔÚy[],³¤¶ÈҲΪm
*/
void ConvFilter(float h[],int n,float x[],int m,float y[],float dt)
{
int i,j,k;
int half;
half=(n-1)/2;
for(i=0; i
{
y[ i ]=0.0;
for(j= -half; j<=half; j++)
{
k=i-j;
if(j<0 && k
y[ i ]+=h[n+j]*x[k]*dt;
if(j>=0 && k>=0)
y[ i ]+=h[j]*x[k]*dt;
}
}
}
//²úÉúºÏ³ÉÐźÅ
//30 60 90hzÕýÏÒÐźÅÏà¼Ó
void Generate(float x[],int num)
{
int i;
double pi=3.1415926;
float dt=0.002;
float f1,f2,f3;
f1=30.0;
f2=60.0;
f3=90.0;
for(i=0; i
x[ i ]=sin(2*pi*f1*i*dt)+sin(2*pi*f2*dt*i)+sin(2*pi*f3*i*dt);
}
void main()
{
const int N=101;//Â˲¨Òò×Ó³¤¶È
const int M=128;//Ðźų¤¶È
float Inisig[M]={0};//ÒªÂ˲¨µÄÐźÅ
float Afsig2[M]={0};//Â˲¨ºóµÄÐźÅ
float Afsig[M]={0};//ÀíÏëÇé¿öÏÂÂ˲¨ºóµÄÐźÅ
float h[N];//Â˲¨Òò×Ó
int i;
FILE *fp1,*fp2,*fp3;
fp1=fopen("inisig.txt","w" );//ºÏ³ÉÐźÅ
fp2=fopen("afsig.txt","w" );//ÀíÏë50hzÐźÅ
fp3=fopen("afsig2.txt","w" );//Â˲¨µÃµ½µÄ50hzÐźÅ
//²úÉúÐźÅ,20hz,50hz,80hzÕýÏÒÐźŵþ¼Ó
double pi=3.1415926;
float dt=0.002;
float f1,f2,f3;
f1=20.0;
f2=50.0;
f3=80.0;
for(i=0; i
{ Afsig[ i ]=sin(2*pi*f2*dt*i);
Inisig[ i ]=Afsig+sin(2*pi*f1*i*dt)+sin(2*pi*i*f3*dt);
}
FilterH(h,N,50.0,10.0,dt);
//ÂËÈ¥µÍÓÚ70hzºÍ¸ßÓÚ80hzÐźÅ
ConvFilter(h,N,Inisig,M,Afsig2,dt);
for(i=0; i
{
fprintf(fp1,"%f\n",Inisig[ i ]);
fprintf(fp2,"%f\n",Afsig[ i ]);
fprintf(fp3,"%f\n",Afsig2[ i ]);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
}
Â˲¨Ç°£º![]()
Â˲¨ºó£º![]()
[ Last edited by baobiao007 on 2011-2-14 at 20:42 ] |