1、FFT插值算法程序1.#includestdafx.h 2.#includeFft.h 3.#includemath.h 4.5.constdoubleMOD_MAX=65535.0;6.constdoubleDISP_MAX=1.0/255.0;7.externFILE*fp;8.9.10.11.12.13./FFT运算必须参数 14.intfft_point,fft_order,fft_divide,fft_window,fft_scale;15.boolfft_cover;16.floatfilter7;/FIR滤波参数 17.18.externFILE*fpIandQ;19.exter
2、nboolm_bIqWrite;20.doubleprFilter256,piFilter256;21.22.23./*24.0RectangleWindow矩形窗25.FFT变换结果为对称型,矩形窗是使信号突然截断,旁瓣会很大,且衰减较慢,旁瓣的第一个负26.峰值为主瓣的21,第一个正峰值为主瓣的12.6,第二个负峰值为主瓣的9,效果一般,泄27.漏较大。28.*/29.doubleWINAPIRectangleWindow(intt)30.31.doublewt;32.wt=1.0;33.returnwt;34.35.36./*37.1TriangleWindow三角窗,也称费杰(Feje
3、r)窗,Bartlett38.*/39.doubleWINAPITriangleWindow(intt)40.41.42.doublewt;43.wt=1-t/fft_point;44.returnwt;45.46.47./*48.2HanningWindwo汉宁窗,即升余弦窗49.*/50.doubleWINAPIHanningWindow(intt)51.52.doublewt;53.wt=(1-cos(2*PI*t/fft_point)/2;54.returnwt;55.56.57./*58.3HammingWindow海明窗,即改进的升余弦窗59.*/60.doubleWINAPIHa
4、mmingWindow(intt)61.62.doublewt;63.wt=0.54-0.46*cos(2*PI*t/fft_point);64.returnwt;65.66.67./*68.4BlackmanWindow布来克曼窗,即三阶升余弦窗69.*/70.doubleWINAPIBlackmanWindow(intt)71.72.doublewt;73.wt=0.42-0.5*cos(2*PI*t/fft_point)+0.08*cos(4*PI*t/fft_point);74.returnwt;75.76.77./*78.5CosgradeWindow余弦坡度窗79.*/80.dou
5、bleWINAPICosgradeWindow(intt)81.82.doublewt;83.if(t=int(4*fft_point/5)84.wt=1.0;85.else86.wt=(1+cos(5*PI*t/fft_point)/2;87.returnwt;88.89.90.91./*92.6ParzenWindow帕曾窗93.*/94.doubleWINAPIParzenWindow(intt)95.96.doublewt;97.if(t=int(fft_point/2)98.wt=1-6*pow(t/fft_point,2)+6*pow(t/fft_point,3);99.else1
6、00.wt=2*pow(1-t/fft_point,3);101.returnwt;102.103.104./*105.7ExponentWindow指数窗106.*/107.doubleWINAPIExponentWindow(intt)108.109.doublewt,alf;110.alf=0.0001;111.wt=exp(-1.0)*alf*t);112.returnwt;113.114.115./*116.8GaussWindow高斯窗117.*/118.doubleWINAPIGaussWindow(intt)119.120.doublewt,alf;121.alf=0.0001
7、;122.wt=exp(-1*alf*t*t);123.returnwt;124.125.126./*127.9KaiserWindow凯泽窗,128.凯泽在1966(1974)发现,利用第一类零阶修正(变形)贝赛尔函数可以构成一种近似最佳的窗129.最主要参数:beat可同时调整主瓣宽度和旁瓣,beat越大,窗越窄,频谱旁瓣越小,但主瓣相应增加130.beta=0相当与矩形窗131.*/132.doubleWINAPIKaiserWindow(intt)133.134.doublewt,alfa,beta;135.alfa=(fft_point-1)/2;136.beta=0;137./Be
8、ssel零阶第一类贝塞尔函数 138.wt=Jim_Bessel0_R(0,beta*sqrt(1-pow(t-alfa)/alfa,2)/Jim_Bessel0_R(0,beta);139.returnwt;140.141.142./*143.10ChebWindow契比雪夫窗144.*/145.doubleWINAPIChebWindow(intt)146.147.doublewt;148.wt=1.0;149.returnwt;150.151.152./*153.11BartlettWindow巴特利特窗154.*/155.doubleWINAPIBartlettWindow(intt)
9、156.157.doublewt;158.wt=1.0;159.returnwt;160.161.162.boolWINAPIfftInit(intpoint,intorder,intdivide,boolcover,intscale)163.164.165.fft_point=point;166.fft_order=order;167.fft_divide=divide;168.fft_cover=cover;169.fft_scale=scale;170./采用8阶的FIR滤波 171.Jim_FirFilter(7,3,50,7800/2.0,7800.0,1,filter);172.r
10、eturnTRUE;173.174.175.176.BOOLWINAPIfftEnd()177.178.returnTRUE;179.180.181.182.183.184./傅立叶变换 185.BOOLWINAPIfftTransform(VOID*inBuf,VOID*outBuf,intwindows,intscale,intnProbe,intnWork)186.187.BYTE*srcPtr=(BYTE*)inBuf;/数据源1024字节 188.BYTE*dstPtr=(BYTE*)outBuf;/数据果256字节 189./double*testPtr=(double*)test
11、Buf; 190.WORDIvalue,Qvalue;191./WORDIvalueRev,QvalueRev; 192.unsignedcharflagQ,flagI;193./doublealfa,e; 194.inti,j,Iorg=0,Qorg=0;195.doublemod=0;196.if(nProbe=LEFT_PROBE)197.198.flagQ=0x30,flagI=0x20;199.200.else201.202.flagQ=0x10,flagI=0x0;203.204.205./每次取4个字节数据,分离I/Q分量,判断db(12),0表示I分量,1表示Q分量 206.i
12、f(srcPtr1&0xf0)=flagQ)&(srcPtr3&0xf0)=flagI)207.208.Iorg=2;209.Qorg=0;210.211.if(srcPtr1&0xf0)=flagI)&(srcPtr3&0xf0)=flagQ)212.213.Iorg=0;214.Qorg=2;215.216.doublepr256,pi256,w;217.218.219./计算自相关函数和互相关函数 220./doubleRii=0.0,Rqq=0.0,Riq=0.0; 221.222.for(i=0;ifft_point;i+)223.224.225./更改存储的偏移地址分离I/Q, 2
13、26.Ivalue=*(short*)(srcPtr+i*4+Iorg);227.Qvalue=*(short*)(srcPtr+i*4+Qorg);228./位非运算,低12位位有效数据 229.pri=double(Ivalue&0xfff);230.pii=double(Qvalue&0xfff);231.232./*Rii=Rii+double(pri*pri);233.Rqq=Rqq+double(pii*pii);234.Riq=Riq+double(pri*pii);*/235.236.237./*Rii=Rii/fft_point;238.Rqq=Rqq/fft_point;2
14、39.Riq=Riq/fft_point;240.241.alfa=asin(Riq/sqrt(Rii*Rqq);242.e=sqrt(Rqq/Rii)-1;*/243.244.for(i=0;ifft_point;i+)245.246./防止谱泄漏,进行加窗处理 247.switch(windows)248.249.caseWND_RECTANGLE:w=RectangleWindow(i);break;250.caseWND_TRIANGLE:w=TriangleWindow(i);break;251.caseWND_HANNING:w=HanningWindow(i);break;252
15、.caseWND_HAMMING:w=HammingWindow(i);break;253.caseWND_BLACKMAN:w=BlackmanWindow(i);break;254.caseWND_COSGRADE:w=CosgradeWindow(i);break;255.caseWND_PARZEN:w=ParzenWindow(i);break;256.caseWND_EXPONENT:w=ExponentWindow(i);break;257.caseWND_GAUSS:w=GaussWindow(i);break;258.caseWND_KAISER:w=KaiserWindow
16、(i);break;259.caseWND_CHEB:w=ChebWindow(i);break;260.caseWND_BARTLETT:w=BartlettWindow(i);break;261.default:w=RectangleWindow(i);break;262.263.264./*pri=(1+e)*cos(alfa)*pri)/(1+e)*cos(alfa)*w;265.pii=(pii-(1+e)*sin(alfa)*pri)/(1+e)*cos(alfa)*w;*/266.267.pri=pri*w;268.pii=pii*w;269.prFilteri=piFilteri=0.0;270.for(j=0;j255)273.274.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1