MyFPGA Forum

 找回密码
 注册
搜索
查看: 4777|回复: 0
打印 上一主题 下一主题

[FPGA开发] 【Altera SoC体验之旅】对ADC采样数据进行FFT处理

[复制链接]
跳转到指定楼层
1#
发表于 2015-8-12 17:44:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
[FPGA开发] 【Altera SoC体验之旅】对ADC采样数据进行FFT处理

本文转自  http://bbs.eeworld.com.cn/thread-459630-1-1.html

前面看了柱斑的3篇有关ADC采样的帖子,我的板子没有ADC,所以我也只能从同事的DAQ采集得到的数据进行FFT处理,当然只是进行仿真。学校学习的FFT的原理老早就丢给了老师,最近一段时间花了点时间复习了FFT的物理意义,这些信息大家都可以通过度娘得到



FFT的作用有很多种,那么我们做FFT的意义非常简单,就是分析信号源中的频率分量,并精确得到每个频率分量的幅度,相位信息我们不关注。对了,fft我们没有能力自行设计代码,所以啦,只能使用Altera的IP核。



在例化FFT使用之前,先简单描述下我们的系统。信号源来自光电探测器,为了提取出微弱的信号,信号在光域进行了声光调制,所以最终电信号在频率分析可以获得最大的动态范围。信号调制的频率应该KHz级别,所以我们的ADC采样速率不是很高,20MHz左右即可。只是信号调制时间长度一般是1ms,要求采样时间长度达到秒级,所以虽然采样率不高,但是每次处理的数据量还是比较大,比如一帧(1ms)数据采样后得到20000个样本。



根据上述分析,那么在例化FFT的时候初步确定选用Streaming模式(个人感觉应该可以使用缓冲突发模式),fft转换长度选为2048.这样最小分辨出的频率是20000KHz/2048大致等于9KHz。



由于事先不知道信号调制的频率,所以选择了上述FFT的参数,结果悲剧发生了,FFT转换的结果始终是只有DC分量,询问同事得知信号调制在10KHz左右

  




上图没有放大,我仔细放大查看过,确实没有其他频率分量(我查的是输出实部,虚部是底噪的响应);后来发现问题所在之后,重新例化了FFT,使用了32768点转换,这样最小可以分辨到610Hz。仿真结果如下图所示:

  



从上图我们可以看到信号频谱出现在了第18个点上,该点大致频率等于610*18=10.98KHz。



大致仿真过程就是这样了,最后也学柱斑来几个总结:

1、是FFT给ADC采样数据进行转换的时候,ADC的数据从FFT的实部输入,虚部输入端口接0。这个为何这么做我也是不太清楚,看到有人这么做就这么做,给Altera提了SR,人家回复说可以这么做,至于具体虚部要不要接数据,人家说要根据自己的算法来决定。

2、FFT的结果从上面仿真的结果来看,是不是我采用实部输出就可以呢?这个问题我也在SR里咨询了,答复也是可以的。但是FFT的用户手册说了,由于FFT核采用但是块浮点实现的,所以为了不丢失精度,最终结果是需要与EXP(指数)输出进行缩放处理,上图的src_value就是我缩放处理后实部的平方加上虚部的平方再开发得到的,这样得到的结果应该是FFT转换后的幅度吧。由于项目需要获取信号的精确幅度,所以我的疑问是直接从实部得到幅度值还是需要进行上述转换得到?


3、最后一个问题是图中明显看到出现了频率分量的镜像,那么32768点fft是不是只能分辨出一半的频率分量呢?比如20MHz的话只能分辨出610Hz到10MHz而不是610Hz到20MHz呢?因为后半部分都是前半部分的镜像啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-26 18:15 , Processed in 0.046935 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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