阿尔兹海默症吃什么药| 脂肪肝吃什么药最好| dht是什么意思| 酸菜鱼用什么鱼| 颔是什么部位| 无机盐包括什么| 衙内是什么意思| 海贼王什么时候出的| 夫妻都是a型血孩子是什么血型| 怀孕一个月什么症状| 伤口发炎吃什么消炎药| 乙肝125阳性是什么意思| 假冒警察什么罪怎么判| 铁皮石斛有什么功效| lee什么意思| med是什么意思| 脚酸臭是什么原因| 补刀什么意思| 孕吐什么时候开始| 开水冲服是什么意思| 一例是什么意思| 气溶胶传播是什么意思| 膝盖后面叫什么| 儿郎是什么意思| 尿常规红细胞高是什么原因| 双签是什么意思| 手麻木吃什么药好| 物料是什么意思| 超敏c反应蛋白高是什么意思| ab型和ab型生的孩子是什么血型| 脖子上长小肉疙瘩是什么原因| 卵泡生成素高是什么原因| 熟普属于什么茶| osd是什么意思| 黄精有什么功效和作用| 恋物癖是什么| 深千尺是什么意思| 抓兔子的狗叫什么名字| maby什么意思| 辞海是什么书| 左侧卵巢内囊性回声是什么意思| 女人有腰窝意味着什么| 如果你是什么那快乐就是什么| cba是什么| 苋菜与什么食物相克| 女人上嘴唇有痣代表什么| 来大姨妈适合吃什么水果| amazon是什么意思| 什么叫窝沟封闭| 茶水洗脸有什么好处和坏处| 什么的遗产| 淋巴细胞降低说明什么| 天丝棉是什么面料| 鱼扣是鱼的什么部位| 曼妥思是什么糖| 醉氧是什么意思| 屁股疼痛是什么原因引起的| 阚姓念什么| 检查艾滋病挂什么科| 类风湿关节炎不能吃什么食物| NT是什么钱| 年夜饭吃什么| 望惠存是什么意思| 咳嗽黄痰吃什么药| 蜂蜜不能和什么一起吃| 效价是什么意思| 扇贝不能和什么一起吃| 孕期能吃什么| 海龟汤什么意思| 一什么田野| 来大姨妈适合吃什么水果| 见到黑猫代表什么预兆| 血脂高吃什么药最好| 五月十三号是什么日子| 水母是什么动物| 世界上最贵的烟是什么烟| 桃子和什么不能一起吃| 落差感是什么意思| 高中什么时候分文理科| 什么是水象星座| 智齿长什么样子图片| 近视吃什么改善视力| 肥波是什么品种的猫| 鼻炎吃什么药| p0是什么意思| 女大七岁有什么说法| 苦甲水是什么| 月元念什么| 额头出油多是什么原因| 青口是什么东西| 贫血三项是指什么检查| 查颈椎挂什么科| 飞机用什么油| 惟妙惟肖是什么意思| 兰若是什么意思| 藏茶属于什么茶| kt什么意思| 闻鸡起舞是什么生肖| 神经性皮炎用什么药最好| 男生来大姨夫是什么意思| 三伏天吃什么| 84消毒液不能和什么一起用| 霉菌感染用什么药最好| 什么的草地| 什么是同比| 非浅表性胃炎是什么意思| 吃什么可以降血压| 为什么会长结节| 1985年属牛是什么命| 摩羯座后面是什么星座| 头发轻轻一拉就掉了是什么原因| 聚餐吃什么| 四离日是什么意思| 补水什么意思| 上海有什么特色美食| 为什么单位不愿意申请工伤| 暖心向阳是什么意思| 巳蛇五行属什么| 脚臭用什么药| 嘴巴淡而无味是什么原因| 吃什么可以提高血小板| 舌头发黑是什么原因| 中期唐氏筛查查什么| 2006属狗的五行缺什么| 四肢百骸是什么意思| 调兵遣将是什么生肖| 汗疱疹是什么原因引起| 长江后浪推前浪是什么意思| 四次元是什么意思啊| 震楼神器楼上什么感觉| 梦见采蘑菇是什么预兆| 新生儿脸上有小红点带白头是什么| 什么时候拔罐最好| 杰字五行属什么| 心脏跳的慢吃什么好| 龟裂是什么意思| 吃猪腰子有什么好处和坏处| 成人达己是什么意思| 子宫痉挛是什么症状| 慢性咽炎是什么症状| 最高人民法院院长什么级别| 地中海贫血有什么影响| 占有欲强是什么意思| 什么矿泉水最好| 断层是什么意思| pinky是什么意思| 明心见性什么意思| 李白字什么号什么| 一个车一个罔是什么字| 睡莲为什么不开花| 偏头痛不能吃什么食物| 针眼长什么样| 春节在什么时候| 甲状腺是什么引起的| 甜菜根是什么| 女生被操是什么感觉| 腹腔气体多是什么原因| 鸡屎藤和什么相克| 困难的反义词是什么| 谨言慎行下一句是什么| 车间管理人员工资计入什么科目| hpv是什么意思| 梦见舅舅是什么意思| 优雅是什么意思| 60min是什么意思| 哺乳期感冒能吃什么药| 功能性子宫出血是什么原因造成的| 脸上爱长痘痘是什么原因| 舌头有裂纹是什么原因| 胎儿打嗝是什么原因| 作业是什么意思| 宝宝消化不好吃什么调理| 结界是什么意思| 脚起水泡是什么原因| 前戏是什么| 隼读什么| 梦见棉花是什么意思| 腰肌劳损看什么科| 中国姓什么的人最多| 低压高是什么原因引起的| 十指纤纤尽夸巧是什么生肖| 吃了西瓜不能吃什么| 痛经喝什么| 乐五行属什么| 热依扎是什么民族| 亥时右眼跳是什么预兆| 抗甲状腺球蛋白抗体高是什么意思| 升阳举陷是什么意思| 肌病是什么病| hospital是什么意思| 35是什么意思| 05年属鸡的是什么命| 84年什么命| 金利来属于什么档次| 排班是什么意思| 恐龙是什么时代| 唐氏筛查是什么检查| 睡觉容易醒是什么原因| 梦见自己被火烧是什么意思| 1971年是什么命| 舌尖麻是什么原因| 吃什么水果祛斑最快| 无法入睡是什么原因| 来例假肚子疼吃什么药| 类风湿关节炎吃什么好| 梦见耗子是什么预兆| 宫颈多发潴留囊肿是什么意思| 大三阳转小三阳意味着什么| 日光性皮炎用什么药膏最有效| 大枣和红枣有什么区别| 血压不稳定是什么原因| 伏天吃什么| 开心的动物是什么生肖| 前列腺钙化什么意思| 五月十九日是什么星座| 先算什么再算什么| 38岁属什么| 咦惹是什么意思| 犯了痔疮为什么老放屁| 质体是什么| 什么的什么是什么的伞| 脚肿了是什么原因引起的| 怀孕血压高对胎儿有什么影响| 做梦梦到蛇是什么征兆| 露水夫妻是什么意思| 错过是什么意思| 宝宝大便有泡沫是什么原因| gold是什么意思| 三叉戟是什么意思| 过敏挂什么科室| 经常不吃晚饭对身体有什么影响| 什么时候最容易受孕| 梦见死蛇是什么预兆| 排卵是什么意思啊| 一什么花瓶| 什么门永远关不上| 为什么会得脚气| 容易被吓到是什么原因| 泰坦尼克号什么时候上映的| 胃不消化吃什么药| 过是什么结构| 小心地什么| 沉香茶属于什么茶| 夏天白鸽煲什么汤最好| 蒙脱石散适合什么腹泻| 聚宝盆是什么意思| 眼睛黄是什么病| 手指甲出现竖纹是什么原因| 什么茶叶好喝又香又甜| 康五行属什么| 异型增生是什么意思啊| 乌鸡炖什么好吃| 开心的反义词是什么| 5月28日什么星座| 为什么会长结节| cm是什么单位| 田宅宫是什么意思| 九头身什么意思| 梦见买白菜是什么意思| 尿酸高什么原因引起的| 黄色加蓝色等于什么颜色| 吃完头孢不能吃什么| 大虾炒什么菜好吃| 狂蜂浪蝶是什么意思| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 高校专区 ? 坤创E-Geek/天科大新电社 ? 【原创】浅谈FFT以及FFT算法的基本实现(下)

共12条 1/2 1 2 跳转至

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

高工
2025-08-04 23:21:46     打赏
百度 《自然》杂志最新研究表明,里面有至少万吨塑料垃圾,比之前估计的多16倍。

浅谈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-04 09:44:17     打赏
2楼

太好了太好了太好了


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

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

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


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

干货


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

感谢分享


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

谢谢楼主分享


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

谢谢分享


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

学习到了


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

谢谢分享


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

很不错的代码


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
化疗期间吃什么升白细胞快 属猴的守护神是什么菩萨 雷同是什么意思 螺蛳粉有什么危害 亓是什么意思
swi是什么检查 一进去就射是什么原因 拔胡子有什么危害 喜人是什么意思 自来鸟是什么兆头
屈光是什么意思 天麻是什么东西 ect是什么 黑洞是什么意思 两边太阳胀痛什么原因引起的
乌唇是什么原因 皮内瘤变到底是什么意思 梦到自己头发白了是什么意思 什么野果 什么叫情商高
烫伤用什么药最好hcv8jop9ns8r.cn 修复子宫内膜吃什么药hcv8jop8ns6r.cn 贝兄念什么hcv9jop5ns0r.cn 九一八事变是什么意思hcv8jop9ns0r.cn 尿特别多是什么原因hcv8jop3ns4r.cn
尿道炎看什么科室好hcv9jop4ns4r.cn 风油精有什么作用hcv9jop4ns5r.cn 类风湿关节炎吃什么药效果好shenchushe.com 121是什么意思hcv8jop6ns4r.cn 孕期心情不好对胎儿有什么影响hcv8jop3ns8r.cn
70年产权是从什么时候开始算hebeidezhi.com 血压低吃什么药hcv8jop2ns6r.cn 胃炎吃什么中药效果好creativexi.com 孩子睡觉磨牙是什么原因hcv8jop2ns8r.cn 哈森鞋子属于什么档次hcv8jop1ns5r.cn
移居改姓始为良是什么意思hcv7jop9ns9r.cn 梦见很多虫子是什么意思naasee.com 什么是射频hcv9jop2ns4r.cn 刺瘊子是什么原因造成的hcv9jop3ns7r.cn 血痣是什么原因引起的fenrenren.com
百度