找回密码
 注册
关于网站域名变更的通知
查看: 2262|回复: 1
打印 上一主题 下一主题

转——对ADC采样数据进行FFT处理

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-16 09:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——对ADC采样数据进行FFT处理

2 f, ?3 F2 ^, R2 c8 m, ?+ S1 T* I  S) l# A" u/ x3 Q, M0 [
前面看了柱斑的3篇有关ADC采样的帖子,我的板子没有ADC,所以我也只能从同事的DAQ采集得到的数据进行FFT处理,当然只是进行仿真。学校学习的FFT的原理老早就丢给了老师,最近一段时间花了点时间复习了FFT的物理意义,这些信息大家都可以通过度娘得到  N2 h2 q! x6 `6 Z6 k( C
- g+ `' Q: T5 ^2 e- E5 [8 c* c

6 M/ I# E6 ^! \& \
) R1 S2 t5 S0 M( hFFT的作用有很多种,那么我们做FFT的意义非常简单,就是分析信号源中的频率分量,并精确得到每个频率分量的幅度,相位信息我们不关注。对了,fft我们没有能力自行设计代码,所以啦,只能使用Altera的IP核。
0 q: b$ g* |0 @" e) c! _5 Q3 ]9 |* ^' J; M' ]) {9 \1 x7 y

& G; U: T5 \5 d1 r; M; s: w8 a* u4 ]$ @9 O
在例化FFT使用之前,先简单描述下我们的系统。信号源来自光电探测器,为了提取出微弱的信号,信号在光域进行了声光调制,所以最终电信号在频率分析可以获得最大的动态范围。信号调制的频率应该KHz级别,所以我们的ADC采样速率不是很高,20MHz左右即可。只是信号调制时间长度一般是1ms,要求采样时间长度达到秒级,所以虽然采样率不高,但是每次处理的数据量还是比较大,比如一帧(1ms)数据采样后得到20000个样本。
1 @) J; f# }$ g6 P, \' \: T/ |0 `; e# p. i3 c
  N1 X% A* D) e! s8 ~4 p

- P% V7 Z; t& @+ Z  H根据上述分析,那么在例化FFT的时候初步确定选用Streaming模式(个人感觉应该可以使用缓冲突发模式),fft转换长度选为2048.这样最小分辨出的频率是20000KHz/2048大致等于9KHz。6 T. P7 o! _  d, U2 I: H0 J/ s
7 G. a/ ]0 O, }; ~7 N) L
1 J9 R0 c9 b( n

2 ]' |9 r# S7 H, a4 c1 Q5 A由于事先不知道信号调制的频率,所以选择了上述FFT的参数,结果悲剧发生了,FFT转换的结果始终是只有DC分量,询问同事得知信号调制在10KHz左右undefined' Z. B8 w+ @- K7 Z& Q# Z1 E

' I' K7 u5 g) u" I8 F8 q' M" V* J
4 X! q# n, h$ Y8 J+ E" i% K, N+ \% U2 L2 U0 u/ }) ~

! I- I, k' n* a2 d2 \. S: b- Y% Z$ h1 i9 s) D
' [" Y2 Y. P6 q. `( ?
上图没有放大,我仔细放大查看过,确实没有其他频率分量(我查的是输出实部,虚部是底噪的响应);后来发现问题所在之后,重新例化了FFT,使用了32768点转换,这样最小可以分辨到610Hz。仿真结果如下图所示:" Q% p/ V5 m4 x: Y  i- z

# U3 A8 ^- w) |& Y / m2 W3 X1 g% F- M
) x1 p2 {% q; I8 t2 }
1 E, g" `  d' `- B
9 ?: ^5 v5 k1 e, f) n) `0 y
从上图我们可以看到信号频谱出现在了第18个点上,该点大致频率等于610*18=10.98KHz。
) J. ~4 H2 s0 D! ~0 X% h2 s8 R
  [! Z+ Q* m' T$ F! U, s9 U0 O8 `8 g! t, K  V
" L8 d  `6 Y# S5 S
大致仿真过程就是这样了,最后也学柱斑来几个总结:: y6 w0 A' G# R) j- j3 }- a
- o6 @" p# U% T
1、是FFT给ADC采样数据进行转换的时候,ADC的数据从FFT的实部输入,虚部输入端口接0。这个为何这么做我也是不太清楚,看到有人这么做就这么做,给Altera提了SR,人家回复说可以这么做,至于具体虚部要不要接数据,人家说要根据自己的算法来决定$ |/ U( o& o; H1 _" F: U- C  G
5 ]/ V/ n, W  x8 S+ {
2、FFT的结果从上面仿真的结果来看,是不是我采用实部输出就可以呢?这个问题我也在SR里咨询了,答复也是可以的。但是FFT的用户手册说了,由于FFT核采用但是块浮点实现的,所以为了不丢失精度,最终结果是需要与EXP(指数)输出进行缩放处理,上图的src_value就是我缩放处理后实部的平方加上虚部的平方再开发得到的,这样得到的结果应该是FFT转换后的幅度吧。由于项目需要获取信号的精确幅度,所以我的疑问是直接从实部得到幅度值还是需要进行上述转换得到?
6 z3 I( D( J- m5 z' G" s4 X
1 l4 O: \5 o2 ^% a2 c
5 S  Z5 D8 o* ^/ h/ W$ J3、最后一个问题是图中明显看到出现了频率分量的镜像,那么32768点fft是不是只能分辨出一半的频率分量呢?比如20MHz的话只能分辨出610Hz到10MHz而不是610Hz到20MHz呢?因为后半部分都是前半部分的镜像啊。
# p- r- X" J9 x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-30 08:45 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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