dsp方波谐波分析.docx
- 文档编号:8043309
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:9
- 大小:57.47KB
dsp方波谐波分析.docx
《dsp方波谐波分析.docx》由会员分享,可在线阅读,更多相关《dsp方波谐波分析.docx(9页珍藏版)》请在冰豆网上搜索。
dsp方波谐波分析
基于DSP的方波信号谐波分析
(2010-07-2418:
59:
06)
转载
标签:
杂谈
分类:
技术
一切周期非正弦信号都是由某一频率的正弦波(基波)和若干数倍于此频率的正弦波(高次谐波)叠加而成。
谐波分析的工作就是了解一个信号的基波和谐波的组成及其占比。
该设计使用基于TMS320C5509A的DSP实验箱,软件环境为CCS3.1。
首先是对信号的采集。
主要是对输入信号进行AD转换,采样率越高,则分析精度越高,但硬件消耗同时加大。
关于AD信号的参考程序不做列举。
采信到信号后进行调整,主要是化为以弧度为单位的数值(比例关系)。
之后进行FFT变换即可得到信号频谱图。
快速傅立叶变换的算法是蝶型算法,即交叉排序后进行乘加运算,关于算法的详细介绍和优点可以参考数字信号处理一类书。
以下是FFT参考程序:
voidFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER])
{
intx0,x1,x2,x3,x4,x5,x6,xx;
inti,j,k,b,p,L;
floatTR,TI,temp;
for(i=0;i { x0=x1=x2=x3=x4=x5=x6=0; x0=i&0x01;x1=(i/2)&0x01;x2=(i/4)&0x01;x3=(i/8)&0x01;x4=(i/16)&0x01;x5=(i/32)&0x01;x6=(i/64)&0x01; xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6; dataI[xx]=dataR[i]; } for(i=0;i { dataR[i]=dataI[i];dataI[i]=0; } for(L=1;L<=7;L++) { b=1;i=L-1; while(i>0) { b=b*2;i--; } for(j=0;j<=b-1;j++) { p=1;i=7-L; while(i>0) { p=p*2;i--; } p=p*j; for(k=j;k<128;k=k+2*b) { TR=dataR[k];TI=dataI[k];temp=dataR[k+b]; dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p]; dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p]; dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p]; dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p]; } } } for(i=0;i { w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]); } } 运行后打来Graphics窗口观察信号其及频谱图如下: 图注: 左上为输入信号采样后的波形,可见为方波信号。 右上为根据方波信号由系统自己转换的频谱图。 右下为根据编写的程序计算得出的信号频谱图。 可见计算结果与实际频谱的尖峰分布比较一致。 不同的地方是成份较小的频率部分。 个人认为原因可能有两点: 一是计算频谱图的精度取决于采样点数,采样点越大,谱频越精确;二是输入信号本身有噪声,因此计算FFT时的对象信号实际上是一个方波信号与高斯噪声信号的叠加,最后的频谱中有白噪声的频谱。 #include"myapp.h" #include"ICETEK-VC5509-EDU.h" #include"scancode.h" #include #definePI3.1415926 #defineSAMPLENUMBER256 voidInitForFFT(); //voidMakeWave(); voidFFT(); voidInitADC(); voidwait(unsignedintcycles); voidEnableAPLL(); unsignedintnADC0[256],nADC1[256]; //intINPUT[SAMPLENUMBER],DATA[SAMPLENUMBER]; floatfWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER]; floatsin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER]; main() { inti,j; unsignedintuWork; InitForFFT(); EnableAPLL(); SDRAM_init(); InitADC(); PLL_Init(132); //while (1) //{ for(i=0;i<256;i++) { ADCCTL=0x8000;//启动AD转换,通道0 do { uWork=ADCDATA; }while(uWork&0x8000); nADC0[i]=uWork&0x0fff; } /*for(i=0;i<256;i++) { ADCCTL=0x9000;//启动AD转换,通道1 do { uWork=ADCDATA; }while(uWork&0x8000); nADC1[i]=uWork&0x0fff; } asm("nop");//breakpoint*/ //} for(j=0;j { fWaveR[j]=nADC0[j]; fWaveI[j]=0.0f; w[j]=0.0f; } FFT(fWaveR,fWaveI); for(j=0;j { DATA[j]=w[j]; } while (1);//breakpoint } voidFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER]) { intx0,x1,x2,x3,x4,x5,x6,xx; inti,j,k,b,p,L; floatTR,TI,temp; /**********followingcodeinvertsequence************/ for(i=0;i { x0=x1=x2=x3=x4=x5=x6=0; x0=i&0x01;x1=(i/2)&0x01;x2=(i/4)&0x01;x3=(i/8)&0x01;x4=(i/16)&0x01;x5=(i/32)&0x01;x6=(i/64)&0x01; xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6; dataI[xx]=dataR[i]; } for(i=0;i { dataR[i]=dataI[i];dataI[i]=0; } /**************followingcodeFFT*******************/ for(L=1;L<=7;L++) {/*for (1)*/ b=1;i=L-1; while(i>0) { b=b*2;i--; }/*b=2^(L-1)*/ for(j=0;j<=b-1;j++)/*for (2)*/ { p=1;i=7-L; while(i>0)/*p=pow(2,7-L)*j;*/ { p=p*2;i--; } p=p*j; for(k=j;k<128;k=k+2*b)/*for(3)*/ { TR=dataR[k];TI=dataI[k];temp=dataR[k+b]; dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p]; dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p]; dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p]; dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p]; }/*ENDfor(3)*/ }/*ENDfor (2)*/ }/*ENDfor (1)*/ for(i=0;i { w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]); } }/*ENDFFT*/ voidInitForFFT() { inti; for(i=0;i { sin_tab[i]=sin(PI*2*i/SAMPLENUMBER); cos_tab[i]=cos(PI*2*i/SAMPLENUMBER); } } /*voidMakeWave() { inti; for(i=0;i { INPUT[i]=sin(PI*2*i/SAMPLENUMBER*3)*1024; } }*/ voidInitADC() { ADCCLKCTL=0x23;//4MHzADCLK ADCCLKDIV=0x4f00; } voidwait(unsignedintcycles) { inti; for(i=0;i } voidEnableAPLL() { /*EnusreDPLLisrunning*/ *(ioportvolatileunsignedshort*)0x1f00=4; wait(25); *(ioportvolatileunsignedshort*)0x1f00=0; //MULITPLY *(ioportvolatileunsignedshort*)0x1f00=0x3000; //COUNT *(ioportvolatileunsignedshort*)0x1f00|=0x4F8; wait(25); //*(ioportvolatileunsignedshort*)0x1f00|=0x800 //MODE *(ioportvolatileunsignedshort*)0x1f00|=2; wait(30000); //APLLSelect *(ioportvolatileunsignedshort*)0x1e80=1; //DELAY wait(60000); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 方波 谐波 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)