搜索
bottom↓
回复: 87

发个DSP上的FFT,用C写的资源够的话随便移植

[复制链接]

出0入0汤圆

发表于 2009-10-15 23:15:11 | 显示全部楼层 |阅读模式
来阿莫混了很久了,发帖很少,但是在论坛里学到了很多东西,前段时间参加了ADI比赛的做了FFT的谱分析部分,和大家分享。

由于签了协议,东西不能公布。但是这个FFT绝对能用。数据结构也可以取舍,但是要注意溢出问题。


/*---------------------------1024点FFT----------------------------------*/
void FFT_Proc(void)
{
    uint16_t i,j,k;
    uint16_t LH,K,B;
    uint16_t P;
    uint8_t cout_dx;
    float temp_dx;
    float temp_re;
    float temp_im;
    float FFT_tempnum1r;
    float FFT_tempnum2r;
    float FFT_tempnum1i;
    float FFT_tempnum2i;
   
        LH=512;
        j=LH;
       
    for(i=1;i<1023;i++)                        //倒序最高位加1,逢2向次高位进位
    {
            if(i<j)
            {
                    temp_dx=FFT_Re;
                    FFT_Re=FFT_Re[j];
                    FFT_Re[j]=temp_dx;
            }
            K=512;
            while((j<K)==0)
            {
                    j=j-K;
                    K=K/2;
            }
            j=j+K;
    }                                   //对1024点输入序列进行位
   
    for(i=1;i<=10;i++)                //第一重循环控制蝶形的级数
    {
            B=pow(2,(i-1));
        for(j=0;j<=(B-1);j++)     //控制每级的蝶形和旋转因子
        {
//                P=pow(2,(i-1))-1;
                P=pow(2,(10-i))*j;
                temp_re=cos(2*PI*P/1024);
                temp_im=sin(2*PI*P/1024);
                for(k=j;k<=1023;k=k+pow(2,i))
                {
                                FFT_tempnum1r=FFT_Re[k];
                        FFT_tempnum2r=FFT_Re[k+B];
                        FFT_tempnum1i=FFT_Im[k];
                        FFT_tempnum2i=FFT_Im[k+B];
                       
                        FFT_Re[k]=FFT_tempnum1r+FFT_tempnum2r*temp_re+FFT_tempnum2i*temp_im;
                        FFT_Im[k]=FFT_tempnum1i+FFT_tempnum2i*temp_re-FFT_tempnum2r*temp_im;
                        FFT_Re[k+B]=FFT_tempnum1r-FFT_tempnum2r*temp_re-FFT_tempnum2i*temp_im;
                        FFT_Im[k+B]=FFT_tempnum1i-FFT_tempnum2i*temp_re+FFT_tempnum2r*temp_im;
                }
               
        }

     }
     
     for(i=0;i<1024;i++)
     Res=sqrt(FFT_Re*FFT_Re+FFT_Im*FFT_Im);                      //结果取模

}
发个效果图。

(原文件名:123.JPG)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2009-10-15 23:19:27 | 显示全部楼层
对了,temp_re=cos(2*PI*P/1024);
         temp_im=sin(2*PI*P/1024); 也可以改成查表

出0入0汤圆

发表于 2009-10-15 23:24:42 | 显示全部楼层
马克

出0入0汤圆

发表于 2009-10-15 23:30:24 | 显示全部楼层
马克

出0入0汤圆

发表于 2009-10-15 23:34:05 | 显示全部楼层
mark2

出0入0汤圆

发表于 2009-10-16 00:02:41 | 显示全部楼层
记号

出0入22汤圆

发表于 2009-10-16 00:38:48 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2009-10-16 07:26:46 | 显示全部楼层
mark

出0入42汤圆

发表于 2009-10-16 09:00:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-16 09:30:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-16 10:02:42 | 显示全部楼层
脉搏好奇怪,不像心电测的。

出0入0汤圆

 楼主| 发表于 2009-10-16 10:12:31 | 显示全部楼层
这个是脉搏波信号,不是心电图,图只是说明频谱算法

出0入0汤圆

发表于 2009-10-16 10:25:25 | 显示全部楼层
夹个书签。

出0入8汤圆

发表于 2009-10-16 10:35:54 | 显示全部楼层
收藏

出0入0汤圆

发表于 2009-10-16 10:37:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-16 10:44:14 | 显示全部楼层
马克.

出0入0汤圆

发表于 2009-10-16 10:56:29 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-10-16 10:56:32 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-10-16 11:25:11 | 显示全部楼层
倒,这么多MARK^_^

出0入0汤圆

发表于 2009-10-16 12:23:01 | 显示全部楼层
我也mark

出0入0汤圆

发表于 2009-10-16 12:27:09 | 显示全部楼层
mark

出0入4汤圆

发表于 2009-10-16 17:26:07 | 显示全部楼层
2.4G 四核PC,运行一次要1秒?

出0入0汤圆

 楼主| 发表于 2009-10-17 00:43:27 | 显示全部楼层
" 2.4G 四核PC,运行一次要1秒? "
不可能把,我用bf533做的,绝对少于1s,因为我程序除了运算FFT,还要进行寻优收缩,k值计算,这个程序主要是移植方便

出0入0汤圆

发表于 2009-10-17 12:40:38 | 显示全部楼层
看不懂

出0入0汤圆

发表于 2009-10-17 15:36:20 | 显示全部楼层
学习!

出0入0汤圆

发表于 2010-3-6 20:48:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-6 20:53:06 | 显示全部楼层
这个要收藏,以后用得到

出0入0汤圆

发表于 2010-3-6 22:26:59 | 显示全部楼层
支持。不过除了基本语句,别的都看不懂~

出0入0汤圆

发表于 2010-3-6 22:35:01 | 显示全部楼层
标记

出0入0汤圆

发表于 2010-3-6 22:35:12 | 显示全部楼层
标记

出0入0汤圆

发表于 2010-3-27 14:51:39 | 显示全部楼层
写的还行!以后注释要加上.

出0入0汤圆

发表于 2010-3-28 13:49:24 | 显示全部楼层
马克一下,学习学习

出0入0汤圆

发表于 2010-4-29 16:03:04 | 显示全部楼层
支持

出0入4汤圆

发表于 2010-4-29 16:44:50 | 显示全部楼层
记号 、、、、

出0入0汤圆

发表于 2010-4-30 09:06:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-30 09:09:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-30 09:38:18 | 显示全部楼层
还要再复习复习FFT,再来看楼主代码,谢谢喽,呵呵

出0入0汤圆

发表于 2010-4-30 11:35:03 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-4-30 12:17:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-30 13:49:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-30 14:38:43 | 显示全部楼层
这个以后能用的到,先收藏在说了,谢谢LZ

出0入0汤圆

发表于 2010-4-30 16:57:40 | 显示全部楼层
能用是能用,就是很耗时间,100MHz的NXP CM3软件仿真要2、3百毫秒,NXP的定点FFT库才用几毫秒。

出0入0汤圆

发表于 2010-4-30 21:45:27 | 显示全部楼层
看看,学习了```最近也在玩bf533

出0入20汤圆

发表于 2010-4-30 21:52:04 | 显示全部楼层
这个 提供了一个 思路

出0入0汤圆

发表于 2010-4-30 23:48:58 | 显示全部楼层
收藏

出0入0汤圆

发表于 2010-6-20 11:58:48 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-6-20 18:35:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-28 14:43:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-28 22:33:46 | 显示全部楼层
记号记号记号!

我想在89C52上试试,嘿嘿嘿嘿……

出0入0汤圆

发表于 2010-11-22 22:00:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-22 23:16:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-29 11:32:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-29 11:51:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-29 17:04:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-5 21:26:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-5 21:38:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-5 22:34:11 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-12-5 23:06:00 | 显示全部楼层
FFT的结果怎么能看出来脉搏是76,求解

出0入0汤圆

发表于 2010-12-6 13:29:10 | 显示全部楼层
这个要收藏

出0入0汤圆

发表于 2011-1-17 11:36:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-28 10:43:34 | 显示全部楼层
现在学习2812,可以把这移植上去试试了。

重点是正弦和余弦变换太费力了,换成定点数还好些,直接查表吧。

出0入0汤圆

发表于 2011-3-3 02:50:23 | 显示全部楼层
则在旬这个

出0入0汤圆

发表于 2011-3-3 02:50:40 | 显示全部楼层
也在旬这个

出0入0汤圆

发表于 2011-3-3 08:41:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-6 21:32:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-6 22:21:19 | 显示全部楼层
弄成 IQ格式的吧,FLOAT运算可费劲呢。那个回转因子WN表也弄成IQ格式的最好。

出0入0汤圆

发表于 2011-3-6 23:21:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-6-2 21:51:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-6-3 14:11:00 | 显示全部楼层
cool!mark

出0入0汤圆

发表于 2012-6-28 09:29:50 | 显示全部楼层
看不懂哈

出0入0汤圆

发表于 2012-11-7 20:40:30 | 显示全部楼层
FFT好家伙

出0入0汤圆

发表于 2012-11-8 12:32:30 来自手机 | 显示全部楼层
MARK一下,留着

出0入0汤圆

发表于 2012-11-8 22:53:32 | 显示全部楼层
mark                                                                           

出0入0汤圆

发表于 2012-12-4 19:54:23 | 显示全部楼层
很不错 ,现在正需要这个,谢谢分享。

出0入0汤圆

发表于 2012-12-4 19:57:17 | 显示全部楼层
这个FFT的c代码。。。。 好像没啥意义哦。

效率太低了吧。。。。

仅限于学习FFT的时候参考。。。

出0入0汤圆

发表于 2012-12-4 19:57:57 | 显示全部楼层
ADI DSP 和 TI DSP的例程一大堆,都是库形式的,汇编写的,效率很高。 为啥要用C呢。。。

出0入0汤圆

发表于 2012-12-30 15:45:41 | 显示全部楼层
FFT正好有用 学习下

出0入0汤圆

发表于 2013-1-5 14:15:25 | 显示全部楼层
还没有入门,想先入门。

出0入0汤圆

发表于 2013-1-6 15:53:42 | 显示全部楼层
记号一下~~~以备后续

出0入0汤圆

发表于 2013-1-6 15:56:23 | 显示全部楼层
mark         

出0入0汤圆

发表于 2013-1-24 22:09:37 | 显示全部楼层
虽然很久以前的东西,来了还是要顶一下

出0入0汤圆

发表于 2013-1-24 22:49:17 | 显示全部楼层
不管看不看得懂 mark再说

出0入0汤圆

发表于 2013-3-26 14:20:19 | 显示全部楼层
谢谢楼主的资料,很感谢

出0入0汤圆

发表于 2013-3-27 08:21:31 | 显示全部楼层
好资料,谢谢!!!!!!!1

出0入0汤圆

发表于 2013-8-8 10:28:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-9-21 16:32:39 | 显示全部楼层
mark     再看看  

出0入0汤圆

发表于 2013-9-25 13:14:31 | 显示全部楼层
顶顶顶顶顶更
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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