資源簡介
用于計算實序列的快速傅立葉變換c源程序(對于按時間抽取的基2復序列FFT算法進行一定的修改)。
代碼片段和文件信息
#include
#include
void?rfft(double?x[]int?n);
//void?fft(double?x[]double?y[]int?nint?sign);
void?main()
{
?int?in;
?double?x[64];
?n=64;
?for(i=0;i<10;i++) //設置函數
?x[i]=0.0;
?for(i=10;i ?x[i]=exp(-(i-10)/15.0)*sin(6.2831853*(i-10)/16.0);
?printf(“\n輸入序列x[i]為:\n“);
?for(i=0;i ?{printf(“%10.7f“x[i]);
??if(i%4==0)
??printf(“\n“);
?}
?rfft(xn);
?printf(“\n離散傅立葉變換X(k)為:\n“);
?printf(“%10.7f“x[0]);
?printf(“ %10.7f+j%10.7f\n“x[1]x[n-1]);
?for(i=2;i ?{
??printf(“%10.7f+j%10.7f“x[i]x[n-i]);
??printf(“??????????%10.7f+j%10.7f“x[i+1]x[n-i-1]);
??printf(“\n“);
?}
?printf(“%10.7f“x[n/2]);
?printf(“ %10.7f+j%10.7f\n“x[n/2-1]-x[n/2+1]);
?for(i=2;i ?{
??printf(“%10.7f+j%10.7f“x[n/2-i]-x[n/2+i]);
??printf(“?????????%10.7f+j%10.7f“x[n/2-i-1]-x[n/2+i+1]);
??printf(“\n“);
?}
/*?for(i=0;i ?y[i]=0;
?fft(xyn-1);
?printf(“傅立葉逆變換x(i)為:\n“);
?for(i=0;i ?{
??for(j=0;j<2;j++)
??printf(“%10.7f+j%10.7f “x[2*i+j]y[2*i+j]);
??printf(“\n“);
?}*/
}
void?rfft(double?x[]int?n)
{
?int?ijkmi1i2i3i4n1n2n4;
?double?aeccssxtt1t2;
?for(j=1i=1;i<16;i++)
?{
??m=i;
??j=2*j;
??if(j==n)
??break;
?}
?n1=n-1;
?for(j=0i=0;i ?{
??if(i ??{
???xt=x[j];
???x[j]=x[i];
???x[i]=xt;
??}
??k=n/2;
??while(k<(j+1))
??{
???j=j-k;
???k=k/2;
- 上一篇:Linux 串口源代碼純C++
- 下一篇:vc++ 數據采集卡編程
評論
共有 條評論