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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——【FPGA代码学习】之FFT(3) - IPcore的进一步仿真
: E! `/ E7 B7 p# P7 @, y  ^5 L
5 J. u3 ]7 ~( m' ~; ?
在上一篇《【FPGA代码学习】之FFT(3) - IPcore》中我们利用FFT IPcore自带的仿真文件做了测试,没想到altrea给的参考数据看不出明显的效果,经过学习研究还是自己来生成一组测试数据吧,这样可以把问题说的更加的清楚和明白一些。
4 W) s: [5 C* U
2 y/ r3 X$ Z" Z: z) A$ z

# H) T& r! h6 s$ Z2 O/ m1、测试数据生成) |( e! M3 h& q' w. X% q$ C
测试数据的生成,还是是MATLAB工具,方便,快捷,好使!
) i. Q3 ?. I5 V生成包含两个频率的正弦波50hz和120hz,采样频率为1khz,增加随机噪声,并进行16bit采样,同时把原始数据和转换后的数据都存入文件中,便于后续对比:
! S  R* e  [7 O1 S2 l5 uMatlab的代码如下所示:
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('原始数据')
  3 |6 `2 F- m- ^, Y+ X
y= (x + 2  * rand(size(t)) -1)/2; 增加噪声信号,幅值正负1,并归一化处理
subplot(3,1,2);
plot(1000*t,y);   
title('增加噪声后的数据')
  
$ E% V# {4 ]# G1 j3 o! p
y2=round(y*2^15);  对数据取整,并进行16bit量化  
fid=fopen('Data_input.txt','w+');  把原始数据存入文件Data_input.txt
fprintf(fid,'%g\r\n',y2);  
fclose(fid);
  
: I- K4 h& ^+ m0 R3 X, b9 X
[Y,  exp_out]= fft256_model(y2(1:256),N,0); 调用fft256_model  
( U7 h. q- r6 k0 H/ M* N
把转换后的数据分别存入fft_real_output.txt和fft_imag_output.txt
fid=fopen('fft_real_output.txt','w+');  
fprintf(fid,'%g\r\n',real(Y));
fclose(fid);
" d3 v3 m9 l' ]
fid=fopen('fft_imag_output.txt','w+');
fprintf(fid,'%g\r\n',imag(Y));
fclose(fid);
  
" L' E1 s$ k1 {# |4 S3 k
Pyy = Y.*  conj(Y) ;
f =  1000*(0:128)/256;
subplot(3,1,3);
plot(f,Pyy(1:129))   
title('QuantusIPcore函数转换的结果')
  
  • 9 `: Z. C6 U1 z$ ?

! C1 J& g6 y% r) ?# `
) o5 }+ v; T, ?8 B8 u* q5 E

: w# [6 @4 n# O# I5 s% s( M7 T5 U- g" u+ X6 b
执行效果如下图所示:/ J5 o$ }+ r3 C

( S7 H6 X. J& E: p, h7 p( G这样看起来明显多了,可以清晰的区分出50hz和120hz的信号
3 n9 Z$ q: \4 h+ o, d! \6 P8 M  ?( P4 V, [% a2 ]
2、继续调用Modelsim来进行测试
. t; G3 }2 d: H! [测试文件还是如前面所示,主要是用到上面生成的Data_input.txt的数据文件;! S3 E" |" \4 V, w
Data_input.rar (1.88 KB, 下载次数: 0)
1 Z5 Q- n& q' _! y3 ~) e简单修改testbench. y7 Z9 z$ E1 N6 O
1、data_RF = $fopen("Data_input.txt","r");$ E& N, J8 t/ R% o' J
2、sink_imag <= 0;
1 J- X, Y9 S+ D7 Q; d: Z7 w- C: C% W

. ^' w6 H& m; K8 q6 j" r+ T3 ^Data_input.txt数据文件对比一下,输入数据完全正确:! Z  B) j# t6 S# j, d  f

: W; m1 l- F( }; ]' r3 \' t
/ c4 b9 ?2 f$ t: W  ]. Q

8 [& ~6 F1 f# V9 }9 x% i; _再来看看输出数据的一致性,以下是Modelsim的仿真结果:
2 W. r* T+ H2 c8 z0 @0 L7 [: b
% [/ F+ g+ O" e: `$ r
$ G, C6 U3 D3 x" D: t. y

5 T! n: T/ i- j8 i! C2 YMatlab的输出文件如下所示
9 J# g5 i" s, F7 ]  L% V fft_imag_output.rar (703 Bytes, 下载次数: 1)   o8 [9 @1 p! k: l
fft_real_output.rar (682 Bytes, 下载次数: 0)
* ^- m* x3 e( C& Z
7 Y" y: `9 p0 Y

' l6 a8 o3 k; l! s6 _* Q3 I3 }6 P结果比对完全一致,有兴趣的可以深入的学习一下。
: ~! v* M' ^! p1 {8 A5 \( S; H+ l- ?, t  L; o6 g

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-6 18:24 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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