找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

FFT算法的使用说明与C语言版实现源码

查看数: 32735 | 评论数: 45 | 收藏 29
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-6-9 22:20

正文摘要:

如果对时间要求不是很高的话,用51单片机做fft计算进行频率分析也可以熟悉算法并了解fft的本质

回复

ID:477236 发表于 2019-9-16 15:23
/*****************************************************************
函数原型:void IFFT(struct compx *xin)
函数功能:对输入的复数组进行快速逆傅里叶变换(IFFT)
输入参数:*xin复数结构体组的首地址指针,struct型
输出参数:无
作者:瓶子
*****************************************************************/
void IFFT(struct compx *xin)
{
        float temp;
        int i;

        xin[0].real /= FFT_N;                                xin[0].imag /= FFT_N;
        xin[FFT_N >> 1].real /= FFT_N;        xin[FFT_N >> 1].imag /= FFT_N;

        for (i = 1; i < FFT_N >> 1; i++)
        {
                temp = xin[i].real / FFT_N;
                xin[i].real = xin[FFT_N - i].real / FFT_N;
                xin[FFT_N - i].real = temp;
                temp = xin[i].imag / FFT_N;
                xin[i].imag = xin[FFT_N - i].imag / FFT_N;
                xin[FFT_N - i].imag = temp;
        }
        FFT(xin);
}

基于以上代码的逆FFT参考代码,希望大家有用

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:675767 发表于 2024-1-24 13:59
牛人真多啊
ID:75737 发表于 2023-10-27 20:44
FFT哪里有详细点的学习资料呀!这程序能看懂,但不知道原理!
ID:444657 发表于 2023-4-24 14:30
wanghaojie 发表于 2021-9-7 09:31
=这里,楼主应该写错了

这是三目运算符
ID:444657 发表于 2023-4-24 14:29
(i=0?FFT_N:(FFT_N/2)); 这里是三目运算符,楼主没有错。你还要加强下C基础的学习。
ID:1018419 发表于 2022-4-14 17:03
正好需要,频谱灯必要的算法
ID:934203 发表于 2021-9-7 09:31
MCU丶NOOB 发表于 2021-7-20 18:48
s[ i].real=sqrt(s[ i].real*s[ i].real+s[ i].imag*s[ i].imag)/(i=0?FFT_N:(FFT_N/2));
里面i=0?是什么 ...

=这里,楼主应该写错了
ID:934203 发表于 2021-9-7 09:24
MCU丶NOOB 发表于 2021-7-20 18:48
s[ i].real=sqrt(s[ i].real*s[ i].real+s[ i].imag*s[ i].imag)/(i=0?FFT_N:(FFT_N/2));
里面i=0?是什么 ...

某频率点的幅值为:该点复数的模值除以N/2(n=1时是直流分量,其幅值是该点的模值除以N)。
ID:227340 发表于 2021-7-21 11:25
为什么要除以FFT_N/2
ID:227340 发表于 2021-7-21 11:02
为什么计算出来的幅值都是零点几
ID:227340 发表于 2021-7-20 18:48
s[ i].real=sqrt(s[ i].real*s[ i].real+s[ i].imag*s[ i].imag)/(i=0?FFT_N:(FFT_N/2));
里面i=0?是什么意思 有bug吧
ID:582255 发表于 2021-1-28 11:32
有采样的函数吗?先采样再FFT这样才更有实用价值啊
ID:615301 发表于 2021-1-28 02:57
感謝樓主分享
ID:398872 发表于 2020-11-7 13:00

感謝樓主分享
ID:828979 发表于 2020-10-12 22:39
这个程序没怎么看懂
ID:596103 发表于 2020-10-10 09:11
感谢分享,这个有采样的程序吗
ID:514250 发表于 2020-6-1 13:33
感謝樓主分享
ID:381834 发表于 2020-4-18 23:16
学习了,谢谢楼主分享!
ID:67123 发表于 2020-2-26 09:47
这个也是查表吗?
ID:662720 发表于 2019-12-12 20:04
感谢分享,等有积分了马上下载
ID:168554 发表于 2019-9-29 15:38
LeoXie 发表于 2019-4-12 18:01
楼主你好,测试算出来的误差有点大是什么原因

fx = 1500 * sin(PI * 2 * i * 350.0 / 44800) +

我虽然不懂,但是我看你的三角生成的有问题呀。。/ 44800 这事采样频率吧,这个应该是/采样点数呀。。
ID:553031 发表于 2019-9-29 05:04
谢谢分享!
ID:235062 发表于 2019-8-23 16:26
下载了,等有时间看看
ID:583141 发表于 2019-7-27 09:30
感谢楼主
ID:578513 发表于 2019-7-5 15:15
谢谢楼主分享!
ID:500396 发表于 2019-5-16 08:38
谢谢楼主分享!
ID:374767 发表于 2019-4-27 15:29
感谢分享
ID:474344 发表于 2019-4-22 22:02
挺好学习学习
ID:457471 发表于 2019-4-13 12:04
感谢分享!
ID:500722 发表于 2019-4-12 18:01
楼主你好,测试算出来的误差有点大是什么原因

fx = 1500 * sin(PI * 2 * i * 350.0 / 44800) +
             2700 * sin(PI * 2 * i * 8400.0 / 44800) +
             4000 * sin(PI * 2* i * 18550.0 / 44800);

i: 1, 350  - 1515.876709
i: 2, 700  - 0.000037
i: 3, 1050  - 13.832612
i: 4, 1400  - 0.000021
i: 5, 1750  - 0.000106
i: 6, 2100  - 0.000004
i: 7, 2450  - 63.505074
i: 8, 2800  - 28.065117
i: 9, 3150  - 8.681163
i: 10, 3500  - 0.000003
i: 11, 3850  - 27.872404
i: 12, 4200  - 0.000009
i: 13, 4550  - 28.500025
i: 14, 4900  - 0.000009
i: 15, 5250  - 0.000394
i: 16, 5600  - 0.000023
i: 17, 5950  - 0.000057
i: 18, 6300  - 0.000031
i: 19, 6650  - 14.382548
i: 20, 7000  - 0.000009
i: 21, 7350  - 117.270576
i: 22, 7700  - 0.000043
i: 23, 8050  - 23.529263
i: 24, 8400  - 2862.641113
i: 25, 8750  - 3.221907
i: 26, 9100  - 0.000009
i: 27, 9450  - 0.000341
i: 28, 9800  - 0.000022
i: 29, 10150  - 43.866310
i: 30, 10500  - 0.000080
i: 31, 10850  - 67.757050
i: 32, 11200  - 0.000032
i: 33, 11550  - 1.971847
i: 34, 11900  - 0.000046
i: 35, 12250  - 16.637976
i: 36, 12600  - 0.000021
i: 37, 12950  - 0.000365
i: 38, 13300  - 0.000002
i: 39, 13650  - 15.182350
i: 40, 14000  - 67.564186
i: 41, 14350  - 2.074305
i: 42, 14700  - 0.000011
i: 43, 15050  - 60.110844
i: 44, 15400  - 0.000009
i: 45, 15750  - 122.913864
i: 46, 16100  - 0.000014
i: 47, 16450  - 0.000136
i: 48, 16800  - 0.000023
i: 49, 17150  - 0.000022
i: 50, 17500  - 0.000009
i: 51, 17850  - 25.744360
i: 52, 18200  - 0.000009
i: 53, 18550  - 4473.796387
i: 54, 18900  - 0.000032
i: 55, 19250  - 13.660447
i: 56, 19600  - 89.433647
i: 57, 19950  - 1.869473
i: 58, 20300  - 0.000012
i: 59, 20650  - 0.000831
i: 60, 21000  - 0.000022
i: 61, 21350  - 128.387222
i: 62, 21700  - 0.000014
i: 63, 22050  - 66.304977
ID:500722 发表于 2019-4-12 15:38
打算移植试一试
ID:490893 发表于 2019-3-16 15:16
我怎么测试下来 时间远远不止呢,我用的24MHZ 的 STC51     执行128 的 FFT 需要 50多mS啊
ID:95916 发表于 2019-1-9 10:14
感谢分享,研究一下
ID:460863 发表于 2019-1-3 13:02
请问还需要用到什么程序吗,能不能给个完整的ad采样然后FFT的呢
ID:460795 发表于 2019-1-3 11:28
下来看看
ID:453542 发表于 2018-12-24 15:31
下下来测试下先。
ID:235223 发表于 2018-12-6 17:13
有谁试用过可行吗
ID:124617 发表于 2018-10-27 10:38
不错,正在搞信号处理方面的
ID:263813 发表于 2018-10-3 22:52
可以使用,结果还在测试中,调用create_sin_tab得改改
ID:385237 发表于 2018-8-12 11:18
我试了一下,keil编译的时候显示空间不足,郁闷了。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表