加载中…
个人资料
liht1634
liht1634
  • 博客等级:
  • 博客积分:0
  • 博客访问:214,488
  • 关注人气:58
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

AD采集数据的FFT变换分析

(2016-06-08 10:28:38)
标签:

ad采集数据的fft变换

分类: 算法、协议、信号处理

       在通常的信号采集应用中,肯定是需要对AD数据进行数字处理后,才将数据作为计算的有效值,且在绝大多数的有波形数据存在的情况下,FFT数据变换的应用,则是一个极为有用的工具。现在的大学课本中也都会将信号分析作为电子类工科的主要课程,但学习后,对它的概念及使用方法也模糊不清,而更多的人是不清楚FFT的原理。

数据分析的基本处理流程是:数据采集、数据倒位序处理、FFT变换、数据取模运算、FFT反变换、波形重绘。常常不需要绘制所采集的信号波形的情况下,最后两步是不需要的过程。该文就如何处理前面4个过程进行说明,所使用的数据是使用软件仿真生成可用数据进行测试。

测试代码如下

#define     PI   (3.1415926)

#define     PI2    (2*PI)

Complex     SinTab[64],VialCode1[64];  //定义复数数组,complex定义在FFT.H中

float       SineValue[64],PIdot;

int         VialCode[64];

 

PIdot = PI2/8;       // 确定一个周期内产生8个点的数据

initW(SinTab,64);    //产生FFT用的正弦表,为64点FFT做准备。该函数在FFT.H中定义,见下方

for(i1=0;i1<64;i1++) //产生正弦信号数据
{

   SineValue[i1] = 2.3+0.283*cos(PIdot*(i1%8)); 

//使用cos函数模拟生成每周期8个采集点的数源,产生的波形如图一所示

   VialCode[i1] = SineValue[i1]/0.00122; //假设AD的分辨率为1.22mV,将上面产生的模拟信号,编码成AD

                              //采集到的数据。即通常从AD读出来的就是这个数据,产生的波形如图二所示

}

for(i1=0;i1<64;i1++)  //将模拟的AD编码数据组装为复数,即模拟的A/D值放实部,虚部放0

{

  VialCode1[i1].real=VialCode[i1];
  VialCode1[i1].img=0;

}

fft(VialCode1,64,SinTab,1); //64点的FFT运算,在FFT.H中定义的

for(i1=0;i1<64;i1++) //将FFT后的数据进行取模,即实部的平方+虚部的平方后再开方

{

  VialCode[i1]=sqrt(VialCode1[i1].real*VialCode1[i1].real+VialCode1[i1].img*VialCode1[i1].img ); 

//波形图中取了第0和第9点的数据,如图三所示

}

AD采集数据的FFT变换分析
图一
AD采集数据的FFT变换分析
图二
AD采集数据的FFT变换分析
图三

    图三中第一个数据是直流分量,值为:120640   那两个小尖尖的数据是50Hz的交流分量(第8点和倒数第7点):7422(因为是对称的),如按上述的AD分辨率=1.22mV来计算:

    0点直流:120640/64=1885    直流幅值=1885*1.22=2.299V。

    8点交流:7422/(64/2)=232.56   交流幅值=232.56*1.22=0.284V。

    如AD采集频率为400Hz,则频率的分辩率为:400/64=6.25HZ。如果要看50Hz的信号,则50/6.25=8,即交流分量的第八个点上。

    所以在使用FFT分析数据时,有两个参数:采集频率、采集点数是很重要的。对于AD所采集到的数据,无论是单极性数据,还是双极性数据,均可以直接进行FFT运算,结果都会是一样的。

实验用的FFT代码下载或见百度云盘/01、项目设计/10、单片机算法/02、FFT算法/AD采集数据的FFT变换分析

我的更多文章:

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有