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

转——【FPGA代码学习】之FFT(3) - IPcore的进一步仿真 

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——【FPGA代码学习】之FFT(3) - IPcore的进一步仿真

+ z' m5 j1 m" |& r! H- J
! w- S5 j! L/ g# n; m$ o3 A+ y3 k在上一篇《【FPGA代码学习】之FFT(3) - IPcore》中我们利用FFT IPcore自带的仿真文件做了测试,没想到altrea给的参考数据看不出明显的效果,经过学习研究还是自己来生成一组测试数据吧,这样可以把问题说的更加的清楚和明白一些。/ ]4 {) `! t" q- o5 c5 }  R
+ [5 a/ C2 d& A: C% q" X
* p7 J$ T% @8 q! j
1、测试数据生成
& ?& r/ Y' y# d- s) v( j测试数据的生成,还是是MATLAB工具,方便,快捷,好使!5 G( Y& u  n, R+ V% l: g
生成包含两个频率的正弦波50hz和120hz,采样频率为1khz,增加随机噪声,并进行16bit采样,同时把原始数据和转换后的数据都存入文件中,便于后续对比:6 x4 |( P  }4 t" R
Matlab的代码如下所示:
clear  all;
close  all;
  
N=256; 进行256FFT
t =  0:0.001:0.6;  采样频率1Khz
x =  sin(2*pi*50*t)+sin(2*pi*120*t); 原始信号包含50hz120hz两种信号
x=x/2;  进行归一化处理
subplot(3,1,1);
plot(1000*t,x);
title('原始数据')
  
, w5 n1 Q# r) e# x" P. a! c
y= (x + 2  * rand(size(t)) -1)/2; 增加噪声信号,幅值正负1,并归一化处理
subplot(3,1,2);
plot(1000*t,y);   
title('增加噪声后的数据')
  
+ n' N* `5 d/ s  H  X2 X# D+ z
y2=round(y*2^15);  对数据取整,并进行16bit量化  
fid=fopen('Data_input.txt','w+');  把原始数据存入文件Data_input.txt
fprintf(fid,'%g\r\n',y2);  
fclose(fid);
  ! R+ Q$ s( ]% R
[Y,  exp_out]= fft256_model(y2(1:256),N,0); 调用fft256_model  

& v; V$ r- X" E- v6 A9 o- E1 x
把转换后的数据分别存入fft_real_output.txt和fft_imag_output.txt
fid=fopen('fft_real_output.txt','w+');  
fprintf(fid,'%g\r\n',real(Y));
fclose(fid);

+ e% S$ z$ B. e$ J* r. V
fid=fopen('fft_imag_output.txt','w+');
fprintf(fid,'%g\r\n',imag(Y));
fclose(fid);
  - Q4 I* ~8 l' Z. V/ l& j- x
Pyy = Y.*  conj(Y) ;
f =  1000*(0:128)/256;
subplot(3,1,3);
plot(f,Pyy(1:129))   
title('QuantusIPcore函数转换的结果')
  

  • 2 X0 I1 g) N* R6 _: D- @: _  `- I

+ b( }1 a9 z7 a, x7 b" ?
0 F0 H$ q( Y# O) x3 A1 t  i: ^

- A  y! H5 q% {% d7 }; J+ t
5 `) r) s) x6 G( m- j: q0 ~" |执行效果如下图所示:/ H( J6 \7 T4 N: X8 ]2 g+ ~

9 v3 _) _0 q( w4 I6 O; t这样看起来明显多了,可以清晰的区分出50hz和120hz的信号% {( l& s' E1 F* @

- o; X& A; D. O$ s& h$ E& C2、继续调用Modelsim来进行测试
: ^1 J0 M& R$ J( I测试文件还是如前面所示,主要是用到上面生成的Data_input.txt的数据文件;
1 J% ~3 t' N7 a2 f) S: ] Data_input.rar (1.88 KB, 下载次数: 0) , X7 j; u. S, \6 B3 k" d
简单修改testbench6 r3 k6 A  K( L' @( f5 i
1、data_RF = $fopen("Data_input.txt","r");7 U2 V, r7 L/ }. G7 r9 k
2、sink_imag <= 0;
  G. R) n6 Y0 B6 z$ X' X9 o  J6 a2 r4 V: ^; v8 L1 y
9 s( T3 F7 I7 D4 Z  H; i7 v2 G
Data_input.txt数据文件对比一下,输入数据完全正确:
' ^$ E% n: M* ]$ [. m7 Z

; D& p- @  F3 D7 d9 k+ ~' V3 F# F7 b

4 A6 G5 D5 @: A# v5 A- \, R6 i+ }再来看看输出数据的一致性,以下是Modelsim的仿真结果:  y/ G4 c# U! V0 E2 F

* m% c$ K, m- h5 M6 H5 [/ _; o! p2 P5 q- ?0 v; U% ?$ f

) X( V( B9 q' H3 CMatlab的输出文件如下所示
3 F( n1 S: B4 g% R( ^7 D fft_imag_output.rar (703 Bytes, 下载次数: 1)
3 A8 J* E* c; ]  U" `: w fft_real_output.rar (682 Bytes, 下载次数: 0)
1 q9 T& a; w2 ^1 V% y" f" l& \3 q
/ R5 {) y2 G. }, J. s! K/ C
结果比对完全一致,有兴趣的可以深入的学习一下。2 ^/ u# g% [3 o. B2 |7 n3 T+ Q

5 s$ j3 D+ J- n- I" ?# z+ \& z5 K8 D

该用户从未签到

3#
发表于 2021-12-28 09:00 | 只看该作者
您好,可以提供一下modelsim tb文件学习学习吗?我的两个结果不一致,不知道哪里出了问题。

该用户从未签到

4#
发表于 2022-1-3 23:24 | 只看该作者
牛牛牛牛牛牛牛牛牛牛
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 01:37 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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