tag 标签: iir

相关博文
  • 热度 4
    2022-5-18 16:31
    2902 次阅读|
    0 个评论
    使用fdatool Fs 依据采样率,Apass 选择衰减率,如果选为30db,即为衰减1000倍。并不是衰减率越高越好。而是够用就好。 选择完毕后,按Design Filter 即可生成需要的IIR 50hz陷波器。 在界面中也可以查看幅频特性和相频特性。从相频特性中可以看出,小于50HZ的信号会滞后,而大于50hz的信号会超前。 将陷波器参数导出到Workspace,即可看到系数。 Num Num = 0.996701045864890 -1.993292792228301 0.996701045864890 Den Den = 1.000000000000000 -1.993292792228301 0.993402091729780 分别是传递函数的多项式系数,假设输入为x,输出为Y。b对应Num,a对应Den 对应的差分方程为: Y = (b *x +b *x +b *x -a *Y -a *Y )/a ; 注意:在matlab中,向量的索引号是从1开始,而c语言中数组的索引是从0开始的。个人认为从0开始比较科学。 因为系数已经规一化,所以最后的 /a 是可以省略的。 C代码如下: const double iir_b = {1.000000000000000, -1.993292792228301, 0.993402091729780}; double Y ; void iir50hz(int32_t *p,int16_t len){ int16_t i; Y = 0; // 初始值选取有讲究 Y = 0; for(i = 2;i
  • 热度 20
    2013-10-18 09:50
    2894 次阅读|
    0 个评论
    基于 FPGA 的数字滤波设计— IIR 设计 1 4.1 IIR 系数和增益调整系数        本设计中 IIR 采用接联型,直接二型二阶节( SOS , second order section )作为最基本的单元。 利用 FDATOOL 工具,输入设计指标要求的参数,可以设计出 8 阶 IIR 滤波器,需要 4 个 SOS 接联。一个二阶节结构可以用如下的差分方程表示:            4-1 生成的系数如下表格:   b1 b2 b3 a1 a2 a3 G SOS1 1 -1.2292 1 1 -1.41597 0.864442 0.771897 SOS2 1 -0.81988 1 1 -1.39877 0.694324 0.628234 SOS3 1 0.943741 1 1 -1.38503 0.510304 0.625856 SOS4 1 -1.33304 1 1 -1.44019 0.963747 0.015855 表 4.1   4 级 SOS 系数 其中, G 表示每一级的增益调整系数,在每一级 SOS 之前将输入的信号 X 用增益调整系数进行衰减,即                                                                                   4-2 这样做的目的是因为信号经过每一级的 SOS 都有一定的大于 1 的增益,比如,表 4.1 中的系数,经过 MATLA 计算可知第一个 SOS1 的放大增益在 2 倍左右。而四级 SOS 提供的增益会非常大。如果不做增益调整,带来的影响有两个:第一,整个 IIR 滤波提供了额外的增益,而对于滤波器来说我们不希望带来额外的增益;第二,由于某一级 SOS 可能提供非常大增益,那么在本级计算中很有可能出现溢出的现象。增益调整就是将前一级 SOS 放大的信号,缩减回来,降低下一级 SOS 溢出概率。当然这种增益调整并不能完全解决 IIR 滤波器的溢出问题。
  • 热度 15
    2013-10-18 09:50
    1371 次阅读|
    0 个评论
    基于 FPGA 的数字滤波设计— IIR 设计 2 4.2 系数的量化和归一化 4.2.1 系数的量化 表 4.1 中是用小数来表示系数,如果在不做任何变换的前提来直接拿来计算卷积,那么必须采用单精度浮点数乘法来计算。这样势必给 FPGA 带来很大的资源消耗。 对系数的量化目的就是为了将小数乘法运算转化为整数乘法运算。量化的方法很简单,对公式 4-1 两边同时乘以 2 14 ,将系数可能的最大值 2 量化到 2 15 ,加上符号位整个系数长度刚好为 16 位,即系数为 16bits 带符号整型。同时在 a2 、 a3 加上符号,将差分方程调整为全加法计算,即, 4-3 得到的量化系数为: 表 4.2 量化后的 4 级 SOS 系数 将增益调整系数放进下一级 SOS 系数 b1 、 b2 、 b3 中,即 表 4.3 增益调整后的 4 级 SOS 系数 这样做的目的就是为了将低乘法器的使用。计算过程中就可以不再考虑增益调整问题,输入信号 X 经过四级 SOS 运算后,幅度没有增强。 4.2.2 系数的归一化 关于 a1 系数的量化,从差分公式中可以看出,原本 a1 的值是 1 ,即不需要乘法运算。但是系数量化后 a1=2 14 =16384 那么在计算 y(n) 输出时带来了除法,而在 FPGA 中实现 2 的幂次倍的除法时可以直接利用移位操作来实现,即每个 SOS 输出结果向右移位 14bits ,即完成了除法。这个过程就是叫做去归一化。 4.2.3 量化精度对滤波效果的影响 1 、量化位数越小, FIR 对小信号滤波效果变差(频响、带内增益和带外衰减都存在问题); 2 、量化位数越大,虽然对滤波效果有很大的帮助,但是出现溢出的概率越高; 3 、量化中有截断误差。 4.3 IIR 的溢出 4.3.1 溢出的产生原因 从数学角度分析差分方程式 4-3 假设每一级 SOS 输入的系数为 16bits 有符号数,数据为 18bits 有符号数,则乘法运算结果输出位宽为: 1sign bit+15bits+17bits=33bits , 每累加一次数据位宽增加一位。所以 y(n) 最大宽度为: 33bits+4bits=37bits 。 去归一化之后,每一级 SOS 输出位宽为: 37bits-14bits=23bits 那么如果将计算位宽调整到 23bits 是不是就可以保证不会溢出呢? 我们要考虑两个问题,第一个是本级的输出作为下级的输入,如果下级 SOS 的位宽任然为 18bits, 那么从数学角度,溢出的情况是肯定会发生的;第二是,本级当前的输出作为下个数据的历史值(即反馈),注意以上位宽在计算时,我们假设数据都是 18bits ,很显然这是不科学的,因为反馈值 y(n-1) 和 y(n-2) 位宽可能已经超出了 18bits 。 由以上数学角度分析可以得出下面结论: 1 、 IIR 滤波器的溢出是一定存在的; 2 、溢出不仅是在 IIR 接联里某一级 SOS 产生,可能随着级数的增加而加深(或者说不可控)。 我们再从 IIR 系数角度分析溢出问题。 IIR 每个 SOS 都可以由一个二阶模拟滤波器与之相对应,即每个 SOS 都有自己的增益。增益过大那么在本级计算过程中出现溢出的概率越高。所以,我们可以通过调整每级 SOS 之前的增益调整系数来避免溢出的出现,即,在具有大增益的 SOS 之前缩小输入值。但这样做带来的结果就是 AD 精度的丢失。丢失精度带来的结果是,波形存在很多毛刺,且小信号波形失真严重。 在资源有限的情况下,我们必须做此调整来保证不溢出。相对波形失真,我们更不愿意看出溢出。  
  • 热度 14
    2013-10-18 09:50
    1321 次阅读|
    0 个评论
    基于 FPGA 的数字滤波设计— IIR 设计 3 4.3.2 调整每级 SOS 的输入和增益调整系数,将溢出控制在有效范围之内        先看看表 4.1 系数在各级 SOS 处的增益。 图 4.1 可以看出第三级 SOS 增益较大大,此级容易出现溢出现象。分析各级增益对输入输出位宽的影响。 图 4.2 由上所述,将增益调整放在下级 SOS 中计算,所以每一级的 SOS 增益做了调整。 SOS1 和 SOS2 一共提供了大约 4 倍增益,即 16bits 左移 2 位,变成 18bits 数据,在此,由于我们就是采用 18bits 位宽计算,所以在两个 SOS 输出端出现溢出的几率较低。第三级 SOS 提供了 14.2 倍的增益,即左移 4bits, 变成了 22bits 数据,此时,已经完全溢出。第四级由于衰减系数比较小,所以增益缩小了 0.02 倍,即 22bits 右移 6bits ,又回归到了 16bits 。        我们将所有的增益都乘起来得: 整个滤波系统增益为 1 。        下面我们就保证系统增益不变的情况下,调整每级的输入位宽和增益调整系数来减低溢出概率。 1、   我们知道由于噪声的存在, 16 位 AD 采集到的数据低位都是噪声数据,所以在滤波时,可以丢弃低几位,在这里,我们采用 15bits 输入。即 1 ; 2、   SOS3 增益为 16 倍左右,即会使输入 4 ,为了保证输出仍在 18bits 的动态范围之内,必须将 17bits 数据 3 后再输入到 SOS3 中,即 3 ; 3、   SOS4 本来的增益只有 0.02 ,做了衰减,那么 18bits 进肯定不会产生溢出。但是我们考虑到 SOS4 之前我们已经将数据 4 ,做了缩小操作,必须在后级中补回来才能保证整个系统的增益为 1 。我们可以将补偿放在增益调整系数里面,因为前级对信号做了缩小操作所以 SOS4 之前的增益缩减可以稍微弱点,我们将增益调整系数扩大 16 倍,即 4 。而曾个 SOS4 增益变成了 0.32 ,即 1bits 。从数学公式,考虑 18bits 输入到 SOS4 中可能会出现溢出,那么我们将数据 1 。即 17bits 的数据进入 SOS4 ,输出的刚好是 16bits 数据。 4、   从整个系统角度,数据被我们 3 位( AD 缩小 1 位除外),增益调整系数 4 位,所在整个系统增益放大了 1bits 。 IIR 滤波变成了 15bits 进 16bits 出的带有增益的滤波器。 5、   数据每 1 一次,就丢失 1bits 精度,我们一共丢失了 5bits 的精度,带来的结果就是波形失真。 调整某些级的输入和改进增益调整系数的目的就是为了保证 18bits 计算无溢出,带来的不良结果是:小信号输入时波形失真严重;噪声变大;频响变差。        IIR 设计过程中的注意点: 1、   MAC 的结果不但要给下级 SOS ,还要作为本级的反馈保存到 RAM 中,那么在本级反馈回来上,只能去归一化,不能做额外的移位。 2、   4.4 利用 FPGA 实现 IIR 滤波器( 32bits 计算) 4.4.1 32bits 计算精度的选择        由以上分析可知, 18bits 计算 IIR ,在保证不溢出的条件下必须丢失 5bits 的精度。带来的不良后果是在小信号输入滤波时波形失真,频响失真。所以为了保证无溢出且滤波效果良好,必须采用 32bits 带符号计算。下面评估 18bits 和 32bits 计算下的硬件资源需求。 1.          18bits 计算时,每个 AD8221 芯片需要 4 个 SOS 模块,每个 SOS 需要 2 个 9*9 的 DSP 单元,需要 32 ( 24 ) *8*16bits(18)=1M4K 。那么 3 片 AD8221 做 8 阶 IIR 滤波,总共需要 24 个 DSP 和 12 个 M4K 。 2.          相同结构的 32bits 计算 IIR 资源需求, DSP 和 M4K 都扩大 2 倍,分别为 48 和 24 。 我们知道, 2C8 器件 DSP 最大数量为 36 个, M4K 也为 36 个。显而易见相同结构 32bits 计算无法在 2C8 上实现。 DSP 需求已经大于 2C8 所能支持的最大数量。所以在结构上面必须做优化。 4.4.2 实现结构        18bits 计算时,我们为每路 AD8221 分配了一个滤波通道,每路滤波通道里面拥有单独的 MAC 单元。 32bits 计算时所需的乘法器成为了瓶颈。所以我们优化思想是将三路 AD 同时送入到一个滤波通道,分时的进入 MAC 计算。也就是说本来每个 MAC 只需要算 24 个模拟通道值,一共有 3*4 个 MAC 同时计算,优化后只有 1*4 个 MAC ,需要计算 72 个通道值。所需的 DSP 个数为 16 ,存储单元的数量不变, 2C8 器件可以满足要求。        每一级 SOS 中的数据路径如图 4.3 所示, 3 路 AD 值存储到 3 个 RAM 中, MUX 分时将不同的值送到 MAC 单元中进行乘累加运算。 图 4.3 优化后的 SOS 的数据路径
  • 热度 18
    2013-10-18 09:49
    1591 次阅读|
    1 个评论
    基于 FPGA 的数字滤波设计— IIR 设计 4 4.4 利用 FPGA 实现 IIR 滤波器( 32bits 计算) 4.4.3 控制单元(状态机)        对数据路径单元进行控制的部分由状态机完成。状态说明在表格 4.4 中,状态转换图如图 4.4 所示。 表 4.4 各个状态功能说明          在状态转换图中可以看出,此状态机中有两个循环,大的循环中(蓝色线标识)完成一次采样周期里对 3 路 ADC 数据进行 IIR 滤波计算。大循环内部有一个小循环(红线标识),蓝色循环每执行一次红色循环执行 3 次,红色循环一次完成对一路 ADC 的计算。 图 4.4 状态转换图 4.4.4 RAM 中存储调度          图 4.3 所示的数据路径图中的 RAM 对应的地址空间分配如图 4.5 所示。为每个模拟通道分配 8 个存储空间,存储调度如图 4.6 所示。 图 4.5 每个 ADC 对应的 RAM 地址空间 图 4.6 存储调度          指针在每一帧( 24 个通道)开始前加 2 ,完成 X n → X n+1 的保存。 1.          在 SAVE 状态时,保存当前的 X n ; 2.          在 READ 状态时,按顺序读出 X n-2 、 Y n-2 、 X n-1 、 Y n-1 和 Xn ; 3.          在 OUT 状态时,保存 Y n ; 4.          MAC 计算乘累加时,连续读 5 个数据,读地址在指针的基础上加 4 ; 5.          存入 Y n 值时,写入地址在指针基础上加 1 ; 6.          指针每次按照 2 自增。 4.4.5 时间余量计算            系统需求,在每个 AD_data_ok 有效时,采集 3 个通道值,并在下一个 AD_data_ok 有效之前完成 IIR 计算。          AD_clk=2.5MHz ,采样间隔为( 1/2.5M ) *22=8.8us          IIR 计算所需时间为( 1/30M ) *187=6.17us IIR 计算时间小于采样间隔,所以能够完成优化后 32bits 的 IIR 滤波功能。   1、            总结 1 、 64 阶 FIR 并不能完成来时提出的指标要求; 2 、 18bits 位宽 IIR ,容易产生溢出,增益需要调整; 3 、结构优化后的 32bits 位宽 IIR 能够满足指标要求,同时硬件资源可以胜任。
相关资源
  • 所需E币: 1
    时间: 2022-5-1 11:02
    大小: 223.55KB
    上传者: ZHUANG
    机器人力_位传感器IIR数字滤波器的优化设计
  • 所需E币: 0
    时间: 2022-3-4 22:47
    大小: 1.37MB
    上传者: samewell
    IIR滤波器的DSP实现.docx
  • 所需E币: 0
    时间: 2022-3-4 22:44
    大小: 934KB
    上传者: samewell
    IIR滤波器的MATLAB设计及DSP实现.doc
  • 所需E币: 0
    时间: 2022-3-4 21:15
    大小: 92.5KB
    上传者: samewell
    通用DSP实现IIR滤波器.ppt
  • 所需E币: 0
    时间: 2022-3-4 21:09
    大小: 233KB
    上传者: samewell
    基于DSP的IIR滤波器系统设计.doc
  • 所需E币: 0
    时间: 2022-3-4 21:06
    大小: 300.5KB
    上传者: samewell
    CCS实现DSP课设IIR滤波器.doc
  • 所需E币: 0
    时间: 2022-3-4 20:42
    大小: 332KB
    上传者: samewell
    IIR滤波器的DSP及Matlab实现.doc
  • 所需E币: 0
    时间: 2021-4-24 20:11
    大小: 100KB
    上传者: Argent
    随着FPGA技术的不断发展,许多消费类产品都嵌入了FPGA程序,ZYNQ架构属于主流,搜集的部分有关FPGA学习资料,希望对您有所帮助,欢迎下载。
  • 所需E币: 0
    时间: 2021-4-24 20:10
    大小: 707KB
    上传者: Argent
    随着FPGA技术的不断发展,许多消费类产品都嵌入了FPGA程序,ZYNQ架构属于主流,搜集的部分有关FPGA学习资料,希望对您有所帮助,欢迎下载。
  • 所需E币: 1
    时间: 2021-3-16 09:27
    大小: 310.3KB
    上传者: ZHUANG
    高阶IIR滤波器的DSP实现
  • 所需E币: 2
    时间: 2020-12-27 23:17
    大小: 95.4KB
    上传者: stanleylo2001
    IIR数字低通滤波器设计及DSP实现
  • 所需E币: 0
    时间: 2020-12-19 21:53
    大小: 94.86KB
    上传者: samewell
    IIR数字低通滤波器设计及DSP实现
  • 所需E币: 0
    时间: 2020-9-25 23:56
    大小: 126.06KB
    上传者: LGWU1995
    IIR数字低通滤波器设计及DSP实现.pdf
  • 所需E币: 0
    时间: 2020-9-26 21:41
    大小: 883.55KB
    上传者: LGWU1995
    充分利用数字信号处理器上的片内FIR和IIR硬件加速器
  • 所需E币: 1
    时间: 2020-8-21 17:13
    大小: 180.54KB
    上传者: Argent
    本人从事电子行业多年,由电子硬件开发到软件设计,从工业控制到智能物联,收集了不少单片机产品的开发资料,希望通过这个平台,能够帮助到更多志同道合的网友,资料不在于多而在于精,有需要的老铁们可以下载下来参考参考。
  • 所需E币: 3
    时间: 2019-12-25 21:57
    大小: 103.67KB
    上传者: 238112554_qq
    作者在大学期间学数字信号处理课程时写的作业,放上来也许对大家有用,里面有FIRIIR,和傅立叶变换,FFT等功能。……
  • 所需E币: 3
    时间: 2019-12-25 21:43
    大小: 72.9KB
    上传者: givh79_163.com
    在ADSP-2126x上编写的优化过的IIR滤波器程序(用C和汇编编写……
  • 所需E币: 4
    时间: 2019-12-25 15:01
    大小: 354.89KB
    上传者: 238112554_qq
    Recursivefiltersareanefficientwayofachievingalongimpulseresponse,withouthavingtoperformalongconvolution.Theyexecuteveryrapidly,buthavelessperformanceandflexibilitythanotherdigitalfilters.RecursivefiltersarealsocalledInfiniteImpulseResponse(IIR)filters,sincetheirimpulseresponsesarecomposedofdecayingexponentials.Thisdistinguishesthemfromdigitalfilterscarriedoutbyconvolution,calledFiniteImpulseResponse(FIR)filters.Thischapterisanintroductiontohowrecursivefiltersoperate,andhowsimplemembersofthefamilycanbedesigned.Chapters20,26and33presentmoresophisticateddesignmethods.CHAPTERRecursiveFilters19Recursivefiltersareanefficientwayofachievingalongimpulseresponse,withouthavingtoperformalongconvolution.Theyexecuteveryrapidly,buthavelessperformanceandflexibilitythanotherdigitalfilters.RecursivefiltersarealsocalledInfiniteImpulseResponse(IIR)filters,sincetheirimpulseresponsesarecomposedofdecayingexponentials.Thisdistinguishesthemfromdigitalfilterscarriedoutbyconvolution,calledFiniteImpulseResponse(FIR)filters.Thischapterisanintroductiontohowrecursivefiltersoperate,andhowsimplemembersofthefamilycanbedesigned.Chapters20,26and33presentmoresophisticateddesignmethods.TheRecursiveMethodTostar……
  • 所需E币: 3
    时间: 2019-12-25 10:43
    大小: 279.42KB
    上传者: 二不过三
    FFT(1)……
  • 所需E币: 3
    时间: 2019-12-25 10:43
    大小: 379.56KB
    上传者: wsu_w_hotmail.com
    DF结构……