偏旁部首是什么意思| 女人喝白茶有什么好处| 什么验孕棒准确率高| 辅酶q10什么时间吃好| 打狂犬疫苗不能吃什么食物| 外贸原单是什么意思| 多吃黑豆有什么好处| 夏天适合种什么蔬菜| 肌酐测定是查什么| 吃菱角有什么好处| 什么是g大调| 办什么厂比较好| mri什么意思| lg是什么牌子| 英国为什么叫日不落帝国| 狐媚子是什么意思| td什么意思| 更年期什么年龄开始| 夏天能干什么| 戍什么意思| 猫癣用什么药| 气管炎挂什么科| 面条吃多了有什么坏处| 梦见自己被警察抓了是什么意思| 老子是什么朝代的人| 人的脂肪是什么颜色| 1月14日什么星座| versus什么意思| ms.是什么意思| 黄风怪是什么动物| 草木皆兵指什么生肖| 胰腺疼痛吃什么药| 雾化对小孩有什么影响或者副作用| 来减一笔是什么字| 云的五行属性是什么| cri是什么意思| 蔓越莓是什么水果| 罘是什么意思| 梗概什么意思| 一饿就胃疼什么原因| 12月18是什么星座| 宝宝大便发白是什么原因| 柒牌男装什么档次| 喝椰子汁有什么好处| 1月27日什么星座| 打乙肝疫苗需要注意什么| 上面一个处下面一个日是什么字| 尿素高吃什么药| 唐僧最后成了什么佛| 破壁是什么意思| 蛇缠身是什么病| 梗概什么意思| 骨折吃什么药好得快| 腹胀是什么感觉| 多囊性改变是什么意思| 小别胜新婚是什么意思| 康宽杀虫剂能杀什么虫| 脑垂体挂什么科| 为什么不| 孩子张嘴睡觉是什么原因| 龙飞凤舞是什么意思| 青储是什么| 莲子不能和什么一起吃| 激动的什么| 北方人立秋吃什么| tvoc是什么| 科学的尽头是什么| 姓姜的男孩起什么名字好| 法令纹是什么| 嘴角疱疹用什么药膏| 1月20是什么星座| 爆单什么意思| 肉桂属于什么茶类| 一边脸大一边脸小是什么原因| 感染科主要看什么病| 血热是什么原因引起的| 芥酸对身体有什么危害| 嘴唇为什么会变黑| 白喉是什么病| 为什么叫211大学| 现在小麦什么价格| 吃什么止咳| 鼻中隔偏曲是什么意思| 乙状结肠炎吃什么药| 燕窝适合什么人吃| 刑事拘留意味着什么| 有编制是什么意思| 阎王爷姓什么| 饺子是什么意思| 流口水是什么病的前兆| 无脑儿是什么意思| 金刚芭比什么意思| 阿莫西林有什么作用| 什么的杜鹃花| 武则天是什么朝代| 死是什么意思| 百褶裙搭配什么上衣| 时柱比肩是什么意思| 沙中土是什么意思| 世界上什么东西最大| 毓字五行属什么| 什么是硬下疳| 什么牌子手机好| 酸溜溜的什么| 午餐肉是什么肉做的| 月经后是什么期| 身上有红色的小红点是什么原因| 肠胃不好可以吃什么水果| 10年什么婚| 泄泻病是什么意思| 阿华田是什么饮料| 额头长痘是因为什么| tcl什么牌子| 舌苔厚黄是什么原因| 牙齿抛光是什么意思| 子宫内膜16mm说明什么| 狸猫换太子是什么意思| 搞破鞋什么意思| 氧分压高是什么原因| 急性化脓性扁桃体炎吃什么药| 漏尿是什么原因造成的| 股票填权是什么意思| 房颤什么意思| 神经官能症挂什么科| gem是什么意思| 1996年是什么命| lam是什么意思| 豆浆配什么主食当早餐| 1943年属什么| 属狗女和什么属相最配| 减脂吃什么主食| 多囊是什么| 一个口一个且念什么字| 拉什么| 拉烂屎是什么原因| 怜香惜玉是什么意思| 巨无霸是什么意思| 尿酸高适合喝什么汤| 子宫形态失常是什么意思| 小孩手足口病吃什么食物好| 什么是道德绑架| 小孩记忆力差需要补充什么营养| rom是什么意思| 鱼的尾巴有什么作用| 喝杨梅酒对身体有什么好处| 乐加是什么药| 月季花是什么颜色的| 磺胺是什么药| 牙发黑是什么原因怎么办| 区域经理的岗位职责是什么| 到付是什么意思| 梦见黑棺材是什么征兆| 红和绿混合是什么颜色| 为什么总是头晕| 博士和博士后有什么区别| 什么是醪糟| 什么螺不能吃| 咽喉炎吃什么药| 宝姿是什么档次的牌子| 男人肾虚吃什么最补| 感冒喝什么水好得快| 薄熙来为什么被抓| 梦见跳舞是什么意思| 公招是什么意思| 八点半是什么时辰| 什么的屏障| 梦见自己捡钱是什么意思| 驾驶证照片是什么底色| 山药跟淮山有什么区别| 入肉是什么意思| 三班倒什么意思| 98年什么命| 榴莲不可以和什么一起吃| 耐人寻味是什么意思| 双肾小结石是什么意思| 1月20是什么星座| 六畜大宝在农家是什么生肖| 消炎药吃多了有什么副作用| 美国人的祖先是什么人| adr是什么激素| 绿松石是什么| 人丹是什么| 胃火旺盛吃什么药| 舌裂是什么原因造成的| 苍白的什么| 他不懂你的心假装冷静是什么歌| 中国最厉害的武器是什么| 孕中期失眠是什么原因| bpd是什么| 心什么如什么| 背德是什么意思| 蜂王浆什么时间吃最好| 樟脑是什么| 吃什么最健康| 胃胀胃不消化吃什么药| 夏天适合用什么护肤品| 什么是高| 糟卤可以做什么菜| 做书桌用什么板材好| 腰肌劳损有什么症状| 呼吸科属于什么科室| 最高检检察长什么级别| 奔跑吧什么时候播出| 皮肤暗黄是什么原因| 八卦中代表雷的卦象叫什么| 总胆红素偏高什么意思| 什么补蛋白最快的食物| 爱是什么偏旁| 梦见蛀牙掉是什么预兆| 什么立什么群| 性行为是什么| 什么东西可以代替阴茎| 核医学科是检查什么的| 犹太人割礼是什么意思| 被鬼缠身有什么症状| 什么水果维生素含量高| 鬼迷心窍是什么意思| 上眼皮肿是什么原因| 马云是什么大学毕业的| 日落胭脂红的下一句是什么| 熊喜欢吃什么食物| 上环是什么意思| 培育是什么意思| 707是什么意思| 为什么吃辣的就拉肚子| bnp是什么| 什么不可什么| 一语惊醒梦中人是什么意思| 拉倒吧是什么意思| 孕妇吃香蕉对胎儿有什么好处| 伏吟是什么意思| 晚上睡觉流口水是什么原因| mr检查是什么| 痴男怨女是什么意思| 利巴韦林是什么药| 什么叫精神分裂症| 网易是干什么的| 手指倒刺是什么原因| 白天不懂夜的黑什么意思| 九重天是什么意思| 神父是什么意思| 硌人什么意思| 天然是什么意思| 第二天叫什么日| 腰间盘膨出和突出有什么区别| 大臣是什么意思| 头皮屑多的原因是什么| 终板炎是什么病| 远在天边近在眼前是什么意思| 感冒头疼吃什么药| 高大上是什么意思| 洗钱是什么意思| 腹泻是什么意思| c肽高说明什么| 抹茶绿配什么颜色好看| 泰国是一个什么样的国家| 三国是什么朝代| 拍脑部ct挂什么科| 截疟是什么意思| 山竹什么样的好| 一龙一什么| 肝低密度灶是什么意思| 肌酐清除率是什么意思| 绿茶不能和什么一起吃| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 高校专区 ? 坤创E-Geek/天科大新电社 ? 【原创】浅谈FFT以及FFT算法的基本实现(下)

共12条 1/2 1 2 跳转至

【原创】浅谈FFT以及FFT算法的基本实现(下)

高工
2025-08-05 23:21:46     打赏
百度 春节前后返乡、回程出行高峰明显从出行趋势图可以看出,春节前的返乡高峰集中在腊月二十五,这一天有超过90万人在回家的路上。

浅谈FFT以及FFT算法的基本实现(下)

       对于FFT算法C语言的实现,网上的方法层出不穷,介于本人比较懒(懒得看别人的程序),再加上自给自足丰衣足食的原则,我自己也写了一个个人认为比较通俗易懂的程序。并且为了帮助读者理解,我特意尽量减少了库函数的使用,一些基本的函数都是自己写的(难免有很多BUG),但是作为FFT算法已经够用了,目前这个程序只能处理2^N的数据,理论上来讲如果不够2^N的话可以在后面数列补0这种操作,当然为了简约文中也就没有实现,但是主要的功能还是具备的,下面将代码开源如下:

/*
功能:将input里的数据进行快速傅里叶变换  并且输出
*/
 
#include <stdio.h>
#include <math.h>
#define PI 3.1415926
#define FFT_LENGTH  8
double input[FFT_LENGTH]={1,1,1,1,1,1,1,1};
struct complex1{  //定义一个复数结构体
double real; //实部
double image; //虚部
}; 
//将input的实数结果存放为复数
struct complex1 result_dat[8];
/*
虚数的乘法
*/
struct complex1 con_complex(struct complex1 a,struct complex1 b){
struct complex1 temp;
temp.real=(a.real*b.real)-(a.image*b.image);
temp.image=(a.image*b.real)+(a.real*b.image);
return temp;
}
 
/*
简单的a的b次方
*/
int mypow(int a,int b){
int i,sum=a;
if(b==0)return 1;
for(i=1;i<b;i++){
sum*=a; 
}
return sum;
}
/*
简单的求以2为底的正整数
*/
int log2(int n){
unsigned i=1;
int sum=1;
for(i;;i++){
sum*=2;
if(sum>=n)break;
}
return i;
}
/*
简单的交换数据的函数
*/
void swap(struct complex1 *a,struct complex1 *b){
struct complex1 temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
/*
dat为输入数据的数组
N为抽样次数  也代表周期  必须是2^N次方
*/
void fft(struct complex1 dat[],unsigned char N){ 
/*最终  dat_buf计算出 当前蝶形运算奇数项与W  乘积
dat_org存放上一个偶数项的值
*/
struct complex1 dat_buf,dat_org;
/* L为几级蝶形运算    也代表了2进制的位数
n为当前级蝶形的需要次数  n最初为N/2 每级蝶形运算后都要/2
i j为倒位时要用到的自增符号  同时  i也用到了L碟级数   j是计算当前碟级的计算次数 
re_i i_copy均是倒位时用到的变量
k为当前碟级  cos(2*pi/N*k)的  k   也是e^(-j2*pi/N)*k  的  k
*/
unsigned char L,i,j,re_i=0,i_copy=0,k=0,fft_flag=1;
//经过观察,发现每级蝶形运算需要N/2次运算,共运算N/2*log2N  次  
unsigned char fft_counter=0;
//在此要进行补2   N必须是2^n   在此略
//蝶形级数  (L级)
L=log2(N); 
//计算每级蝶形计算的次数(这里只是一个初始值)  之后每次要/2
//n=N/2;
 
//对dat的顺序进行倒位
for(i=1;i<N/2;i++){
i_copy=i;
re_i=0;
for(j=L-1;j>0;j--){
//判断i的副本最低位的数字  并且移动到最高位  次高位  ..
//re_i为交换的数   每次它的数字是不能移动的 并且循环之后要清0
re_i|=((i_copy&0x01)<<j);  
i_copy>>=1;
}
swap(&dat[i],&dat[re_i]);
}
//进行fft计算
for(i=0;i<L;i++){
fft_flag=1;
fft_counter=0;
for(j=0;j<N;j++){
if(fft_counter==mypow(2,i)){  //控制隔几次,运算几次,
fft_flag=0;
}else if(fft_counter==0){  //休止结束,继续运算
fft_flag=1;
}
//当不判断这个语句的时候  fft_flag保持  这样就可以持续运算了
if(fft_flag){
dat_buf.real=cos((2*PI*k)/(N/mypow(2,L-i-1)));
dat_buf.image=-sin((2*PI*k)/(N/mypow(2,L-i-1)));
dat_buf=con_complex(dat[j+mypow(2,i)],dat_buf);
//计算 当前蝶形运算奇数项与W  乘积
 
dat_org.real=dat[j].real;
dat_org.image=dat[j].image;  //暂存
 
dat[j].real=dat_org.real+dat_buf.real;
dat[j].image=dat_org.image+dat_buf.image;  
//实部加实部   虚部加虚部
 
dat[j+mypow(2,i)].real=dat_org.real-dat_buf.real;
dat[j+mypow(2,i)].image=dat_org.image-dat_buf.image;
//实部减实部 虚部减虚部
 
k++;
fft_counter++;
}else{
fft_counter--;    //运算几次,就休止几次
k=0;
}
}
}
 
}
void main(){
int i;
//先将输入信号转换成复数
for(i=0;i<FFT_LENGTH;i++){
result_dat[i].image=0; 
//输入信号是二维的,暂时不存在复数
result_dat[i].real=input[i];
//result_dat[i].real=10;
//输入信号都为实数
}
fft(result_dat,FFT_LENGTH);
for(i=0;i<FFT_LENGTH;i++){
input[i]=sqrt(result_dat[i].real*result_dat[i].real+result_dat[i].image*result_dat[i].image);
//取模
printf("%lf\n",input[i]);
}
while(1);
}

 

这个程序中input这个数组是输入信号,在这里只模拟抽样了8次,输出的数据也是input,如果想看其它序列的话,可以改变FFT_LENGTH 的值以及 input里的内容,程序输出的是实部和虚部的模,如果单纯想看实部或者虚部的幅度的话,请自行修改程序~

本次浅谈FFT以及FFT算法的基本实现的全部内容就到这里,欢迎大家多多交流~坐等板砖





关键词: 浅谈     算法     FFT     快速傅里叶    

菜鸟
2025-08-05 09:44:17     打赏
2楼

太好了太好了太好了


院士
2025-08-05 10:02:04     打赏
3楼

祝老师的大作,赶紧围观啊!

话说,貌似我好久没有发帖子了


工程师
2025-08-05 19:49:24     打赏
4楼

干货


工程师
2025-08-05 19:51:47     打赏
5楼

感谢分享


工程师
2025-08-05 19:53:55     打赏
6楼

谢谢楼主分享


工程师
2025-08-05 19:55:28     打赏
7楼

谢谢分享


工程师
2025-08-05 19:58:19     打赏
8楼

学习到了


工程师
2025-08-05 20:01:25     打赏
9楼

谢谢分享


高工
2025-08-05 22:53:41     打赏
10楼

很不错的代码


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
梦见自己头发长长了是什么意思 窝窝头是用什么做的 食用碱是什么 健脾胃吃什么 luxury什么牌子
花胶和什么煲汤最适合 梦见花蛇是什么预兆 婴儿泡奶粉用什么水好 胃不好吃什么水果 宝批龙是什么意思
肌肉拉伤看什么科室 脚后跟疼为什么 孕早期不能吃什么食物 坐月子吃什么水果好 扁平足为什么不能当兵
肝火旺吃什么中成药 羽毛球拍什么材质的好 平安夜做什么 pp是什么意思 anca医学上是什么意思
血糖高可以喝什么粥hcv8jop2ns8r.cn 粟米是什么米hcv8jop5ns3r.cn 男人胡子长得快是什么原因hcv9jop6ns5r.cn 冰藤席是什么材质hcv7jop6ns3r.cn 随诊什么意思hcv8jop1ns6r.cn
上海有什么烟hcv8jop0ns3r.cn 小肠镜什么情况下需要做hcv8jop3ns8r.cn 被虫子咬了涂什么药膏hcv8jop5ns9r.cn 帕金森挂什么科hcv8jop9ns6r.cn 男女身份证号码有什么区分hcv8jop2ns2r.cn
睑腺炎是什么原因造成hcv9jop3ns9r.cn 灵魂伴侣是指什么意思hcv8jop9ns8r.cn 危如累卵是什么意思hcv8jop3ns2r.cn 9月17号是什么星座的hcv8jop2ns8r.cn 乳腺癌ki67是什么意思hcv8jop5ns8r.cn
石榴石什么颜色的最好hcv8jop8ns7r.cn 女人手心脚心发热是什么原因hcv7jop6ns3r.cn 小米粥配什么菜好吃hcv9jop3ns4r.cn 炖鸡汤放什么材料hcv8jop9ns8r.cn 小鸟吃什么hcv8jop6ns2r.cn
百度