dianyuan 发表于 2010-12-23 16:36:01

MSP430 FFT算法

/*****************main   programe********************/
#include<msp430x14x.h>

#include       <math.h>   
#include       <stdio.h>   
#include       <stdlib.h>   
#include      "typedef.h "
      

float       result;   
struct   compx   s;      
int       Num=8;
const   float   pp=3.141592653589793;

extern void FFT(struct   compx *s,int num);


double mpr,mpi,mfr,mfi;
int n,k,l,il;
extern void kbfft();
extern void FFT_dingdian();
main()
{

    //   ????
    int   i;
    FILE   *fin,*fout;
    if((fin=fopen( "indata.txt ", "r "))==NULL)
    {
      printf( "can 't   open   infile ");
      exit(0);
    };
    for(i=0;i <Num;i++)
    {   
      //fscanf(fin, "%lf ",&s.real);
      s.real=cos(2*3.1415926*(30)*(i)/80.0);//
      s.imag=(double)0;
      mpr=s.real;
      mpi=0;      
      
    };
    fclose(fin);
    //////////////
      
    //FFT(s,Num);
   
    //n=8;k=3;l=0;il=0;
    //kbfft(mpr,mpi,n,k,mfr,mfi,l,il);

   
    FFT_dingdian();
      
    //????
    if((fout=fopen( "fftresult.txt ", "w "))==NULL)
    {
      printf( "can 't   open   outfile ");
      exit(0);
    };
   
    for(i=0;i <Num;i++)
    {
      // result=sqrt(pow(s.real,2)+pow(s.imag,2));
      fprintf(fout, "%lf+(%lf)i   ",s.real,s.imag);
    };
   
    fclose(fout);

}

dianyuan 发表于 2010-12-23 16:37:15

//---定点---
#include<msp430x14x.h>
#include "math.h"
#define NN 8
//************************余弦表**********************************
constfloatCOS_tab=
                  {1.0000,0.9998,0.9993,0.9986,0.9975,0.9962,0.9945,0.9925,0.9903,
                   0.9877,0.9848,0.9816,0.9781,0.9744,0.9703,0.9659,0.9614,0.9563,
                   0.9511,0.9455,0.9397,0.9336,0.9272,0.9205,0.9135,0.9063,0.8988,
                   0.8910,0.8829,0.8746,0.8660,0.8572,0.8480,0.8387,0.8290,0.8192,
                   0.8090,0.7986,0.7880,0.7771,0.7760,0.7547,0.7431,0.7314,0.7193,
                   0.7071,0.6947,0.6820,0.6691,0.6561,0.6428,0.6293,0.6157,0.6018,
                   0.5878,0.5736,0.5592,0.5446,0.5299,0.5150,0.5000,0.4848,0.4695,
                   0.4540,0.4384,0.4226,0.4067,0.3907,0.3746,0.3584,0.3420,0.3256,
                   0.3090,0.2924,0.2757,0.2588,0.2419,0.2250,0.2079,0.1908,0.1736,
                   0.1564,0.1392,0.1219,0.1045,0.0872,0.0698,0.0523,0.0349,0.0174,
                   0.0000};

char Re(char M,char k)
{
char m=1;
int n;
while(M>0){m=m*2;M--;}//m==pow(2,M)
n=360 * k /m;
return n;

}

void FFT_dingdian( void )
{
    signed char flag1=1,flag2=1;
    chari,j,k,R,I;
    char p,p1;
    //float i5,i6,i7,i8;   
    char   M,L;
    int    a,b,x=1,y=1,z=1;
    int    N1;
   
    struct comp
    {
      float re;
      float im;
    }aa={{1,0},{0,0},{-1,0},{0,0},{1,0},{0,0},{-1,0},{0,0}};//,{9,0},{10,0},
             //{11,0},{12,0},{13,0},{14,0},{15,0},{16,0}};//
   
    struct comp bb,bb1,bb2;
   

    L=0;
    N1=NN;
    while(N1>0)
    {N1=N1/2;L++;}// L=log(NN)/log(2);
    L=L-1;
   
   //输入变址
   for(i=0,j=0;i<NN;i++)
    {
      if(i>=j){k=NN/2;}
      else
      {
      k=NN/2;
      bb=aa;
      aa=aa;
      aa=bb;
      
      }
      while(k<=j){j=j-k;k=k/2;
                  if(k==j)break;}
      
       j=j+k;
    }
//变址结束
   

   
//由下开始FFT计算   
   
    for(M=1;M<=L;M++)
    {
         x=M-1;
         a=1;
         while(x>0){a=a*2;x--;}//a==2的M-1次方
      for(k=0;k<a;k++)//a==2的M-1次方,即每一级有2的M-1次方个不同的旋转因子,步进值是1
                                    //---同时也是蝶形结两结点间距
      {
             y=M;
             b=1;
             while(y>0){b=b*2;y--;}//b==2的M次方
             //p=0;
          for(p=k;p<NN-1;p=p+b)//b==2的M次方----相同旋转因子的蝶形结间距
            {
               
               
               p1=p+a;//a==2的M-1次方
               
               R=Re(M,k);//----------------------=360*k/(2^M)--k最大为2^M-1
               I=Re(M,k);//Re(M,k)==Im(M,k)
         
               if(R>=0&&R<=90){flag1=1;}
               else if(R>90&&R<=180){ R=180-R;flag1=-1;}
               else if(R>180&&R<=270){ R=R-180;flag1=-1;}
               else if(R>270&&R<=360){ R=360-R;flag1=1;}
               
               
               if(I>=0&&I<=90){I=90-I;flag2=1;}   
               else if(I>90&&I<=180){I=I-90;flag2=1;}
               else if(I>180&&I<=270){I=270-I;flag2=-1;}
               else if(I>270&&I<=360){I=I-270;flag2=-1;}
         
            bb.re=aa.re;
            bb.im=aa.im;
            
         
            bb1.re=aa.re*(flag1)*COS_tab;
            bb1.im=aa.im*(flag2)*COS_tab;
            bb2.re=aa.re*(flag2)*COS_tab;
            bb2.im=aa.im*(flag1)*COS_tab;
         aa.re=bb.re+bb1.re+ bb1.im;
         aa.im=bb.im+bb2.im - bb2.re ;
         aa.re=bb.re-bb1.re- bb1.im;
         aa.im=bb.im-bb2.im + bb2.re ;
         }   
         }
      }   
   
//FFT计算结束
   return;   
}

xingyunliushui 发表于 2010-12-26 11:52:49

需要多长时间啊??

piaotianxia 发表于 2010-12-26 12:30:59

mark!!!

cuikai12345 发表于 2010-12-26 20:03:14

mark

fy024 发表于 2010-12-26 20:47:45

mark

ringan865 发表于 2010-12-26 21:38:41

mark

ledatou 发表于 2011-1-2 14:58:43

请问做一个FFT,430需要多长时间?
我现在在做一个水流量测速的玩意。
想用相位差法,但是不想用DSP这等高级玩意。这里看到楼主的帖子。很是兴奋!!

johnwjl 发表于 2011-1-2 17:35:19

mark !MSP430 FFT算法.

maxwelllv 发表于 2011-1-3 02:15:29

mark

kinre 发表于 2011-4-14 15:26:05

mark

renpeng009 发表于 2011-4-14 15:51:00

学习了

lileistone 发表于 2011-4-14 17:04:42

楼主浮点运算用float?应该double更准吧。。。

zhouting928 发表于 2011-4-14 18:34:50

mark

lps0501090117 发表于 2011-4-15 21:20:34

MARK

vcrm 发表于 2011-4-15 22:47:00

标记 fft算法以后留着有用

xingfeng2010 发表于 2011-5-4 10:19:30

mark

hfcjx 发表于 2011-5-7 22:25:49

记下,以后慢慢看

xiezheming 发表于 2011-8-3 10:21:04

mark

zhaohui293 发表于 2011-8-3 10:22:22

mark

ksniper 发表于 2011-8-3 10:25:17

mark

passbyo8 发表于 2011-8-3 11:10:13

FFT
算法

superluminal 发表于 2011-8-5 11:08:56

学习。。。

keetle 发表于 2011-8-7 15:31:11

马克一下

WeirdlnYao 发表于 2011-8-15 09:53:33

早看到这个就好了,实训的时候可以方便很多

zyjhzhao 发表于 2011-8-19 00:27:54

mark

sfdgbdgrnd 发表于 2011-8-20 15:07:43

这可是好东西。MARK~~

yl20084784 发表于 2011-9-13 17:20:24

回复【12楼】lileistone 三块石头
-----------------------------------------------------------------------

430要避免DOUBLE运算,费时。8M的速度还是有点不快不慢的。。。

wule 发表于 2011-9-15 07:33:45

mark,看到很多程序都用这个,了解下

kkkkllll1111 发表于 2011-10-16 14:02:39

mark

yaya001 发表于 2011-10-16 14:47:49

mark

analog 发表于 2011-10-17 13:29:13

收藏。记住了

changhui0222 发表于 2011-10-17 14:57:11

MARK!

duzhang 发表于 2011-11-1 19:25:03

感觉用整形的比较快

caesun1 发表于 2011-11-5 16:46:13

记得以前大学编的FFT在486/66上计算 256x256矩阵要1s

xiatianzhang 发表于 2012-3-8 09:04:15

SanShark 发表于 2012-3-9 22:27:46

Mark

wsm80828 发表于 2012-3-10 07:06:24

看看

harryqiu 发表于 2012-3-27 16:17:25

mark一記,非常感謝,很有用的東西~~~

syauxwm 发表于 2012-3-29 23:09:54

MARK,我想知道需要多少时间,我用430,8M的晶振,做一次FIR滤波 需要20ms,32位的,不知道这个需要多久?

imliyucai 发表于 2012-3-31 11:14:44

有时间放到我板上跑跑看。谢了。

walton_smith 发表于 2012-4-13 09:35:47

谢谢分享,请问楼主这个算法用来多少时间?

sstarren 发表于 2012-4-13 11:03:06

记号记号

luckseason 发表于 2012-7-13 14:15:03

MSP430 FFT算法.

ikkl220 发表于 2012-7-16 18:00:26

#include      "typedef.h "????
这个是什么函数????{:sad:}

TXJ_yigo 发表于 2012-7-17 12:47:26

mark{:lol:}

爬爬 发表于 2012-7-17 16:54:40

虽然 我还不知道FFT到底是什么 但是 感觉还是蛮有用的 所以感谢楼主咯 以后应该会用到~

SHIYOULAN 发表于 2012-7-29 21:00:06

强               !!

小黑鱼1148 发表于 2012-7-29 23:57:39

dianyuan 发表于 2010-12-23 16:37 static/image/common/back.gif
//---定点---
#include
#include "math.h"


mark                      !!!

abcfanyuan 发表于 2012-9-20 11:15:36

标记,有用

LY1208798815 发表于 2012-9-25 14:57:55

{:smile:}{:smile:}{:smile:}

七弦桐 发表于 2012-9-27 07:58:16

mark!!先记下

maimaige 发表于 2012-9-27 09:28:48

mark 一下,做个记号啊,做个记号

zgbkdlm 发表于 2012-10-1 16:07:23

留着以后看~~~

kmani 发表于 2012-11-7 20:21:58

额,楼主float最多7位有效数字...

eryueniao 发表于 2012-11-8 12:53:21

cool                                          

dongfengge555 发表于 2012-11-30 09:20:17

楼主,你好!
   我现在正在研究MSP430的FF算法,我可以向您请教一下吗?1790485810,这是我的QQ。谢谢

kunpeng032 发表于 2012-11-30 22:49:40

mark !MSP430 FFT算法.

fanice 发表于 2013-1-21 11:53:19

mark,mark,

yulee 发表于 2014-8-2 20:20:44

{:smile:}mark

Myheartisbroken 发表于 2014-8-2 20:21:48

mark{:smile:}

boy007 发表于 2014-8-22 17:51:32

mark...................

frank_88888 发表于 2014-9-12 12:40:26

不错,支持!

ruanxianwu 发表于 2014-9-12 13:10:12

我现在正在研究MSP430的FF算法,我可以向您请教一下

qq915412051 发表于 2014-9-12 17:25:45

路过,学习的

gwichenjin 发表于 2014-11-18 14:06:03

MARK,谢谢分享

s1j2h3 发表于 2014-11-24 11:36:28

真差劲,居然是浮点的,改成定点还差不多

jiwx2011 发表于 2014-11-24 11:38:49

看一下!

江湖菜鸟 发表于 2015-1-31 13:08:23

fft算法以后留着有用

shinykongcn 发表于 2015-3-8 21:03:46

Mark!!

XJTUCJX 发表于 2015-4-12 23:47:11

谢谢分享.正需要
页: [1]
查看完整版本: MSP430 FFT算法