- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MATLAB设计,FPGA实现,联合ISE和Modelsim仿真的FIR滤波器设计
摘要:本文首先利用MATLAB产生两个频率不一样的正弦信号,并将这两个正弦信号相加,得到一个混叠的波形;然后利用MATLAB设计一个FIR低通滤波器,并由Verilog实现,联合ISE和Modelsim仿真,实现滤除频率较高的信号,并将滤波后的数据送到MATLAB中分析。
本文首先介绍FIR滤波器的基本原理,然后从目前最流行的的设计方式入手,逐步介绍FIR滤波器的设计,其流程图如图1所示:
图1
FIR滤波器的基本原理:
数字滤波器是从分析信号中提取用户需要的信息,滤去不需要的信号成分或者干扰成分。
数字滤波器的数学模型:线性时不变数字滤波器的数学模型在时域中可以用线性常系数差分方程给出:
其等效的Z变换为:
当 全为0时,Z域系统函数只有零点,数字滤波器的单位脉冲响应有限,通常这用滤波器被称为有限冲激响应(FIR)滤波器。它的输出只与当前的输入和过去的输入有关,跟过去的输出无关。FIR滤波器的一个重要特性是具有线性相位,即系统的相异和频率成正比,可达到无失真传输。
更加详细的介绍FIR滤波器的理论算法知识,请参考别的先关书籍资料、
FIR滤波器的设计及验证:
由MATLAB产生FIR滤波器的输入数据,并存放到.txt文件中
用MATLAB产生两个频率分别为:0.5MHz和2MHz的正弦信号,并将这两个正弦信号叠加,得到一个混叠的信号,并将这个混叠信号的波形数据存放到C盘根目录下面的matlab_wave_data.txt文件中。MATLAB实现代码如下:
clear all;
fs = % 25M 采样率
t = 0:1/fs:0.0002; % 共0.0002 *= 5000个点
f1 = 500000;
f2 = 2000000;
signal1 = sin(2*pi*f1*t); % 频率为 0.5MHz 的正弦信号
signal2 = sin(2*pi*f2*t); % 频率为 2.0MHz 的正弦信
% 由于正、余弦波形的值在[0,1]之间,需要量化成16bit,先将数值放大
y2 = fix(16384 + (2^14 - 1) * signal1); % 量化到 15bit
y3 = fix(16384 + (2^14 - 1) * signal2); % 量化到 15bit
y1 = y2 + y3; % 量化到 16bit
% 再将放大的浮点值量化,并写道到存放在C盘的文本中
fid = fopen(c:/matlab_wave_data.txt, wt);
fprintf(fid, %x\n, y1); % 以16进制的格式将数据存放到.txt文件中。如果不用16进制,后面
% 读数会出错。
fclose(fid);
plot(y2, b);
hold on;
plot(y3, b);
hold on;
plot(y1, r);
legend(0.5MHz正弦,2MHz正弦,两者叠加);
title(MATLAB产生的两个正弦信号的叠加波形);
信号波形图如图2所示:
图2
存放数据的文件路径、名称已经文本的内容如图3所示:
图3
用MATLAB回读C盘根目录下的matlab_wave_data.txt文件,验证存入的波形数据是否正确,MATLAB代码如下:
fid = fopen(c:/matlab_wave_data.txt,r);
for i = 1 : 5001;%一共有5001个数据
num(i) = fscanf(fid, %x, 1);%从fid所指的文件中,以16进制的方式读出一个数据
end
fclose(fid);
figure(2);
plot(num,b);
legend(MATLAB从txt文件中读出的原始叠加波形数据);
title(直接回读MATLAB产生的两个正弦信号的叠加波形);
显示的波形如图4所示:
图4
对比图4和图2中的叠加波形,可知以上操作的正确性。
用MATLAB设计FIR滤波器
输入信号是频率别为0.5MHz和2MHz的正弦信号的叠加,我们的任务是设计一个低通滤波器滤除掉2MHz的干扰信号。因此,我们可以设计一个采样率为25MHz的低通滤波器,其通带带宽为1MHz,阻带宽度为2MHz。通带内纹波抖动为1dB,阻带下降为80dB。
在MATLAB的命令窗口输入:fdatool命令并回车,打开FDATool工具箱,用MATLAB的FDATool工具设计该滤波器,参数设置如图5所示:
设计好参数后,点击DesignFilter,可以在FDATool窗口的左上角看到滤波器的阶数为63阶,点击Fi
文档评论(0)