在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2777|回复: 7

[原创] 与大家共享一些资料——DSP应用程序

[复制链接]
发表于 2006-10-25 12:26:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 cjsb37 于 2013-4-29 09:11 编辑

/*时间抽选基2FFT及IFFT算法C语言实现*/
/*Author :Junyi Sun*/
/*Copyright 2004-2005*/
/*Mail:ccnusjy@yahoo.com.cn*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 1000
/*定义复数类型*/
typedef struct{
     double real;
     double img;
}complex;

complex x[N], *W; /*输入序列,变换核*/
int size_x=0;     /*输入序列的大小,在本程序中仅限2的次幂*/
double PI;        /*圆周率*/

int main(){
     int i,method;
     void fft();    /*快速傅里叶变换*/
     void ifft();
     void initW();  /*初始化变换核*/
     void change(); /*变址*/
     void add(complex a,complex b,complex *c); /*复数加法*/
     void mul(complex a,complex b,complex *c); /*复数乘法*/
     void sub(complex a,complex b,complex *c); /*复数减法*/
     void divi(complex a,complex b,complex *c);/*复数除法*/
     void output();                            /*输出结果*/
     system("cls");
     PI=atan(1)*4;
     printf(&quotlease input the size of x:\n");
     scanf("%d",&size_x);
     printf(&quotlease input the data in x[N]:\n");
     for(i=0;i<size_x;i++)
           scanf("%lf%lf",&x.real,&x.img);
     initW();
     printf("Use FFT(0) or IFFT(1)?\n");
     scanf("%d",&method);
     if(method==0)
           fft();
     else
           ifft();
     output();
     return 0;
}

/*快速傅里叶变换*/
void fft(){
     int i=0,j=0,k=0,l=0;
     complex up,down;
     change();
     for(i=0;i< (int)( log(size_x)/log(2) );i++){  /*一级蝶形运算*/
           l=( 1<<i );
           for(j=0;j<size_x;j+= (1<<l) ){            /*一组蝶形运算*/
                 for(k=0;k<l;k++){                                /*一个蝶形运算*/
                        mul(x[j+k+l],W[size_x*k/2/l],&up);
                        add(x[j+k],up,&up);
                        mul(x[j+k+l],W[size_x*k/2/l],&down);
                        sub(x[j+k],down,&down);
                        x[j+k]=up;
                        x[j+k+l]=down;
                 }
           }
     }
}

/*快速傅里叶逆变换*/
void ifft(){
     int i=0,j=0,k=0,l=size_x;
     complex up,down;
     for(i=0;i< (int)( log(size_x)/log(2) );i++){  /*一级蝶形运算*/
           l/=2;
           for(j=0;j<size_x;j+= (1<<l) ){            /*一组蝶形运算*/
                 for(k=0;k<l;k++){                                /*一个蝶形运算*/
                       add(x[j+k],x[j+k+l],&up);
                       up.real/=2;up.img/=2;
                       sub(x[j+k],x[j+k+l],&down);
                       down.real/=2;down.img/=2;
                       divi(down,W[size_x*k/2/l],&down);
                       x[j+k]=up;
                       x[j+k+l]=down;
                 }
           }
     }
     change();
}

/*初始化变换核*/
void initW(){
     int i;
     W=(complex *)malloc(sizeof(complex) * size_x);
     for(i=0;i<size_x;i++){
           W.real=cos(2*PI/size_x*i);
           W.img=-1*sin(2*PI/size_x*i);
     }
}

/*变址计算,将x(n)码位倒置*/
void change(){
     complex temp;
     int i=0,j=0,k=0,t;

     for(i=0;i<size_x;i++){
           k=i;j=0;
           t=(unsigned) (log(size_x)/log(2));
           while(t--){








时间抽选基2FFT及IFFT算法C语言实现.rar

1.22 KB, 下载次数: 9 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2006-10-25 12:27:09 | 显示全部楼层
很实用的工程资料 与大家共享
发表于 2006-10-25 22:09:22 | 显示全部楼层
谢谢与大家共享
发表于 2006-10-26 00:19:58 | 显示全部楼层
thanks for your information.....
thanks....
发表于 2006-10-27 09:52:39 | 显示全部楼层
it is very helpful for me
thank you
发表于 2007-3-13 13:02:06 | 显示全部楼层
太好了,谢谢楼主!!!
发表于 2008-11-13 10:44:22 | 显示全部楼层
haodongxi
发表于 2009-12-31 20:46:53 | 显示全部楼层
很实用的工程资料
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-29 20:31 , Processed in 0.280814 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表