MyFPGA Forum
标题:
[FPGA开发] 【Altera SoC体验之旅】对ADC采样数据进行FFT处理
[打印本页]
作者:
BOB_Sun
时间:
2015-8-12 17:44
标题:
[FPGA开发] 【Altera SoC体验之旅】对ADC采样数据进行FFT处理
[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左右
1 (1).jpg
(166.96 KB, 下载次数: 612)
下载附件
保存到相册
2015-8-12 17:44 上传
上图没有放大,我仔细放大查看过,确实没有其他频率分量(我查的是输出实部,虚部是底噪的响应);后来发现问题所在之后,重新例化了FFT,使用了32768点转换,这样最小可以分辨到610Hz。仿真结果如下图所示:
5.jpg
(183.73 KB, 下载次数: 602)
下载附件
保存到相册
2015-8-12 17:44 上传
从上图我们可以看到信号频谱出现在了第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呢?因为后半部分都是前半部分的镜像啊。
欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/)
Powered by Discuz! X3