本文基于合众达的dsp试验箱,采集实验箱上信号发生器产生的信号,并对信号进行fft变换,通过ccs观察结果。
函数进行调用,当然其它被调用函数也可以再去调用更多函数,这样整个程序的运行轨迹就像一种栈,有时我们称之为调用栈。
主函数既是程序的入口,又是程序的出口。由于主函数肩负着入口和出口的重任,所以最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。主函数应该尽量简洁,具体的实现细节应该封装到被调用的子函数里面去。
在这个主程序中,可以调用后续的FFT初始化函数程序,时间抽取法FFT程序,以及倒序运算函数程序,是整个程序的中转站。
4.4 旋转因子的软件实现
for(m=1;m<=Mum;m++) {
B=(int)(pow(2,m-1)+0.5); //B=2^(m-1)
for(j=0;j<B;j++) //每级需要进行B种蝶形运算 {S=j*(int)(pow(2,Mum-m)+0.5);
for(k=j;k<=N-1;k+=(int)(pow(2,m)+0.5)) {
X=Xr[k+B]*cos_tab[S]+Xi[k+B]*sin_tab[S];//采用循环寻址方式对正弦 Y=Xi[k+B]*cos_tab[S]-Xr[k+B]*sin_tab[S];//表和余弦表进行寻址 Xr[k+B]=Xr[k]-X; Xi[k+B]=Xi[k]-Y; Xr[k]=Xr[k]+X; Xi[k]=Xi[k]+Y; } } }
旋转因子是复数,可表示为:
WN e
k
j2 k/N
cos(2 k/N) jsin(2 k/N) (4-1)
由式(4-1)可以看出旋转因子的实部为余弦函数,虚部为正弦函数。为了获得FFT运算中需要的全部旋转因子,需要分别存储正弦表和余弦表,且每个表长度为N,对应于0°~180°,同时,采用循环寻址方式对正弦表和余弦表进行寻址。
4.5 FFT初始化
void InitForFFT() //FFT初始化函数,建立正余弦函数表 {
int i;
for(i=0;i<N;i++)
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于dsp的快速傅里叶变换程序设计(16)在线全文阅读。
相关推荐: