打印

用DSP做AD采样然后做FFT变换

[复制链接]
3834|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
z641230919|  楼主 | 2015-5-26 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
玛尼玛尼哄| | 2015-5-26 21:41 | 只看该作者
你换个学长看看,采样后做FFT,你要先AD做出来啊,然后得到的是数字信号,你需要离散数字FFT。

使用特权

评论回复
板凳
zhangmangui| | 2015-5-26 21:43 | 只看该作者
ADC采集完成了是吧    然后找个FFT的函数    先做处理吧  
结合理论在慢慢理解

使用特权

评论回复
地板
z641230919|  楼主 | 2015-5-27 08:51 | 只看该作者
zhangmangui 发表于 2015-5-26 21:43
ADC采集完成了是吧    然后找个FFT的函数    先做处理吧  
结合理论在慢慢理解 ...

AD是实验室以前学长们做的,拿过来直接用,但是在AD工程主函数里加入了我自己编的FFT,采不到数据,另一个同学也用的这个AD就采到了数据。昨天求助时候的问题已经解决了,也就是说,现在AD和FFT部分的程序都有,就是结合起来还是由问题

使用特权

评论回复
5
z641230919|  楼主 | 2015-5-27 08:51 | 只看该作者
玛尼玛尼哄 发表于 2015-5-26 21:41
你换个学长看看,采样后做FFT,你要先AD做出来啊,然后得到的是数字信号,你需要离散数字FFT。 ...

AD已经做出来了,但是采不到数据

使用特权

评论回复
6
zhangmangui| | 2015-5-27 22:31 | 只看该作者
z641230919 发表于 2015-5-27 08:51
AD是实验室以前学长们做的,拿过来直接用,但是在AD工程主函数里加入了我自己编的FFT,采不到数据,另一 ...

看看你的ADC怎么触发采集的    FFT部分是不是进入了循环
ADC不再触发

使用特权

评论回复
7
玛尼玛尼哄| | 2015-5-30 09:11 | 只看该作者
z641230919 发表于 2015-5-27 08:51
AD已经做出来了,但是采不到数据

都做出来了,还采集不到数据,莫非没有数据吗?

使用特权

评论回复
8
天灵灵地灵灵| | 2015-5-30 11:03 | 只看该作者
出来的ADC不是数据吗?你的意思是数据不能FFT,是不是FFT写的部队

使用特权

评论回复
9
haogong| | 2015-8-22 11:16 | 只看该作者
ADC的值怎么处理可以直接带入TI的fft lib,看资料有的是Q30 ,有的是Q31.可ccs中也没有Q31的格式。

使用特权

评论回复
10
vivilzb1985| | 2015-8-23 12:12 | 只看该作者
那就一次性采集512组数据或者1024组数据的做下FFT变换的呗。

使用特权

评论回复
11
firstblood| | 2015-8-25 12:56 | 只看该作者
我给共享个FFT算法的吧
/*¿ìËÙ¸µÀïÒ¶±ä»»*/   
void fft(void)   
{   
        int   i=0,j=0,k=0,l=0;   
          complex   up,down,product;   
          change();   
          for(i=0;i<log(size_x)/log(2);i++)/*Ò»¼¶µûÐÎÔËËã*/   
          {      
                  l=1<<i;   
                  for(j=0;j<size_x;j+=2*l)/*Ò»×éµûÐÎÔËËã*/   
                  {                           
                          for(k=0;k<l;k++)/*Ò»¸öµûÐÎÔËËã*/   
                          {                 
                                        mul(x[j+k+l],W[size_x*k/2/l],&product);   
                                        add(x[j+k],product,&up);   
                                        sub(x[j+k],product,&down);   
                                        x[j+k]=up;   
                                        x[j+k+l]=down;   
                          }   
                 }   
         }   
}   

使用特权

评论回复
12
firstblood| | 2015-8-25 12:57 | 只看该作者
这个是快速傅里叶逆变换的
/*¿ìËÙ¸µÀïÒ¶Äæ±ä»»*/   
  void   ifft()   
  {   
  int   i=0,j=0,k=0,l=size_x;   
  complex   up,down;   
  for(i=0;i<   (int)(   log(size_x)/log(2)   );i++)   /*Ò»¼¶µûÐÎÔËËã*/   
  {     
  l/=2;   
  for(j=0;j<size_x;j+=   2*l   )   /*Ò»×éµûÐÎÔËËã*/   
  {                        
  for(k=0;k<l;k++)   /*Ò»¸öµûÐÎÔËËã*/   
  {               
  add(x[j+k],x[j+k+l],&up);   
  up.real/=2;up.img/=2;   
  sub(x[j+k],x[j+k+l],&down);   
  down.real/=2;down.img/=2;   
  divi(down,W[size_x*k/2/l],&down);   
  x[j+k]=up;   
  x[j+k+l]=down;   
  }   
  }   
  }   
  change();   
  }   

使用特权

评论回复
13
firstblood| | 2015-8-25 12:57 | 只看该作者
还需要初始化的
/*³õʼ»¯±ä»»ºË*/   
void   initW()   
{   
        int   i;      
        for(i=0;i<size_x;i++)   
        {   
                W[i].real=cos(2*PI/size_x*i);   
                W[i].img=-1*sin(2*PI/size_x*i);   
        }   
}   

使用特权

评论回复
14
smilingangel| | 2015-8-25 12:59 | 只看该作者
楼上的分享代码我参考的了。。

使用特权

评论回复
15
gygp| | 2015-8-26 22:50 | 只看该作者
啥错误?

使用特权

评论回复
16
gygp| | 2015-8-26 22:50 | 只看该作者
使用库函数不行么?

使用特权

评论回复
17
biechedan| | 2015-8-26 22:56 | 只看该作者
数据采集跟fft算法冲突?

使用特权

评论回复
18
biechedan| | 2015-8-26 22:56 | 只看该作者
可能你的执行量太多了。

使用特权

评论回复
19
zhangbo1985| | 2015-8-27 18:00 | 只看该作者
采集的数据量跟FFT处理的数据量有一定的关系的。特别是涉及到频率的分辨率的问题。

使用特权

评论回复
20
zhangbo1985| | 2015-8-27 18:01 | 只看该作者
原则上采集到的数据量越多越好,也就能越真实的反映原信号的状态的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝