ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:895.14KB ,
资源ID:30611701      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30611701.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MATLAB设计FPGA实现联合ISE和Modelsim仿真的FIR滤波器设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MATLAB设计FPGA实现联合ISE和Modelsim仿真的FIR滤波器设计.docx

1、MATLAB设计FPGA实现联合ISE和Modelsim仿真的FIR滤波器设计MATLAB设计,FPGA实现,联合ISE和Modelsim仿真的FIR滤波器设计 摘要:本文首先利用MATLAB产生两个频率不一样的正弦信号,并将这两个正弦信号相加,得到一个混叠的波形;然后利用MATLAB设计一个FIR低通滤波器,并由Verilog实现,联合ISE和Modelsim仿真,实现滤除频率较高的信号,并将滤波后的数据送到MATLAB中分析。本文首先介绍FIR滤波器的基本原理,然后从目前最流行的的设计方式入手,逐步介绍FIR滤波器的设计,其流程图如图1所示:图1一、FIR滤波器的基本原理:数字滤波器是从分

2、析信号中提取用户需要的信息,滤去不需要的信号成分或者干扰成分。数字滤波器的数学模型:线性时不变数字滤波器的数学模型在时域中可以用线性常系数差分方程给出:|其等效的Z变换为: 当 全为0时,Z域系统函数只有零点,数字滤波器的单位脉冲响应有限,通常这用滤波器被称为有限冲激响应(FIR)滤波器。它的输出只与当前的输入和过去的输入有关,跟过去的输出无关。FIR滤波器的一个重要特性是具有线性相位,即系统的相异和频率成正比,可达到无失真传输。 更加详细的介绍FIR滤波器的理论算法知识,请参考别的先关书籍资料、二、FIR滤波器的设计及验证:1)由MATLAB产生FIR滤波器的输入数据,并存放到.txt文件中

3、用MATLAB产生两个频率分别为:和2MHz的正弦信号,并将这两个正弦信号叠加,得到一个混叠的信号,并将这个混叠信号的波形数据存放到C盘根目录下面的文件中。MATLAB实现代码如下:clear all;fs = ; % 25M 采样率t = 0:1/fs:; % 共 * = 5000个点f1 = 500000;f2 = 2000000;signal1 = sin(2*pi*f1*t); % 频率为 的正弦信号signal2 = sin(2*pi*f2*t); % 频率为 的正弦信% 由于正、余弦波形的值在0,1之间,需要量化成16bit,先将数值放大)y2 = fix(16384 + (214

4、 - 1) * signal1); % 量化到 15bity3 = fix(16384 + (214 - 1) * signal2); % 量化到 15bity1 = y2 + y3; % 量化到 16bit% 再将放大的浮点值量化,并写道到存放在C盘的文本中fid = fopen(c:/, wt);fprintf(fid, %xn, y1); % 以16进制的格式将数据存放到.txt文件中。如果不用16进制,后面% 读数会出错。fclose(fid);plot(y2, b);hold on;plot(y3, b);hold on;plot(y1, r);legend(正弦,2MHz正弦,两者

5、叠加);title(MATLAB产生的两个正弦信号的叠加波形); 信号波形图如图2所示::图2 存放数据的文件路径、名称已经文本的内容如图3所示:图3用MATLAB回读C盘根目录下的文件,验证存入的波形数据是否正确,MATLAB代码如下:fid = fopen(c:/,r);for i = 1 : 5001;%一共有5001个数据)num(i) = fscanf(fid, %x, 1);%从fid所指的文件中,以16进制的方式读出一个数据endfclose(fid);figure(2);plot(num,b);legend(MATLAB从txt文件中读出的原始叠加波形数据);title(直接回

6、读MATLAB产生的两个正弦信号的叠加波形); 显示的波形如图4所示:)图4对比图4和图2中的叠加波形,可知以上操作的正确性。2)用MATLAB设计FIR滤波器输入信号是频率别为和2MHz的正弦信号的叠加,我们的任务是设计一个低通滤波器滤除掉2MHz的干扰信号。因此,我们可以设计一个采样率为25MHz的低通滤波器,其通带带宽为1MHz,阻带宽度为2MHz。通带内纹波抖动为1dB,阻带下降为80dB。在MATLAB的命令窗口输入:fdatool命令并回车,打开FDATool工具箱,用MATLAB的FDATool工具设计该滤波器,参数设置如图5所示:设计好参数后,点击DesignFilter,可以

7、在FDATool窗口的左上角看到滤波器的阶数为63阶,点击File Generate M-file,并将滤波器命名为mylowfilter。图5 编写如下代码,滤除混叠信号中的高频信号。Hd = mylowfilter; % 滤波器名称output = filter(Hd, y1); % 对叠加信号 y ,进行滤波处理figure(3);plot(y2, k);hold on;plot(output, r);legend(原始信号,滤波后取出的信号);title(信号通过MTALAB的低通滤波器后的波形); 滤波后的波形如图6所示:图6生成.coe文件,用于Xilinx的IPCore设计滤波器

8、,FDATool窗口点击File Export,保持默认设置,点击Export即可,次数在MATLAB的workspace窗口多出一个Num的1*64的数组,这就是滤波器的系数,如图7所示:图7¥由于MATLAB生成的滤波器系数全是一些小数,而FPGA只能处理整数,因此我们必须将这些小数扩大一定的倍数,使它们变成整数。在MATLAB的命令窗口输入下面的一段代码然后按Enter,即可将上面这些系数变为整数,注意这里的*32767,表示将系数扩大32767倍,这里的扩大倍数只能选2N,目的是为了后面滤波后的波形数据的高位截取(丢掉低位,即除以2N)。返回ans=0,表示操作正确。coeff=rou

9、nd(Num/max(abs(Num)*32767);% abs() 求绝对值,max() 求最大值,round() 四舍五入fid = fopen(e:/,wt); %将滤波器系数写入文件件中fprintf(fid,%n,coeff);% 将滤波器系数以16位浮点数的格式保存fclose(fid) 程序运行的结果如图8所示:图8将文件的格式改为.coe格式,在文件的开口加上:radix = 10;coefdata = 在每个数字前的空格处加一个逗号“,”,并在最后一个数字后面加上分号“;”如图9所示:图9? 这样就产生了可供FIR滤波器的IPCore可调用的.coe文件。3)用Verilog

10、编程读取MATLAB产生的波形数据通过Verilog的$readmemh()函数即可读出.txt文件中的数据(这里的数据是以16进制形式存储的),具体用法如下:a)reg 15 :0 data_in0:2000; oe文件导入滤波器的系数。b)输入信号的采样频率为25MHz,这里必须和MATLAB产生的波形数据的采样频率保持一致。c)FIR滤波器的运行时钟,这里我们选择250MHz,这里必须和仿真文件里给的时钟保持一致。d)输入数据的类型,我们这里选择了无符号数,输入数据位宽为16bit,因为modelsim不能读出负数(要么用补码,要么加偏移)。如图11、图12所示:。图11图12FIR的I

11、PCore的列化如下:FIR16_IP FIR16_IP_ins ( .clk(clk), fd(rfd), dy(rdy), in(data_in_reg), out(dout); xt文件当中,然后用MATLAB去读取这个波形文件数据,看看读出的波形是否和原来的混叠波形一样。具体的Verilog和MATLAB代码如下:integer wr_file;initial wr_file = $fopen(c:/);:always ( m ) begin if(reset = 1b1) begin4) $fdisplay(wr_file,%h, data_in_reg);xt文件中有上面的步骤我们

12、已经验证了输入到FIR滤波器的数据都是正确的,下面就将FIR滤波器的输出数据保存到一个.txt文件当中供MATLAB读取。lk(clk), fd(rfd), dy(rdy), in(data_in_reg), out(dout); xt文件中 *clear all;fs = ; % 25M 采样率t = 0:1/fs:;% 共 * = 5000个点$f1 = 500000;f2 = 2000000;signal1 = sin(2*pi*f1*t); % 频率为 的正弦信号signal2 = sin(2*pi*f2*t); % 频率为 的正弦信号%y1 = signal1 + signal2;

13、% 两个正弦信号叠加%x = linspace(0, , 2048); % 在区间0, = 2*pi 之间等间隔的取1024个点%y1 = sin(x); % 计算相应的余弦值% 由于正、余弦波形的值在0,1之间,需要量化成16bit,先将数值放大?%y1 = y1 * 32768; % 32 * 1024 = 32768%y1 = y1 * 16384; % 32 * 1024 = 32768%y1 = y1 + 32768;y2 = fix(16384 + (214 - 1) * signal1);y3 = fix(16384 + (214 - 1) * signal2);y1 = y2

14、+ y3;% 再将放大的浮点值量化,并写道到存放在C盘的文本中fid = fopen(c:/, wt);%fprintf(fid, %n, y1); % 在写文件时量化为16bit的定点实数【%,表示16bit定点数,f表示实数】,范围是: -32768 - 32767fprintf(fid, %xn, y1); % 在写文件时量化为16bit的定点实数【%,表示16bit定点数,f表示实数】,范围是: -32768 - 32767fclose(fid);figure(1);plot(y2, b);hold on;plot(y3, b);hold on;plot(y1, r);legend(正

15、弦,2MHz正弦,两者叠加);title(MATLAB产生的两个正弦信号的叠加波形);%* MATLAB回读保存到.txt文件中的信号 *fid = fopen(c:/,r);for i = 1 : 5001;%num(i) = fscanf(fid, %f, 1);%从fid所指的文件中,以实数的方式读出一个数据num(i) = fscanf(fid, %x, 1);%从fid所指的文件中,以实数的方式读出一个数据(endfclose(fid);figure(2);plot(num,b);legend(MATLAB从txt文件中读出的原始叠加波形数据);title(直接回读MATLAB产生的

16、两个正弦信号的叠加波形);%* MATLAB设计FIR滤波器并对比滤波器前后的波形 *Hd = mylowfilter; % 滤波器名称output = filter(Hd, y1); % 对叠加信号 y ,进行滤波处理figure(3);plot(y2, k);hold on;plot(output, r);legend(原始信号,滤波后取出的信号);title(信号通过MTALAB的低通滤波器后的波形);%*MATLAB回读FIR滤波器的输入数据*-fid = fopen(c:/,r);for j = 1 : 2000;num1(j) = fscanf(fid, %x, 1);%这句话的意

17、思是从fid所指的文件以16进制方式读出一个数据。endfclose(fid);figure(4);plot(num1,r);legend(Verilog读出的txt文件中的数据);title(FIR滤波器的输入数据);%*MATLAB回读FIR滤波器滤波后的数据(FIR由Verilog实现)*fid = fopen(c:/,r);for i = 1 : 2000;num(i) = fscanf(fid, %x, 1);%这句话的意思是从fid所指的文件以16进制方式读出一个数据。endfclose(fid);figure(5);plot(num,r);y4 = y2;hold on;plot(y4, k);legend(经过FIR_IPCore滤波后的数据,的原始数据放大16384倍);title(经过FIR滤波器的输出数据);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1