使用MATLAB生成滤波器有很多学问,这里只是作为初步的探索,和FPGA的更多结合,也正在探索中,相关博文例如:【 FPGA 】FIR滤波器目录,该专题目录正在记录我学习FIR滤波器的过程。


MATLAB生成30阶低通1MHz海明窗函数设计步骤:

(1)在MATLAB命令窗口中输入“fdatool”出现如下对话框:

注意,在MATLAB2018以后的版本中输入:filterDesigner,即可打开上述界面。

(2)设定为低通滤波器。

(3)选择FIR滤波器的设计类型为窗函数。

设置FIR滤波器为30阶滤波器,选择窗函数的类型为海明窗函数,海明窗函数可以得到旁瓣更小的效果,能量更加集中在主瓣中,主瓣的能量约占99.963%,第一旁瓣的峰值比主瓣小40dB,但主瓣宽度与海明窗相同。它定义为:

(4)输入抽样频率和截止频率,分别是16MHz和1MHz。

(5)点击Design Filter 得到结果,如下图:

(6)量化输入输出,点击工作栏左边的量化选项,即“set quantization parameters”选项,选择定点,设置输入字长为8,其他选择默认,如下图示:

设置完成后,点击Targets中Generate HDL,选择生成Verilog 代码,设置路径,MATLAB即可生成设计好的滤波器Verilog HDL 代码以及测试文件:

仿真结果如下图:

如上图所示,当输入为线性,或者输入频率较低时,输出幅度不会被抑制,当输入频率较高,输出幅度会受到大幅度抑制,而当输入为白噪声或者混频信号时,滤波器会过滤掉高频信号。


这里分出来一小部分空间,引用点别人的内容来简单介绍下上述几个参数的意思:

Response Type:选择FIR滤波器的类型:低通、高通、带通和带阻等。在DDC/DUC模块设计中,抽取和内插需要使用Halfband Lowpass类型,而channel filter需要使用Raised-cosine类型。

Design Method:FIR滤波器设计方法有多种,最常用的是窗函数设计法(Window)、等波纹设计法(Equiripple)和最小二乘法(Least-Squares)等。其中窗函数设计法在学校课堂中是重点讲解的,提到FIR滤波器肯定会想到hamming、kaiser窗,但是实际应用中却很少使用,因为如果采用窗函数设计法,达到所期望的频率响应,与其它方法相比往往阶数会更多;而且窗函数设计法一般只参照通频带wp、抑制频带ws和理想增益来设计滤波器,但是实际应用中通频带和抑制带的波纹也是需要考虑的,那在这种情况下,采用等波纹设计法就非常适用了。

Filter Order:设置滤波器的阶数,这个选项直接影响滤波器的性能,阶数越高,性能越好,但是相应在FPGA实现耗用的资源需要增多。在这个设置中提供2个选项:Specify order和Minimum order,Specify order是工程师自己确定滤波器的阶数,Minimum order是让工具自动确定达到期望的频率相应所需要的最小阶数,因此具体选择哪个选项得视实际情况而定了。

density factor:这个参数控制了频率网的密度。提高这个参数的值可以使设计出的滤波器更加接近理想的频率响应,但这样会增加滤波的计算量。因为滤波器设计要求频率网上每个频点都要满足理想滤波器的指标规格,频率网越密,设计出的滤波器公式越复杂。

Frequency Specification:设置频率响应的参数,包括采样频率Fs、通带频率Fpass和阻带频率Fstop。

magnitude specifications:定义幅值衰减,单位是db,分贝。Apass表示通带衰减,Astop表示阻带衰减。Apass/Astop = 20*log10(输出/输入)。

用等波纹最佳逼近法设计的滤波器,其通带和阻带均为等波纹特性,且通带最大衰减和阻带最小衰减可以分别控制,所以其指标均匀分布,没有资源浪费,所以阶数低得多。

http://www.elecfans.com/d/700098.html


当然,如果仅仅直接给出上述仿真结果,略显没有诚意,因为一般教科书上的风格就是这样的,不告诉你怎么仿真成这个样子,(例如这里的模拟波形是如何产生的等),那这里不是教科书,这里是更随意、更接地气的分享知识以及经验的地方,我就给出仿真的过程。

预备1:

首先,你的电脑上必须要有Modelsim这个仿真软件:

我曾经写过modelsim安装以及破解的博文,可以参考!

modelsim-win64-10.4-se 破解(win7实验成功)(其他操作系统也可参考,大同小异)

预备2:通过上述的方法生成Verilog HDL代码以及testbench文件:

正式开始:

打开Modelsim,新建一个工程文件:

添加Verilog HDL文件以及测试文件:

如下图,选中并编译:

之后开始仿真:

选中tb文件,并取消优化选项:

之后,如下图:选中目标并右击添加到wave;

如下图:仿真时间改为1ms

运行:

选中下面的两项:

右击,format,analog(automatic);

右击,radix,decimal;

这两个步骤完成之后,就出现如下图的效果:

从中,最直观的感受就是我们设计的这个滤波器对低频分量给予通过,对高频分量则出现抑制现象,和我们的预期一样,因为我们设计的就是低通滤波器。

更多内容的你可以仔细去阅读tb文件,看看人家输入的信号是什么样的。

好了,这篇博文就到这里了。

路漫漫其修远兮,吾将上下而求索!

参考博文:https://www.cnblogs.com/xiaomeige/p/8846786.html

参考文献:Verilog HDL数字集成电路高级电路设计

【 FPGA 】MATLAB 生成 FIR 滤波器的操作步骤(包括生成Verilog HDL代码以及仿真过程)相关推荐

  1. fir fpga 不同截止频率_用MATLAB设计FIR滤波器的方法

    用MATLAB设计FIR滤波器的方法 摘  要 介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法.FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计 ...

  2. matlab凯塞窗设计,转载:用MATLAB设计FIR滤波器的方法解析

    介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法.FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的 ...

  3. 用matlab设计fir高阶滤波器,用matlab设计fir滤波器的三种方法.doc

    用matlab设计fir滤波器的三种方法.doc 用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法摘要介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法程序设计法.FDATO ...

  4. MATLAB中FIR滤波器的时延溢出问题详解:线性相位对信号造成的时延溢出及其消除方法,以及fir1等函数的使用

    1.问题由来: 前段时间在对用MATLAB处理试验数据时,需要对多路信号进行滤波后做同步,在这个过程中使用MATLAB中自带的 fir1 函数以及Filter Designer工具箱(FDATool) ...

  5. FIR数字滤波器的FPGA实现(一)-FIR滤波器基本原理

    (一)FIR数字滤波器的FPGA实现-FIR滤波器基本原理 文章目录 (一)FIR数字滤波器的FPGA实现-FIR滤波器基本原理 1 FIR滤波器基本原理 1.1 FIR滤波器的结构及设计 1.1.1 ...

  6. fir滤波器等纹波matlab,基于Matlab的FIR滤波器设计与实现

    基于Matlab的FIR滤波器设计与实现 一.摘要 前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见"基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成&quo ...

  7. matlab的FIR滤波器设计

    1.matlab设计fir滤波器的方法 matlab可以使用fir1函数设计低通.高通.低通.带通等具有严格线性相位特性的滤波器. fir1函数的几种语法如下: b=fir1(n,wn);b=fir1 ...

  8. 基于MATLAB的FIR滤波器的设计及应用(图像去噪)

    基于MATLAB的FIR滤波器的设计及应用(图像去噪) 一.实现功能 1.学会MATLAB的使用,掌握MATLAB的程序设计方法: 2.掌握数字信号处理的基本概念.基本理论和基本方法: 3. 在MAT ...

  9. 长时间数据流的信号滤波处理——基于MATLAB的FIR滤波器设计(1)

    背景 对于任意一个场景,获取到的信号都是经过噪声污染过的,一些简单的加性噪声可以通过统计的特性进行滤除,而对于一些乘性的噪声,只能通过滤波进行滤除. 在信号处理中,信号滤波会广泛使用.在做研究分析信号 ...

最新文章

  1. 【 MATLAB 】unmkpp 函数介绍
  2. 注意:宝塔曝未授权访问数据库漏洞,尽快升级版本!
  3. Java集合:数组的使用
  4. 【选摘】为什么说SAP中没有在制品的盘点
  5. Java 设计模式之命令模式
  6. PHP与MySQL开发中页面乱码的产生与解决
  7. 添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)...
  8. C++学习之路 | PTA乙级—— 1091 N-自守数 (15 分)(精简)
  9. 八皇后问题详解(最短代码)
  10. http服务器异步响应,4.异步非阻塞多进程的 Http 服务器
  11. alter table锁表,MySQL出现Waiting for table metadata lock的场景浅析及解决方案
  12. Running pip as root will break packages and permissions. You should install packages reliably by usi
  13. nginx 站点使用try_files配置案例
  14. java速成----一篇博文搞定基础
  15. ccsk matlab,一种CCSK解调预处理方法与流程
  16. 小程序直传阿里云OSS 踩坑
  17. Gitee Pages Pro 初体验 FreeSSL申请过程小记
  18. NMOSPMOSADC/示波器采样率
  19. Google云游戏平台Stadia好不好玩?第一波实测火热出炉!
  20. 随机获取4位26个英文字母和数字组合的值(4位随机码)

热门文章

  1. ClientScriptManager.RegisterStartupScript.
  2. 转:Swing中的线程探究
  3. Web UI设计的关键要素!
  4. python安装gdal包_python安装gdal的两种方法
  5. Springboot,SSM框架比较,区别
  6. 不间断电源ups标准_UPS不间断电源全套基础知识
  7. 计算机文化基础4作业,计算机文化基础试题4
  8. 利用OpenCV进行图像的轮廓检测
  9. 智能车竞赛中视觉AI组别的打把问题
  10. 标杆课程采访补充问题