精华内容
下载资源
问答
  • FIR滤波器实验报告

    2013-07-11 15:44:57
    完整的fir滤波器实验报告,有MATLAB程序,能够运行
  • 过程详细,有截图有总结。数字信号处理的fir 数字滤波器实验报告
  • ENTITY FIR is port( clk, res,clr,set:in std_logic; clk_regbt,clk_reg:buffer std_logic; Din:in std_logic_Vector(7 downto 0); Dout:out std_logic_vector(18 downto 0)); END FIR;
  • 基于Matlab的FIP滤波器的设计实验报告
  • DSP FIR滤波器

    2009-06-12 01:08:11
    DSP实现FIR滤波器实验报告,包括程序源码,Matlab仿真
  • dsp实验报告 包含源代码 fir滤波器的实现 汇编语言
  • 基于CCS2000软件设计FIR滤波器,包含设计过程,实验报告,实验代码
  • 详细的实验报告,源代码经ISE10。1调试成功,附有仿真图
  • Fir滤波器设计和软件实现 加实验报告,比较简单的一种,低通
  • FIR实验报告

    2013-11-27 12:26:21
    FIR实验报告,哈工大FIR数字滤波器实验报告和FFT实验报告
  • FIR滤波器设计报告,刚做完实验希望对大家有用哈
  • 本文档是关于DSP技术课程经典实验分析_FIR滤波器的实现
  • 项目名称:冷杉(fir) 开发与验证环境 Ubuntu 20.04 其他环境下能否正常运行,未测试过。 介绍 本项目是LuaLaTeX辅助工具集,目前包含封面生成工具。 使用方法 克隆本项目文件后,建议在LaTeX默认宏包、类搜索...
  • 内容简介:本科毕业设计 基于matlab的FIR滤波器的研究与分析MATLAB|滤波器|FIR滤波器|仿真文件格式:word+PPT一套完整的毕业设计,包括任务书、开题报告、论文正文、毕业答辩PPT、外文翻译。有预览文件请查看。论文...

    内容简介:

    本科毕业设计 基于matlab的FIR滤波器的研究与分析

    MATLAB|滤波器|FIR滤波器|仿真

    文件格式:word+PPT

    一套完整的毕业设计,包括任务书、开题报告、论文正文、毕业答辩PPT、外文翻译。

    有预览文件请查看。

    论文正文共28页。共15138个字符数(不计空格)。整套压缩包大小:1.24MB。

    外文翻译 CHEBYSHEV DESIGN OF FIRFILTERS WITH FREQUENCYINEQUALITY CONSTRAINTS(带不等式约束的线性相位FIR数字滤波器的切比雪夫设计)。

    摘要

    本文介绍了matlab(矩阵实验室)软件的起源、发展、主要特点和强大用途,在科学研究中的重要用处尤其是在数字信号处理中的应用。介绍了何为数字滤波器,在进行数字信号处理时不可或缺的数字滤波器的优点、主要应用及国内外发展现状。主要研究FIR数字滤波器,讨论了FIR数字滤波器的基本算法,FIR数字滤波器的主要设计方法:频率采样法,最优化法,窗函数法,比较三种方法的特点,着重研究了窗函数的设计方法。在同样的设计指标下选择适合的窗函数得出最佳设计方案,设计了高通,低通,带通,带阻四种数字滤波器,编写程序,并在matlab软件上对各种滤波器进行仿真,截取仿真波形进行验证。

    关键词:MATLAB,滤波器,FIR滤波器

    Research and analysis of the FIR filter based on MATLAB

    Abstract: This paper introduces the MATLAB ( Matrix Laboratory ) software including its origin, development, main characteristics and strong purpose in the scientific research important usage especially in the digital signal processing application. Describes what is digital filter,which is indispensable when the digital filter has the advantages in digital signal processing. It also refers to main application and development status at homeland and overseas. Researching FIR digital filter and discussing the FIR digital filter of the basic algorithm, FIR digital filter design methods: frequency sampling method, optimization method, window function method. Make a comparison of three methods of characteristics and through a high light on the window function design method. Select a suitable window function to draw the best design scheme In the same design index, including high-pass, low-pass, band-pass, band stop of four digital filters, program and the MATLAB software on a variety of filter simulation to intercept simulation waveform verification.

    Keyword: MATLAB,Filtering,FIRfilter

    目录

    摘要I

    AbstractII

    第一章 前言1

    1.1 MATLAB简介1

    1.1.1 MATLAB的起源与发展1

    1.1.2 MATLAB的特点1

    1.1.3 MATLAB的主要应用1

    第二章 数字滤波器的简介2

    2.1 数字滤波器种类以及基本概念2

    2.2 数字滤波的应用及优点2

    2.3 数字滤波器的国内外发展现状3

    第三章 数字滤波器的设计4

    3.1 FIR数字滤波器的概念4

    3.2 FIR滤波器实现的基本结构4

    3.2.1 系统函数和差分方程4

    3.2.2 基本的结构形式4

    3.3 FIR数字滤波器的设计5

    3.3.1 窗函数法5

    3.3.2 频率采样法5

    3.3.3 最优化法6

    3.4 FIR数字滤波器的窗函数设计法6

    3.4.1 用窗函数法设计FIR滤波器的基本步骤6

    3.4.2 使用窗函数法设计时要满足的条件6

    3.4.3 工程中常用的窗函数在MATLAB中的格式及作用7

    第四章 MATLAB环境下窗函数的设计实例9

    4.1 高通滤波器的设计9

    4.2 低通滤波器的设计11

    4.3 带通滤波器的设计13

    4.4 带阻滤波器的设计15

    第五章 总结18

    5.1 FIR数字滤波器的性能总结18

    5.2 FIR数字滤波器的设计心得和体会18

    参考文献19

    谢 辞20

    附录 一21

    附录 二22

    相关说明:

    1、下载本站部分资料,需要注册成为本站会员。如果你尚未注册或登录,请首先注册或登录。

    2、48小时内下载同一文件,不重复扣金币。

    3、下载后请用WinRAR或WinZIP解压缩后使用。

    4、如采用迅雷等下载工具下载失败,请直接用浏览器下载。

    5、如仍有其他下载问题,请看常见问题解答。

    下载地址:

    展开全文
  • 代码经过调试有效,实验报告详细清晰易懂,格式正确。 ① 滤波器的阶数≥5,截止频率自行选定,滤波系数用MATLAB确定。 ② 编制C54XDSP实现FIR滤波器的汇编源程序。 ③ 用软件仿真器完成上述程序的模拟调试。 ④ 以...
  • 通过实例介绍了基于Matlab的FIR滤波器的优化设计方法。3种结果比较发现,在同样阶数下,优化设计可以获得最佳的频率特性和衰耗特性。数字滤波在数字信号处理中,占有重要的地位。数字滤波包括FIR和IIR两种滤波方式,...
  • IIR滤波器和FIR滤波器的区别与联系

    万次阅读 多人点赞 2016-06-13 18:48:07
    IIR滤波器和FIR滤波器的区别与联系_jinjun_新浪博客 http://blog.sina.com.cn/s/blog_6281182601019rst.html ...对于FIR滤波器,冲激响应在有限时间内衰减为零,其输出仅取决于当前和过去的输入信号值。对于IIR

    IIR滤波器和FIR滤波器的区别与联系_jinjun_新浪博客  http://blog.sina.com.cn/s/blog_6281182601019rst.html

    1.两种滤波器都是数字滤波器。根据冲激响应的不同,将数字滤波器分为有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器。对于FIR滤波器,冲激响应在有限时间内衰减为零,其输出仅取决于当前和过去的输入信号值。对于IIR滤波器,冲激响应理论上应会无限持续,其输出不仅取决于当前和过去的输入信号值,也取决于过去的信号输出值。

    --------------------------------------------------------------------------------------------------

    2.FIR:有限脉冲响应滤波器。有限说明其脉冲响应是有限的。与IIR相比,它具有线性相位、容易设计的优点。这也就说明,IIR滤波器具有相位不线性,不容易设计的缺点。而另一方面,IIR却拥有FIR所不具有的缺点,那就是设计同样参数的滤波器,FIR比IIR需要更多的参数。这也就说明,要增加DSP的计算量。DSP需要更多的计算时间,对DSP的实时性有影响。

    以下都是低通滤波器的设计。

    FIR的设计:

    FIR滤波器的设计比较简单,就是要设计一个数字滤波器去逼近一个理想的低通滤波器。通常这个理想的低通滤波器在频域上是一个矩形窗。根据傅里叶变换我们可以知道,此函数在时域上是一个采样函数。通常此函数的表达式为:
    sa(n)=sin(n∩)/n∏,但是这个采样序列是无限的,计算机是无法对它进行计算的。故我们需要对此采样函数进行截断处理。也就是加一个窗函数。就是传说中的加窗。也就是把这个时域采样序列去乘一个窗函数,就把这个无限的时域采样序列截成了有限个序列值。但是加窗后对此采样序列的频域也产生了影响:此时的频域便不在是一个理想的矩形窗,而是成了一个有过渡带,阻带有波动的低通滤波器。通常根据所加的窗函数的不同,对采样信号加窗后,在频域所得的低通滤波器的阻带衰减也不同。通常我们就是根据此阻带衰减去选择一个合适的窗函数。如矩形窗、汉宁窗、汉明窗、BLACKMAN窗、凯撒窗等。选择一个具体的窗函数之后,根据所设计滤波器的参数来计算所需的阶数、此窗函数的表达式。然后用这个窗函数去和采样序列相乘,就可以得到实际滤波器的脉冲响应。

    IIR的设计(双线性变换法):

    IIR的设计理念是这样的:根据所要设计滤波器的参数去确定一个模拟滤波器的传输函数,然后再根据这个传输函数,通过双线性变换、或脉冲响应不变法来进行数字滤波器的设计。它的设计比较复杂,复杂在于它的模拟滤波器传输函数H(s)的确定。这一点我们可以让软件来实现。然后,我们说一下它的具体实现步骤:首先你要先确定你需要一个什么样的滤波器,巴特沃斯型,切比雪夫型,还是其它什么型的滤波器。当你选定一个型号后,你就可以根据设计参数和这个滤波器的计算公式来确定其阶数、传输函数的表达式。通常这个过程中还存在预扭曲的问题(这只是双线性变换法所需要注意的问题,脉冲响应不变法不存在这种问题)。确定H(S)后,就可以通过双线性变换得到其数字域的差分方程。

    --------------------------------------------------------------------------------------------------

    3.对于IIR和FIR的比较,有些书上有论述。我引用陈怀琛的“数字信号处理教程--MATLAB释义与实现”:
        从性能上来说,IIR滤波器传递函数包括零点和极点两组可调因素,对极点的惟一限制是在单位圆内。因此可用较低的阶数获得高的选择性,所用的存储单元少,计算量小,效率高。但是这个高效率是以相位的非线性为代价的。选择性越好,则相位非线性越严重。FIR滤波器传递函数的极点固定在原点,是不能动的,它只能靠改变零点位置来改变它的性能。所以要达到高的选择性,必须用较高的阶数;对于同样的滤波器设计指标,FIR滤波器所要求的阶数可能比IIR滤波器高5-10倍,结果,成本较高,信号延时也较大;如果按线性相位要求来说,则IIR滤波器就必须加全通网络进行相位校正,同样要大大增加滤波器的阶数和复杂性。而FIR滤波器却可以得到严格的线性相位。
        从结构上看,IIR滤波器必须采用递归结构来配置极点,并保证极点位置在单位圆内。由于有限字长效应,运算过程中将对系数进行舍入处理,引起极点的偏移。这种情况有时会造成稳定性问题,甚至产生寄生振荡。相反,FIR滤波器只要采用非递归结构,不论在理论上还是在实际的有限精度运算中都不存在稳定性问题,因此造成的频率特性误差也较小。此外FIR滤波器可以采用快速傅里叶变换算法,在相同阶数的条件下,运算速度可以快得多。
        另外,也应看到,IIR滤波器虽然设计简单,但主要是用于设计具有分段常数特性的滤波器,如低通、高通、带通及带阻等,往往脱离不了模拟滤波器的格局。而FIR滤波器则要灵活得多,尤其是他易于适应某些特殊应用,如构成数字微分器或希尔波特变换器等,因而有更大的适应性和广阔的应用领域。
        从上面的简单比较可以看到IIR与FIR滤波器各有所长,所以在实际应用时应该从多方面考虑来加以选择。从使用要求上来看,在对相位要求不敏感的场合,如语言通信等,选用IIR较为合适,这样可以充分发挥其经济高效的特点;对于图像信号处理,数据传输等以波形携带信息的系统,则对线性相位要求较高。如果有条件,采用FIR滤波器较好。当然,在实际应用中可能还要考虑更多方面的因素。
    2,不论IIR和FIR,阶数越高,信号延迟越大;同时在IIR滤波器中,阶数越高,系数的精度要求越高,否则很容易造成有限字长的误差使极点移到单位园外。因此在阶数选择上是综合考虑的.

    IIR滤波器(切比雪夫滤波)各滤波器比较(IIR和FIR,数字和模拟)

    第19,20,21章内容,主要讲IIR滤波器和滤波器的比较
    --------------------------------
    IIR滤波不使用卷积运算,而是用递归(recursive)运算,因此执行速度很快,但在性能上不一定比FIR滤波好。IIR的冲击响应由衰减性指数信号构成。
    IIR输入输出的递推关系式为:

    IIR递归系数和其频率响应之间的关系可以通过Z变换来转换,Z变换在此不涉及。
    通过取不同的递归系数(下图中的a和b),就可以实现不同的滤波:


    当然这是最简单的应用,递归系数的取法有一定的讲究和公式,这里略了。
    FIR可以做到是线性相位的,即冲击响应是左右对称的,而IIR通常是非线性相位的。这是因为FIR在设计的时候就确定了其时域波形和频响,而IIR在设计中确定的是递归的系数,并不能决定其波形是什么样子的。


    展开全文
  • FIR滤波器的DSP实现

    2013-07-11 19:10:09
    包括FIR(低通,高通,带通)滤波器的MATLAB程序和在DSP上实现的各种编译文件,和源程序,也有实验报告,报告中有MATLAB仿真的算法和结果截图,适合小学期做的课程设计。
  • 本课程设计仿真平台为MATLAB7.0,开发工具是M语言编程,通过课程设计了解FIR滤波器设计的原理和步骤,掌握用MATLAB语言设计滤波器的方法,了解FLATTOPWIN对FIR滤波器的设计及编程方法。首先利用window

    摘 要 本课程设计主要内容是设计利用窗口设计法选择FLATTOPWIN窗设计一个FIR
    滤波器,对一段含噪语音信号进行滤波去噪处理并根据滤波前后的波形和频谱分析滤波性能。本课程设计仿真平台为MATLAB7.0,开发工具是M语言编程,通过课程设计了解FIR滤波器设计的原理和步骤,掌握用MATLAB语言设计滤波器的方法,了解FLATTOPWIN对FIR滤波器的设计及编程方法。首先利用windows自带的录音机录制一段语音信号,加入一单频噪声,对信号进行频谱分析以确定所加噪声频率,设计滤波器进行滤波去噪处理,比较滤波前后的波形和频谱并进行分析。由分析结果可知,滤波
    后的语音信号与原始信号基本一致,即设计的FIR滤波器能够去除信号中所加单频噪声,达到了设计目的。
    关键词 滤波去噪;FIR滤波器;FLATTOPWIN窗;MATLAB

    引言

      本课程设计主要解决在含噪情况下对语音信号的滤波去噪处理,处理时采用的是利用窗口设计法选择FLATTOPWIN窗设计的FIR滤波器[1]。通过对比滤波前后波形图和滤波前后语音信号的对比 ,可以看出滤波器对有用信号无失真放大具有重大意义。

    课程设计目的

      熟悉Matlab语言环境,掌握Matlab语言的编程规则,利用Flattopwin窗函数设计法来设计符合要求的FIR滤波器来实现语音信号的滤波去噪。并绘制滤波前后的时域波形和频谱图。根据图形分析判断滤波器设计的正确性。通过本次课程设计熟悉利用
    flattopwin窗函数法设计FIR滤波器的过程[2]。增强自己独立解决问题的能力,提高自己的动手能力。加深对理论知识联系实际问题的理解。为以后的工作奠定坚实的基础。

    课程设计要求

      录制一段语音,绘制波形并观察其频谱特点,加入一个带外单频噪声,设计一个满足指标的滤波器,对该含噪语音信号进行滤波去噪处理,比较滤波前后的波形和频谱并进行分析,根据结果和学过的理论得出合理的结论[3]。

    课程设计平台

      MATLB是美国MathWorks公司出品的商业教学软件,用于算法开发。数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
    MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。
    MATLAB是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因[4]。
    MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程
    计算中的最新研究成果,而且经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。

    基本理论

    FIR滤波器

      FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
    工作原理:在进入FIR滤波器前,首先要将信号通过A/D器件进行模数转换,把模拟信号转化为数字信号;为了使信号处理能够不发生失真,信号的采样速度必须满足奈奎斯特定理,一般取信号频率上限的4-5倍做为采样频率;一般可用速度较高的逐次逼进式A/D转换器,不论采用乘累加方法还是分布式算法设计FIR滤波器,滤波器输出的数据都是一串序列,要使它能直观地反应出来,还需经过数模转换,因此由FPGA构成的FIR滤波器的输出须外接D/A模块。FPGA有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用DSP芯片来说,其并行性和可扩展性更好,利用FPGA乘累加的快速算法,可以设计出高速的FIR数字滤波器[5]。工作原理图如图1
          <img src=“https://img-blog.csdn.net/20170515134905380?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2lsZW50X0Y=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"width=“60%” alt=”"/>
              图一,FIR滤波器工作原理图

    窗口设计法

      窗口设计法是一种通过截断和计权的方法使无限长非因果序列成为有限长脉冲响应序列的设计方法。通常在设计滤波器之前,应该先根据具体的工程应用确定滤波器的技术指标。在大多数实际应用中,数字滤波器常常被用来实现选频操作,所以指标的形式一般为在频域中以分贝值给出的相对幅度响应和相位响应。
      窗口设计法步骤如下:
      **(1)根据过渡带宽及阻带衰减要求,选择窗函数的类型并估计窗口长度N。窗函数的类型可根据最小阻带衰减AS独立选择[6]。
      
    (2)根据待求滤波器的理想频率响应求出理想单位脉冲响应hd(n)。
      
    (3)由性能指标确定窗函数W(n)和长度N。
      
    (4)**求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。
            这里写图片描述            (2.1)

    常见的窗函数性能表如下表2.1所示:
                 表2.1 常见窗函数性能表
          <img src=“https://img-blog.csdn.net/20170515155940077?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2lsZW50X0Y=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"width=“60%” alt=”"/>

    FLATTOPWIN窗

      w=Flattopwin (L) 返回L-点Flattopwin窗口中列向量。Flattopwin窗的滤波器的过渡带宽为19.6π/M,最小阻带衰减108db。
          这里写图片描述
    时间波形和幅度谱如下图2.2、图2.3:
          这里写图片描述    图2.2 时间波形
          这里写图片描述    图2.3 幅度谱

    设计步骤

    设计流程图

      根据设计的要求,首先自己录制一段语音信号,修改语音文件格式,对语音信号加入噪声干扰,再利用Flattopwin窗设计合理的FIR滤波器。最后用滤波器对干扰后的语音信号进行滤波去噪。具体设计流程图如下图3.1所示:
    ;![这里写图片描述]<img src=“https://img-blog.csdn.net/20170515160449133?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2lsZW50X0Y=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"width=“60%” alt=”"/>
    图3.1设计流程图

    录制语音信号

      从电脑上录制一段语音信号,并命名为“cf.wav”,修改语音文件的格式,并放在E盘目录下。在MATLAB软件中调用wavread函数可采集到语音信号。代码如下:

    [x,fs,bits]=wavread('e:\cf.wav'); 
    

    %fs是生成该波形文件的采样频率,bits是波形文件没样本的编码位数

    得到原始语音信号时域波形图如图3.2
    这里写图片描述    图3.2 原始语音信号时域波形图

      然后对语音号进行快速傅里叶变换,得到信号的频谱特性,并将原始音乐信号的波形图与加干扰后的波形图进行比较。部分代码如下:

    y=x+0.1*sin(fn*2*pi*t);    %给原始信号加噪声
    X=abs(fft(x));             %对原始信号进行傅里叶变换
    Y=abs(fft(y));             %对加噪声后信号进行傅里叶变换
    

    加噪声前后的时域与频谱图如图3.3
    这里写图片描述
          图3.3 加噪声前后的时域图与频谱图比较

    滤波器设计

      在本次的课程设计中我所采用的是利用Flattopwin窗函数来设计FIR滤波器。其中主要用了freqz_m.m和ideal_lp.m两个自编函数。
      设计的滤波器图如图3.4
    这里写图片描述
            图3.4 滤波器图形

    信号滤波处理

    滤波器设计完成后,在MATLAB平台上用函数fftfilt实现滤波。
    得到的滤波前后语音信号的时域波形图和频谱图对比图如图3.5、3.6
    这里写图片描述
          图3.5 滤波前后语音信号的时域波形图和频谱图
    这里写图片描述
          图3.6 滤波前后语音信号的比较

    结果分析

      在MATLAB中,对原始的语音信号加噪音,利用FLATTOPWIN窗口设计FIR滤波器,通过所设计的滤波器对加噪声后的信号进行处理。再通过sound(x,fs,bits)函数对滤波后的语音信号进行回放,可以听到滤波之后的信号和原始信号一样清晰。具体代码如下:

    sound(x,fs,bits);        %播放原始语音信号
    sound (y_fil,fs,bits);   % 播放滤波后的音乐信号
    

    所得结果证明了用Flattopwin窗设计的FIR滤波器和音乐信号去噪设计是成功的。

    出现的问题及解决方法

    在本次课程设计中我遇到的问题如下:
    1、对Flattopwin窗不是很了解,对用Flattopwin窗函数设计FIR滤波器的设计步骤很生疏。
    2、 语音文件的格式有问题,不知道如何修改。
    3、不知道如何调用函数,对MATLAB的使用不熟悉。
    4、对滤波器一些参数以及通带阻带等概念不是很清楚。
    5、在采用Flattopwin窗函数设计的FIR滤波器时得不到理想的滤波器,因而信号的恢
    复不是特别理想。

    针对以上问题,相应的解决方案如下:
    

    1、自己上网查阅资料,以及查看之前《数字信号处理》教材和向图书馆借阅资料,掌
    握利用Flattopwin窗函数设计FIR滤波器的方法和步骤。
    2、询问同学,找同学帮忙。
    3、利用MATLAB这款软件自带的help功能,以及查看老师所给提供的课设资料和上
    网看阅资料。
    4、请教值班老师以及在网上查阅资料。
    5、通过不断设置参数的值,最终达到最理想的值,设计出理想的滤波器,使信号得到理想恢复。

    结束语

      本次的课程设计,我的题目是《语音信号滤波去噪——使用Flattopwin设计的FIR滤波》。在本次课程设计之前,我对Flattopwin窗函数完全没有了解,因此在看到这个题目时,我是一头雾水。但是通过自己翻阅资料和询问同学,我掌握了用Flattopwin窗函数设计FIR滤波器的方法步骤,了解了窗函数的基本设计流程。经过这三周的课程设计,我学会了很多东西,不仅仅是技术,更多的是自学能力的提高以及处理问题的方法。
      我们通信工程专业是个实践性很强的专业,而我们在校大部分的学习时间都是花在理论学习上面,实践的机会很少。因而我对很多所学的理论知识如何跟实践联系的概念很模糊,这次的课程设计给了我这个机会,加深了我对理论联系实际的理解,增强了自己独立分析问题和解决问题的能力,开阔了自己的思维。
    还有让我看到了自己的不足,自己对本专业的相关知识掌握的还很少,还有很多知识都没掌握,还让我认识到解决问题的方法、途径很多,做事要开阔自己的思维,看待问题要从多个角度看。
      在此我要感谢学校为我们提供这次课程设计的机会,感谢老师对我的悉心指导,也感谢同学对我的帮助。这次的课程设计让我理论联系实际,不仅巩固了我们的理论知识,还提高了我的动手能力,在这次课程设计中我所学到的知识是我的财富,让我终身受益。

    代码

    语音信号滤波去噪设计源程序清单

    % 程序名称:c.m
    % 程序功能:利用FLATTOPWIN设计的FIR滤波对语音信号进行滤波去噪
    % 程序作者: 
    % 最后修改日期:2017年3月8日
    [x,fs,bits]=wavread('e:\cf.wav');  % 输了参数为文件的全路径和文件名,输出的第一个参数是每个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的编码位数。
    sound(x,fs,bits);      % 按指定的采样率和每样本编码位数回放
    N=length(x);       % 计算信号X的长度
    fn=2200;            % 单频噪声频率
    t=0:1/fs:(N-1)/fs;         % 计算时间范围,样本数除以采样频率
    x=x(:,1)';               % 将双声道转为单声道
    y=x+0.1*sin(fn*2*pi*t);     % 加噪声
    sound(y,fs,bits);         % 应该可以明显听出有尖锐的单品啸叫声
    X=abs(fft(x));  Y=abs(fft(y));    % 对原始信号和加噪声信号进行fft变换,取幅度值
    X=X(1:N/2); Y=Y(1:N/2);       % 截取前半部分
    deltaf=fs/N;            % 计算频谱的谱线间隔
    f=0:deltaf:fs/2-deltaf;     % 计算频谱频率范围
    figure(1)
    subplot(2,2,1);plot(t,x);xlabel('时间t');
    ylabel('幅度');title('原始语音信号');
    axis([0,4,-1.5,1.5]);
    
    subplot(2,2,2);plot(f,X);xlabel('频率f');ylabel('幅度谱');
    title('原始语音信号幅度谱');
    axis([-10,6000,0,700]);
    subplot(2,2,3);plot(t,y);xlabel('时间');ylabel('幅度');
    title('加干扰后的语音信号');
    axis([0,4,-1.5,1.5]);
    subplot(2,2,4);plot(f,Y);xlabel('频率 f');ylabel('幅度谱');
    title('加干扰后的语音信号幅度谱');
    axis([-10,6000,0,700]);
     
    fpd=2100;fsd=2150;fsu=2250;fpu=2300;Rp=1;As=30;      % 阻带滤波器设计指标
    fcd=(fpd+fsd)/2;fcu=(fpu+fsu)/2;df=min((fsd-fpd),(fpu-fsu));  % 计算上下边带中心频率和频率间隔
    wcd=fcd/fs*2*pi;wcu=fcu/fs*2*pi;dw=df/fs*2*pi;    %将Hz为单位的模拟频率换算为rad为单位的数字频率 
    wsd=fsd/fs*2*pi;wsu=fsu/fs*2*pi;
    M=ceil(6.2*pi/dw)+1;      %计算flattopwin窗设计滤波器时需要的阶数
    n=0:M-1;         % 定义时间范围
    w_fla=(Flattopwin(M));    % 产生M阶的flattopwin窗
    hd_bs=ideal_lp(wcd,M)+ideal_lp(pi,M)-ideal_lp(wcu,M); 
    % 调用自编函数计算理想阻带滤波器的脉冲响应
    h_bs=w_fla'.*hd_bs;       % 用窗口法计算实际滤波器脉冲响应
    [db,mag,pha,grd,w]=freqz_m(h_bs,1);  % 调用自编函数计算滤波器的频率特征
     
    figure(2)
    subplot(2,2,1);plot(w,db);title('滤波器幅度响应图');
    xlabel('w/pi');ylabel('db');
    axis([0,0.8,-60,10]);
    line([0,2],[-As,-As],'color','y','linestyle','--','LineWidth',2);
    line([0,2],[-Rp,-Rp],'color','g','linestyle','--','LineWidth',2);
    line([wsd,wsd],[-30,10],'color','r','linestyle','--','LineWidth',2);
    line([wsu,wsu],[-30,10],'color','r','linestyle','--','LineWidth',2);
    subplot(2,2,2);plot(w,mag);title('滤波器幅度响应图');
    xlabel('w/pi');ylabel('幅度mag');
    axis([0,1,-0.5,1.5]);
    subplot(2,2,3);plot(w,pha);title('滤波器幅度响应图');
    xlabel('w/pi');ylabel('相位pha');
    axis([0,1,-4,4]);
    subplot(2,2,4);stem(n,h_bs);title('滤波器幅度响应图');
    xlabel('w/pi');ylabel('db');
    axis([0,1500,0,1]);
     
    y_fil=fftfilt(h_bs,y);  %用设计好的滤波器对y进行滤波
    Y_fil=fft(y_fil);Y_fil=Y_fil(1:N/2);  %计算频谱取前一半
    figure(3)
    subplot(3,2,1);plot(t,x);xlabel('时间t');ylabel('幅度');
    
    
    title('原始语音信号');
    subplot(3,2,2);plot(f,X);xlabel('频率f');ylabel('幅度谱');
    title('原始语音信号幅度谱');
    axis([0,4000,0,600]);
    subplot(3,2,3);plot(t,y);xlabel('时间t');ylabel('·幅度');
    title('加干扰后语音信号');
    subplot(3,2,4);plot(f,Y);xlabel('频率f');ylabel('幅度谱');
    title('加干扰后语音信号幅度谱');
    axis([0,4000,0,600]);
    subplot(3,2,5);plot(t,y_fil);xlabel('时间t');ylabel('幅度');
    title('滤波后语音信号');
    subplot(3,2,6);plot(f,Y_fil);xlabel('频率f');ylabel('幅度谱');
    title('滤波后语音信号幅度谱');
    axis([0,4000,0,600]);
    figure(4)
    subplot(2,1,1);plot(f,20*log10(Y));grid on; 
    subplot(2,1,2);plot(f,20*log10(Y_fil));grid on; 
    sound(x,fs,bits);   % 播放原始信号
    sound (y_fil,fs,bits);  %播放滤波后的信号
     
    [C,B,A]=dir2fs(h_bs);
    

    函数FREQZ_M.M定义:

    function [db,mag,pha,grd,w] = freqz_m(b,a);
    % Modified version of freqz subroutine
    % ------------------------------------
    % [db,mag,pha,grd,w] = freqz_m(b,a);
    %  db = Relative magnitude in dB computed over 0 to pi radians
    % mag = absolute magnitude computed over 0 to pi radians 
    % pha = Phase response in radians over 0 to pi radians
    % grd = Group delay over 0 to pi radians
    %   w = 501 frequency samples between 0 to pi radians
    %   b = numerator polynomial of H(z)   (for FIR: b=h)
    %   a = denominator polynomial of H(z) (for FIR: a=[1])
    %
    [H,w] = freqz(b,a,1000,'whole');
        H = (H(1:1:501))'; w = (w(1:1:501))';
      mag = abs(H);
       db = 20*log10((mag+eps)/max(mag));
      pha = angle(H);
    %  pha = unwrap(angle(H));
      grd = grpdelay(b,a,w);
    %  grd = diff(pha);
    %  grd = [grd(1) grd];
    %  grd = [0 grd(1:1:500); grd; grd(2:1:501) 0];
    %  grd = median(grd)*500/pi;
    

    函数IDEAL_LP.M定义:

    function hd = ideal_lp(wc,M);
    % Ideal LowPass filter computation
    % --------------------------------
    % [hd] = ideal_lp(wc,M)
    %  hd = ideal impulse response between 0 to M-1
    %  wc = cutoff frequency in radians
    %   M = length of the ideal filter
    %
    alpha = (M-1)/2;
    n = [0:1:(M-1)];
    m = n - alpha + eps;
    hd = sin(wc*m) ./ (pi*m);
    

    该文为笔者课程设计论文,如有不妥,还请指出

    展开全文
  • 这是我以前的DSP实验报告 鄙人愚钝,程序难免有不当之处,仅供参考 单声道音频信号不能上传,各位可以自己做一个 实验要求、 先采集一单声道音频信号(.wav)并用WAVREAD文件采样读取,并对其进行频谱...
  • 数字信号处理实验报告-(4)-FIR数字滤波器的设计,有代码,几乎每行都有注释,高清原图,完全能看得懂的那种
  • FIR滤波器实现(DSP实习用,内含完整的MATLAB仿真代码、CCS软件仿真代码、以及实习报告
  • FIR滤波器FIR简介FIR实现代码1.0计算性能指标操作链接 FIR简介 一个N阶的FIR滤波器,系数和输入信号卷积可由差分方程的形式表示:  y[i]=∑j=0N−1h[j]⋅x[i−j]\ y[i]=\sum_{j=0}^{N-1} h[j] \cdot x[i-j]&...

    FIR简介

    一个N阶的FIR滤波器,系数和输入信号卷积可由差分方程的形式表示:
      y [ i ] = ∑ j = 0 N − 1 h [ j ] ⋅ x [ i − j ] \ y[i]=\sum_{j=0}^{N-1} h[j] \cdot x[i-j]  y[i]=j=0N1h[j]x[ij]

    为了能够更直观地理解下面的代码,这里以三阶滤波器为例
      i = 0   j = 0 ,   y [ 0 ] =   h [ 0 ] ⋅ x [ 0 ] \ i=0 \ j=0,\ y[0]=\ h[0] \cdot x[0]  i=0 j=0, y[0]= h[0]x[0]
      i = 1   j = 0..1 ,   y [ 1 ] =   h [ 0 ] ⋅ x [ 1 ] +   h [ 1 ] ⋅ x [ 0 ] \ i=1\ j=0..1,\ y[1]=\ h[0] \cdot x[1]+\ h[1] \cdot x[0]  i=1 j=0..1, y[1]= h[0]x[1]+ h[1]x[0]
      i = 2   j = 0..2 ,   y [ 2 ] =   h [ 0 ] ⋅ x [ 2 ] +   h [ 1 ] ⋅ x [ 1 ] +   h [ 2 ] ⋅ x [ 0 ] \ i=2\ j=0..2,\ y[2]=\ h[0] \cdot x[2]+\ h[1] \cdot x[1]+\ h[2] \cdot x[0]  i=2 j=0..2, y[2]= h[0]x[2]+ h[1]x[1]+ h[2]x[0]
    计算一个输出,需要计算N-1个加法和N个乘法。从上面的例子也可以看出,这是一个因果系统,即输出数据只与当前输入以及之前的输入数据有关。

    FIR实现

    代码1.0

    #define N 11
    #include "ap_int.h"
    typedef int coef_t;
    typedef int data_t;
    typedef int acc_t;
    void fir(data_t *y,data_t x){
    coef_t[N] = {
    53,0,-91,0,313,500,313,0,-91,0,53
    };
    static
    data_t shift_reg[N];
    acc_t acc;
    int i;
    acc = 0;
    Shift_Accum_Loop:
    for(i = N - 1;i >= 0;i--){
    if(i == 0){
    acc += x * C[0];
    shift_reg[0] = x;
    }else {
    shift_reg[i] = shift_reg[i - 1];
    acc += shift_reg[i] * C[i];
    }
    } *
    y = acc;
    }
    

    读代码可知,每次只接收一个数据,接收到的这个数据会存放在 shift_reg[11] 中,因此将其设置为静态数组,每次调用这个函数不会重置数组中的值。作为一个静态数组,其初始化时,所有元素为‘\0’,即NULL
    每次执行这个函数时,从index = 0 的位置插入新的数据,因此要把shift_reg[11]中的所有数据给新的数据腾出地方来,也就是往后移。

    shift_array[10] = shift_array[9]
    shift_array[9] = shift_array[8]
    shift_array[8] = shift_array[7]

    shift_array[2] = shift_array[1]
    shift_array[1] = shift_array[0]
    shift_array[0] = x

    每次运行这个函数,都要完成这样一个过程,这很低效,移位操作更是让码农流汗。因此后续会有一些优化的方法来提高它的性能。

    计算性能

    指标

    评价性能时,必须仔细说明度量,例如,运算速度/秒或者执行Y操作/秒。对于FIR滤波器的运行速度的度量方法可以用滤波操作数/秒,或者乘累加操作MACs/秒。高级语言综合工具以时钟周期为评价单位,HLS可以对时钟频率进行优化,可以用TCL指令为HLS指定目标运行时钟频率。例如

    creat_clock -period 5 //指定代码运行时钟周期为5ns(200MHz)

    在HLS进行估计时,会包含一些使估算出错的余量,这个余量能够保证生成RTL电路时有足够的时序余量,成功完成布局布线。这个余量可以通过TCL指令来直接设置。

    set_clock_uncertainty # //设置余量为#

    注意 这一指令只影响HLS生成RTL,与RTL级时序约束中时钟的不确定性不同。
    对于FIR的例子,如果用MACs/s来度量其性能,那么可以用计算fir的延迟时间,除以操作次数11,就是一次乘累加操作需要的时间。

    操作链接

    较低的时钟频率为工具在单个周期中组合多个相关操作提供了更多的时间余量,这个过程为操作链接
    书中的介绍很清晰:假设乘法操作需要3ns,加法操作需要2ns
    如a)所示,时钟周期为1ns,此时一次乘累加操作需要5ns,对应处理性能为1/5ns=2亿次乘累加/秒
    (a)Clock Period = 1ns
    如b)所示,时钟周期为2ns,此时一次乘累加需要三个时钟周期,为6ns。比5ns多了1ns是因为乘法需要3ns,占用1.5个时钟周期,而要等下一个时钟周期来了才能开始加法,因此用了三个时钟周期,也就是6ns,对应1.67亿次乘累加/秒。这个等待过程没有执行任何操作,也被称为“死时间”
    b)Clock Period = 2ns
    However,也不是增加时钟周期就会导致结果更糟糕,例如设置时钟周期为5ns,如c)所示,可以使用操作链接的方法,将乘法和加法在同一个时钟周期内执行。因此一次乘累加只需要一个时钟周期,也即5ns,和a)一样是2亿次乘累加/秒
    c)Clock Period = 5ns

    代码提升

    对TDL和MAC的优化手段,都是循环展开,以空间换时间,消耗更多资源降低延时。

    优化TDL

    避免for+if

    for循环内部的if/else语句执行效率低(这一结论是通用的),每个循环中都要检查条件是否满足。本例子中,只有i= 0时才执行不同的语句,因此可以在循环结束后再执行i = 0时的语句。即如下代码所示的改变。

    Shift_Accum_Loop:
    for(i = N-1;i > 0;i--){
    shift_reg[i] = shift_reg[i-1];
    acc += shift_reg[i] * c[i];
    } a
    cc += x * c[0];
    shift_reg[0] = x;
    

    循环拆分

    shift_reg数组移位乘累加运算分到两个循环中各自实现其功能,如下代码所示。每个循环单独拆分往往不能提高硬件实现效率,但是可以为每个循环独立进行优化,从而获得比整体for循环更好的结果。

    TDL:
    for(i = N - 1;i > 0;i--){
    shift_reg[i] = shift_reg[i - 1];
    } s
    hift_reg[0] = x;
    acc = 0;
    MAC:
    for(i = N-1;i >= 0;i--)
    {
    acc += shift_reg[i] * c[i];
    }
    

    循环展开

    默认情况下Vivado HLS 将循环综合成顺序执行方式。 该工具创建了一个数据路径,该路径实现了循环体中语句的执行。 数据路径顺序执行每次循环迭代运算。 这就创建了一个有效的区域架构;但是它限制了在循环迭代中可能出现的并行运算。

    而循环展开,顾名思义,就是通过循环次数(因子)复制循环的主体,我们期望的是,每次循环都不依赖上次循环的结果,这样就可以进行循环展开来提高并行性,从而提高系统运行速度。
    用下面改进的代码说明循环展开。之前的代码是每次循环执行一次移位,现在改成每次循环执行两个移位操作,即

    TDL:
    for(i = N - 1;i > 1;i = i - 2){
    shift_reg[i] = shift_reg[i - 1];
    shift_reg[i - 1] = shift_reg[i - 2];
    } i
    f(i == 1){
    shift_reg[1] = shift_reg[0];
    }		
    /*这里的if为了防止N为奇数时,减到i= 1时,如果还用for中的代码,
    那会出现shift_reg[i-2] = shift_reg[-1]的情况 */
    shift_reg[0] = x;
    

    如果要并行执行

    shift_reg[i] = shift_reg[i - 1];
    shift_reg[i - 1] = shift_reg[i - 2];

    这两句代码,需要再一个时间周期内完成两次读和两次写。假设shift_reg数组存放在一个BRAM上,BRAM有两个读端口和一个写端口,这样可以一个周期内执行完两个读操作,但需要在两个周期内执行写操作。
    如果能将所有shift_reg中的值存储在独立的寄存器中,每个周期都可以对每个寄存器进行读写 HLS提供的指令

    #pragma HLS array_parition variable=shift_reg complete

    就可以实现这样的功能。

    手动展开可读性下降,可以由HLS的指令来完成这一操作,

    #pragma HLS unroll factor=2

    优化MAC

    在每次迭代时,从shift_reg[]和c[]执行读取操作,再执行一次乘法和一次加法。因为是累加,所以每一次加法都依赖于上一次加法的结果。可以一次执行多个MAC,手写如下所示,每次自由地并行地运算四个独立的MAC操作。

    acc = 0;
    MAC:
    for(i = N - 1;i >= 3;i -= 4){
    acc += shift_reg[i] * c[i] +
    shift_reg[i - 1] * c[i - 1] +
    shift_reg[i - 2] * c[i - 2] +
    shift_reg[i - 2] * c[i - 2] +
    shift_reg[i - 3] * c[i - 3];
    } 
    for(;i >= 0; i--){
    acc += shift_reg[i] * c[i];
    }
    

    同样可以使用指令

    #pragma HLS unroll factor = 4

    插入到MAC循环体中,HLS会自动以因子4展开循环。如果没有指定factor,则回将for循环完全展开,相当于以最大的迭代次数展开,也就是和factor = 11的效果一样。迭代次数必须是确定的才会进行完整的展开。完整的循环展开,是用空间换时间,如果迭代次数很多,就会消耗大量资源,生成非常庞大的代码,且需要几个小时的综合然后失败。
    如果加入指令 skip_exit_check,就不会对循环的最后部分进行运算检查,这些运算就会被跳过。

    循环流水

    优化MAC

    循环流水,允许多个循环同时执行MAC运算需要四个操作:

    • 读取c[]:从c数组加载指定数据
    • 读取 shift_reg[]:从shift_reg数组加载指定数据
    • ∗:数组c[]和shifit_reg[]相乘
    • +:将这些相乘的结果累积到acc变量中

    第一项和第二项是可以并行完成的,按之前的假设,读操作两个时钟周期,乘运算三个,加运算一个,则有
    未优化MAC
    迭代延迟,是执行一次循环所需的时钟周期数,如上图所示,MAC循环迭代延迟为4个周期;
    for循环延迟,是完成整个循环所需的时钟周期数,包括初始化周期数(例如i=0),条件判断周期数(i>=0)和增量计算周期数(i–)
    假设这三个for循环的控制语句与循环并行,HLS报告此时的MAC延迟为44个时钟周期,计算方法为迭代延迟4*迭代次数11+1个判断周期-1

    书上提出的关于减1的解释:HLS通过数据输出就绪的时钟周期来计算延迟,在这种情况下,最后一个数据在第43个周期准备好,也就等效于在第43周期结束第44个周期开始时写入一个寄存器。
    我没看懂这解释…

    pipeline MAC
    上图是使用流水线后的时序图:第二次迭代在第二个周期开始,第三次迭代在第三个周期开始…,最后一次迭代在第十一个周期开始。则使用流水线后,循环延迟为14。
    循环其实间隔(initial interval,II),为本次迭代与下一次迭代开始相差的时间周期数,本例的II为1.使用指令

    #pragmat HLS pipeline II = 2

    即可设置。
    注意:由于代码中的资源逻辑或者逻辑依赖关系,II的设定值不一定实验,输出报告会报告HLS能实现什么目标。

    优化TDL

    TDL也可以使用pipeline进行优化。

    位宽优化

    C99语言标准规定了long long、long、int、short、char等数据类型的位宽,并定义了int8_t,int16_t,int32_t,int64_t等类型。使用这些不同数据类型的好处是可以解决大量数据存储容量的问题。
    HLS提供了任意精度数据类型,ap_int和ap_uint,使用方法是,先添加ap_int.h头文件,然后是ap_int< width >.
    对于coef_t[N]来说,其中的元素范围是-91~ 500,只需要log2(500) <log2512=9bits,再加个符号位,10位即可,因此coef_t可以声明为ap_int<10>
    同理,acc和shift_reg也可以做同样的操作。

    复数FIR滤波器

    可以基于实数滤波器创建复数滤波器。输入数据(Iin, Qin),系数表示为(Ifir, Qfir),
    (Iin + jQin )(Iin + jQin ) = (Iin Ifir -Qin Qfir ) + j(Qin Ifir + Iin Qfir )
    这样就可以拆分为四个实数滤波器
    在这里插入图片描述

    typedef int data_t;
    void firI1(data_t *y,data_t x);
    void fitQ1(data_t *y,data_t x);
    void firI2(data_t *y,data_t x);
    void fitQ2(data_t *y,data_t x);
    void complexFIR(data_t Iin, data_t Qin,data_t *Iout,data_t *Qout){
    data_t IinIfir,QinQfir,QinIfir,IinQfit;
    firI1(&IinIfir,Iin);
    firQ1(&QinQfir,Qin);
    firI2(&QinIfir,Qin);
    firQ2(&IinQfir,Iin);
    * Iout = IinIfir + QinQfir;
    * Qout = QinIfir - IinQfir;
    }
    

    定义四个实数的FIR滤波器,而实际上FIRI1和FIRI2是等效的,系数相同,FIRQ1和FIRQ2也是等效的。通常是不需要复制函数,只需要将一个函数调用多次即可,但是本例是不可以的,因为shift_reg变量使用了static关键字
    HLS不能跨越函数边界进行优化,每个fir函数都会被独立综合,可以看成一个个黑盒。
    inline指令可以将子函数添加到父函数中,并消除层次结构。虽然可以提高性能和优化资源面积,但是需要综合大量代码。

    float mul(int x,int y){
    return x * y;
    } f
    loat top_function(float a,float b,float c,){
    return mul(a,b) + mul(c,d) + mul(b,c) + mul(a,d);
    } f
    loat inlined_top_function(float a,float b,float c,float d){
    return a * b + c * d + b * c + a * d;
    }
    

    如果在mul函数中添加INLINE指令,那么top_function在调用mul时,就可以得到和inlined_top_function一样的效果。HLS在某些情况会自动调用INLINE指令,比如使用像mul这么小的函数。另外, 一个INLINE函数不会有单独的报告,因为所有逻辑都融合到了母函数中。

    展开全文
  • 在labVIEW软件中不用软件提供的滤波器VI,而是用窗函数设计的一个低通 FIR 滤 波器(凯泽窗),截止频率为405Hz,可修改。根据差分方程,并利用 MATLAB 软件里的 fdatool 工具设计出系数, 然后和输入序列做运算的方法...
  • 本文讨论的FIR滤波器因其具有严格的线性相位特性而得到广泛的应用。在工程实践中,往往要求信号处理具有实时性和灵活性,本论文研究FIR的FPGA解决方案正体现了电子系统的微型化和单片化。 本论文主要讨论了以下的...
  • 数字低/带通巴特沃思滤波器的设计、 用凯塞窗设计线性相位带通FIR滤波器 实验报告 中国地质大学(北京) 数字信号处理 陈玉东
  • 关于DSP的实验报告,报告非常完整,供大家参考。
  • 也是有一段时间不写博客了啊,主要是这学期的实验课太多,每天都是在写预习报告,实验报告中度过,也快到考试月了啊,感觉又要忙起来了,今天就抽点时间来开个头,开什么头呢?对!就如标题所示,滤波器。  这段...
  • 本章借助FIR滤波器。重点介绍了ARRAY_PARTITION、UNROLL以及进行简单代码重构的UNROLL,提及了PIPELINE但没有进行重点讲解,后续会在DFT章节进行详细介绍,还提及了进行C Simulation因为路径问题而要特别注意的地方...
  • 实验六、用窗函数法设计FIR滤波器分析解析》由会员分享,可在线阅读,更多相关《实验六、用窗函数法设计FIR滤波器分析解析(8页珍藏版)》请在人人文库网上搜索。1、实验六用窗函数法设计 FIR滤波器一、实验目的(1) ...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 320
精华内容 128
关键字:

fir滤波器实验报告