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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——【FPGA代码学习】之FFT(3) - IPcore的进一步仿真
# P# C5 i4 G8 C$ k; T; p

$ x& S- W6 b6 O; a在上一篇《【FPGA代码学习】之FFT(3) - IPcore》中我们利用FFT IPcore自带的仿真文件做了测试,没想到altrea给的参考数据看不出明显的效果,经过学习研究还是自己来生成一组测试数据吧,这样可以把问题说的更加的清楚和明白一些。
& `; U) a. z6 B  ?$ ?8 ?* b- F' d6 C9 p% f
4 [) H: L0 t& {% [7 N, D4 w, v
1、测试数据生成
6 I6 S8 R) h: c测试数据的生成,还是是MATLAB工具,方便,快捷,好使!
( C+ {5 o3 a! S# X+ q生成包含两个频率的正弦波50hz和120hz,采样频率为1khz,增加随机噪声,并进行16bit采样,同时把原始数据和转换后的数据都存入文件中,便于后续对比:' u" _4 F4 P% v. B- k. ~& S3 a" B
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('原始数据')
  0 v, t* w$ t# d* z; F3 ^8 G
y= (x + 2  * rand(size(t)) -1)/2; 增加噪声信号,幅值正负1,并归一化处理
subplot(3,1,2);
plot(1000*t,y);   
title('增加噪声后的数据')
  " B8 _/ {. {( p6 J; o
y2=round(y*2^15);  对数据取整,并进行16bit量化  
fid=fopen('Data_input.txt','w+');  把原始数据存入文件Data_input.txt
fprintf(fid,'%g\r\n',y2);  
fclose(fid);
  * y, ~) u( R+ S& O
[Y,  exp_out]= fft256_model(y2(1:256),N,0); 调用fft256_model  

2 F: h+ g% i1 E+ u2 Q
把转换后的数据分别存入fft_real_output.txt和fft_imag_output.txt
fid=fopen('fft_real_output.txt','w+');  
fprintf(fid,'%g\r\n',real(Y));
fclose(fid);

- _' g! Z" N1 U9 p
fid=fopen('fft_imag_output.txt','w+');
fprintf(fid,'%g\r\n',imag(Y));
fclose(fid);
  ; l# @9 b9 d! l# J5 c
Pyy = Y.*  conj(Y) ;
f =  1000*(0:128)/256;
subplot(3,1,3);
plot(f,Pyy(1:129))   
title('QuantusIPcore函数转换的结果')
  
  • 5 w* k: B# E+ L' ], k
4 c2 ^' j  h2 q& a$ q1 B0 l8 |. g

/ ?* G: w, g( L! |

6 W* ~  X0 U- W# Z6 A( f: U; Q# x) [2 f4 E3 K2 \$ e0 G/ i1 L; n
执行效果如下图所示:: J2 J2 ~. O/ y

  K. s$ `( y1 M* O( O这样看起来明显多了,可以清晰的区分出50hz和120hz的信号( X6 g- q: b( s1 t! Q: b5 n6 K
5 k! k; f3 L0 d* [
2、继续调用Modelsim来进行测试
% s2 H# g* ?2 K/ b/ C测试文件还是如前面所示,主要是用到上面生成的Data_input.txt的数据文件;$ l5 r: P3 P0 L9 a* G
Data_input.rar (1.88 KB, 下载次数: 0) . h9 N" T, G3 A0 @* E* K2 B$ N
简单修改testbench
0 r! n" \: H; N$ Z; N2 Y& ]1、data_RF = $fopen("Data_input.txt","r");
7 g% a3 C: |2 H4 D7 `% p+ Z. [% y# U2、sink_imag <= 0;
9 ~4 h2 m# x( h/ H$ K8 Q$ [1 I
, a5 i3 c) X9 X- v+ c5 ]

$ V4 i8 b9 E5 N2 w& P2 HData_input.txt数据文件对比一下,输入数据完全正确:
$ {7 X, `2 l, J# f
7 g9 \7 H4 P0 \: H* ^" n/ l+ C4 S
2 Z4 M% Q6 p" J+ _
) G+ |# ]1 B( z
再来看看输出数据的一致性,以下是Modelsim的仿真结果:7 ?5 r# E1 H1 ?) Y$ Z3 T2 M

5 M& P/ F2 ^2 ^& x7 `9 m# p0 L. y7 `

+ w( e# T& ?- b6 U& {6 cMatlab的输出文件如下所示
$ g( S7 [, O' S fft_imag_output.rar (703 Bytes, 下载次数: 1)
2 f6 A3 @3 ?, l6 L fft_real_output.rar (682 Bytes, 下载次数: 0)
, x7 @( V" W& d
/ s0 Q  o; f* n5 ^0 A/ \
# K- c3 I* W- \4 a. l
结果比对完全一致,有兴趣的可以深入的学习一下。' c6 C& q. c$ I5 J: K) U9 {
% N& d/ j6 C' o, j9 \  f4 l

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-31 15:52 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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