1、 SAMPLE accum; /* store input at the beginning of the delay line */ z0 = input; /* calc FIR */ accum = 0; accum += hii * zii; /* shift delay line */ for (ii = ntaps - 2; ii = 0; ii-) zii + 1 = zii; return accum;半带:#includestdio.h#include math.hCommBlockset.hsigpro.hMixer.csigpro.cCORDIC.C#define D 2
2、#define JS 7#define JS2 11#define JS3 7#define JS4 15#define pi 3.14159265358979323846#define DATABLOCKSIZE 128/static double I_ZJS;/static double Q_ZJS;extern void init_VectorInt (VectorInt *pvec, int size);extern void init_VectorReal(VectorReal *vecin, int size);const double HJS = -0.0417399210251
3、7,0,0.2898469769544,0.5,0.2898469769544,0, -0.04173992102517;const double H2JS2 = 0.0477713151347,0, -0.08937867671894,0,0.3124344534422,0.5,0.3124344534422, 0,-0.08937867671894, 0, 0.0477713151347;const double H3JS3 = -0.04348967365368, 0, 0.2909916440201, 0.5, 0.2909916440201, 0, -0.04348967365368
4、;const double H4JS4 = -0.03595079960366, 0, 0.04830608563714, 0, -0.09630011736658, 0, 0.3149368549022, 0.5, 0.3149368549022, 0, -0.09630011736658, 0, 0.04830608563714, 0, -0.03595079960366;double z2IJS=0;double z2QJS=0;double z3IJS2=0;double z3QJS2=0;double z4JS3=0;double z5JS4=0;/*decimate D=2 *do
5、uble filterD2(double *x,double *z,const double *h,int N) for(int j=N-1;j=D;j-) zj=zj-D; for(int k=D-1;k=0;k-) zk=xD-1-k; double sum=0.0; for(int m=0;m(N-1)/2;m+=2) sum+=(zm+zN-1-m)*hm; m-; sum+=zm*hm; return sum;/*main函数*int main() double temp=0.0; double p_mag1,p_phase_rads1; VectorInt input;int i;
6、 VectorReal Iout,Qout; int bufferDATABLOCKSIZE; double IDecmbufDATABLOCKSIZE,QDecmbufDATABLOCKSIZE,x2,outData2DATABLOCKSIZE/2,outData3DATABLOCKSIZE/4,outData4DATABLOCKSIZE/8; double IDecmbuf2DATABLOCKSIZE/2,QDecmbuf2DATABLOCKSIZE/2; FILE *fpin,*fpout=NULL; fpin=fopen(fm_sample.txt,r); fpout=fopen(e:
7、/out.txt ,wt Mixer_Init(); init_VectorInt(&input,DATABLOCKSIZE); init_VectorReal(&Iout,DATABLOCKSIZE);Qout,DATABLOCKSIZE); cordic_construct(50); do for(i=0;iDATABLOCKSIZE;i+) fscanf(fpin,%d,buffer+i); input.pDatai =bufferi; real_mixer(&input,&Iout,&Qout);/* int m=0; for(int il=0;il) for(int jl=0;jlp
8、i) outData2i-=2*pi; while(outData2ii-) zi0=xD-1-i; for(int j=0;jntaps1/D;j+) sum+=hij*zij; for(i=D-1; for(int j=ntaps1/D-1;0; zij=zij-1;double filterD2(double *x,double zDntaps2/D,double hDntaps2/D) for(int j=ntaps2/D-1; int i1,i2,j; double h1Dntaps1/D,h2Dntaps2/D; for(i1=0;i1D;i1+) for(j=0; h1i1j=H
9、1i1+j*D; Iz1i1j=0.0; Qz1i1j=0.0; for(i2=0;i2i2+)ntaps2/D; h2i2j=H2i2+j*D; z2i2j=0.0; double IDecmbuf2DATABLOCKSIZE/D=0,QDecmbuf2DATABLOCKSIZE/D=0; double outDataDATABLOCKSIZE/D,outData2DATABLOCKSIZE/D/D; /memset(I_Z,0,61*Sizeof(double); /memset(Q_Z,0,61*Sizeof(double); fscanf(fpin, input.pDatai =bufferi; real_mixer(& int n=0; for (i = 0; i PI) outDatai-=2*PI; else if(outDatai-PI) outDatai+=2*PI; DATABLOCKSIZE/D; outData2n+ = filterD2(outData+i, z2, h2); /outDATABLOCKSIZE/D/D;,outData2i);return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1