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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

7 y0 ^8 n* ~# |4 b, F9 q, J0 X/ `- u5 P
在上一篇《【FPGA代码学习】之FFT(3) - IPcore》中我们利用FFT IPcore自带的仿真文件做了测试,没想到altrea给的参考数据看不出明显的效果,经过学习研究还是自己来生成一组测试数据吧,这样可以把问题说的更加的清楚和明白一些。
% @, P- T3 Z' \- ?2 O0 P0 ?
* r( V' Z/ E0 ~0 q& R8 D; P

' l) Q" v* D% H; B2 T' a1、测试数据生成% D  I8 s5 Q( _5 c" t, M
测试数据的生成,还是是MATLAB工具,方便,快捷,好使!% ~2 \0 D) ]+ l3 ~8 K. S
生成包含两个频率的正弦波50hz和120hz,采样频率为1khz,增加随机噪声,并进行16bit采样,同时把原始数据和转换后的数据都存入文件中,便于后续对比:
4 J$ C5 |" B/ N. X% r0 Q+ o. XMatlab的代码如下所示:
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('原始数据')
  
* C# G! m, D8 k' g
y= (x + 2  * rand(size(t)) -1)/2; 增加噪声信号,幅值正负1,并归一化处理
subplot(3,1,2);
plot(1000*t,y);   
title('增加噪声后的数据')
  6 [3 J& m+ O1 z+ o; x
y2=round(y*2^15);  对数据取整,并进行16bit量化  
fid=fopen('Data_input.txt','w+');  把原始数据存入文件Data_input.txt
fprintf(fid,'%g\r\n',y2);  
fclose(fid);
    r7 g1 G+ ?, r- i; O& w+ I9 y
[Y,  exp_out]= fft256_model(y2(1:256),N,0); 调用fft256_model  

: K8 j  d7 X$ E1 o
把转换后的数据分别存入fft_real_output.txt和fft_imag_output.txt
fid=fopen('fft_real_output.txt','w+');  
fprintf(fid,'%g\r\n',real(Y));
fclose(fid);

$ _( b* f, g3 j( E# g7 y6 Q3 Y
fid=fopen('fft_imag_output.txt','w+');
fprintf(fid,'%g\r\n',imag(Y));
fclose(fid);
  ; m  |$ c5 g5 ~1 k4 e# e
Pyy = Y.*  conj(Y) ;
f =  1000*(0:128)/256;
subplot(3,1,3);
plot(f,Pyy(1:129))   
title('QuantusIPcore函数转换的结果')
  
  •   G( ~5 W" p* l6 C$ g
! B# `* s& i4 `4 |

. O) a' U1 Q5 C
# n' C0 a1 |1 e7 p$ {1 k9 ^# t

" e* J: s0 [) Y  u% U; w8 I) O* {执行效果如下图所示:6 s5 G! ]; r7 r6 c

: p) a# n1 C1 p  O/ ?这样看起来明显多了,可以清晰的区分出50hz和120hz的信号
# C3 C1 P/ @- S" I; t0 K  A* K: C, x, E
2、继续调用Modelsim来进行测试# ~- d# W) h, I8 |* n
测试文件还是如前面所示,主要是用到上面生成的Data_input.txt的数据文件;
1 @, U5 j9 k; e( {9 y5 Z Data_input.rar (1.88 KB, 下载次数: 0)
3 m0 H4 j, {/ w; I' F( X! p简单修改testbench! s$ U& R( |. A0 g$ n6 R
1、data_RF = $fopen("Data_input.txt","r");
5 K$ Q3 w' |1 F* S+ e: s* j2、sink_imag <= 0;' D! h3 @, E+ z7 \  E9 {7 M

+ `; x( n. K# s3 j0 }8 s3 M
" d% n9 x5 V# D* {6 F, q& U
Data_input.txt数据文件对比一下,输入数据完全正确:1 b* U% o5 K, I- }

6 ~/ n! B' U( r/ H; @' }. x2 c& X
* w( x  [4 b, _' X
8 O6 x8 B% U! t: T0 T: b; P
再来看看输出数据的一致性,以下是Modelsim的仿真结果:
5 C$ v/ A( C8 w& m; \3 c

, N: k6 [9 [! F- r. |0 t& o6 v. t2 J) ?

. T' _* ~! @" ~$ v- J8 Y/ QMatlab的输出文件如下所示
7 x/ ^; K8 i9 s/ q- W+ ~' g3 T5 M fft_imag_output.rar (703 Bytes, 下载次数: 1) ! h  u) z* F6 k. t
fft_real_output.rar (682 Bytes, 下载次数: 0) 9 Y5 r2 E1 L' t
; _$ u* M7 ]# ]! V+ B. b
1 g) Y  W& C# F8 [' }+ A% U. ]
结果比对完全一致,有兴趣的可以深入的学习一下。3 X" e$ }8 c& m+ P. H

. H. |( O/ g" L" e

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-25 21:09 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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