IIR滤波器的结构比较(Direct I and Direct II Form)

news2024/11/27 4:39:37

在 IIR 滤波器的设计和实现中,直接 I 型和直接 II 型结构的主要区别在于计算顺序存储延迟项的方式。

直接I型结构

特点:
  1. 级联形式:直接I型结构的传递函数可以表示为两个级联部分:一个由分子系数组成的部分和一个由分母系数组成的部分。
  2. 计算顺序:输入信号首先通过分子多项式(零点多项式),然后通过分母多项式(极点多项式)。(本质上是同时计算)
  3. 存储需求:需要存储所有的延迟变量
结构:

H ( z ) = b 0 + b 1 z − 1 + ⋯ + b M z − M 1 + a 1 z − 1 + ⋯ + a N z − N H(z) = \frac{b_0 + b_1 z^{-1} + \cdots + b_M z^{-M}}{1 + a_1 z^{-1} + \cdots + a_N z^{-N}} H(z)=1+a1z1++aNzNb0+b1z1++bMzM
输出 (y[n]) 可以通过以下公式计算:
y [ n ] = b 0 x [ n ] + b 1 x [ n − 1 ] + ⋯ + b M x [ n − M ] − a 1 y [ n − 1 ] − ⋯ − a N y [ n − N ] y[n] = b_0 x[n] + b_1 x[n-1] + \cdots + b_M x[n-M] - a_1 y[n-1] - \cdots - a_N y[n-N] y[n]=b0x[n]+b1x[n1]++bMx[nM]a1y[n1]aNy[nN]
该结构中,直接实现了分子和分母多项式的差分方程。

优点:
  • 实现简单:实现结构直接,容易理解和设计。
  • 设计过程直观:适合初学者和简单滤波器设计。
缺点:
  1. 数值稳定性差:直接I型结构在一些情况下可能会有数值稳定性问题,特别是当滤波器阶数较高时。

    1. 极点与零点的分布
      在直接I型结构中,输入信号首先通过分子多项式,然后通过分母多项式。这种结构方式使得
      滤波器的极点和零点在一个计算过程中紧密地耦合在一起。如果滤波器的极点靠近单位圆,滤
      波器的输出可能会变得不稳定,因为任何数值误差都会被极点放大,导致系统不稳定。

    2. 数值误差的放大
      直接I型结构中的反馈路径容易引入并放大数值误差。特别是在高阶滤波器中,滤波器的系数
      可能有较大的范围差异,这会使得数值误差在计算过程中不断积累和放大,导致数值不稳定。
      这个问题在有限精度(例如浮点运算)的计算机系统中尤为明显。

    3. 系数量化误差
      直接I型结构中,滤波器的分子和分母多项式的系数直接参与计算,任何系数的量化误差都会对
      滤波器的频率响应和稳定性产生影响。高阶滤波器的系数范围较广,量化误差可能会导致显著
      的数值不稳定。

    4. 递归计算的累积误差
      直接I型结构的反馈部分(分母多项式部分)在计算时是递归的,这意味着当前输出不仅依赖于
      当前输入,还依赖于前几次的输出。因此,任何微小的误差都会在后续的计算中累积,导致数
      值不稳定。这种累积效应在高阶滤波器中尤为明显。

    5. 直接II型结构的优势
      相比之下,直接II型结构通过状态变量表示,将滤波器的分子和分母多项式的计算分开处理,
      减少了直接耦合的复杂度。直接II型结构通过共享的延迟单元减少了存储需求,并且在计算
      时,分子和分母的系数误差不会互相放大。这使得直接II型结构在数值稳定性方面通常优于直
      接I型结构。

    6. 总结
      直接I型结构数值稳定性差的原因主要在于极点与零点耦合导致的数值误差放大、递归计算的累
      积误差以及高阶滤波器系数范围较大导致的量化误差。而直接II型结构通过将分子和分母多项
      式计算分离、减少反馈路径上的误差放大,通常具有更好的数值稳定性。

  2. 存储开销大:由于需要存储全部的延迟单元,因为它需要存储输入和输出的延迟项,因此存储开销较大。

    1. 对于一个三阶 IIR 滤波器(N=3),需要存储 3 个输入延迟项:x[n-1], x[n-2], x[n-3] 和 3个输出延迟项
      y[n-1], y[n-2], y[n-3],总共 6 个状态变量

直接II型结构

特点:
  • 级联形式:直接II型结构的传递函数也是由两个级联部分组成,但它们是分离的部分。

  • 计算顺序:输入信号通过分母(极点)多项式,然后通过分子(零点)多项式。

  • 存储需求:存储需求减少,因为它只需要存储中间变量的延迟项。

    对于一个三阶 IIR 滤波器(N=3),需要存储 3 个延迟项 w[n-1], w[n-2], w[n-3],总共 3 个
    状态变量。

结构:

直接 II 型结构将传递函数分解为两个部分:分子部分和分母部分,并使用一个共享的延迟链。这种方式通过将滤波器的实现分成两步来减少存储需求。

  1. 计算中间变量 (w[n]):
    w [ n ] = x [ n ] − a 1 w [ n − 1 ] − a 2 w [ n − 2 ] − a 3 w [ n − 3 ] w[n] = x[n] - a_1 w[n-1] - a_2 w[n-2] - a_3 w[n-3] w[n]=x[n]a1w[n1]a2w[n2]a3w[n3]
  2. 计算最终输出 (y[n]):
    y [ n ] = b 0 w [ n ] + b 1 w [ n − 1 ] + b 2 w [ n − 2 ] + b 3 w [ n − 3 ] y[n] = b_0 w[n] + b_1 w[n-1] + b_2 w[n-2] + b_3 w[n-3] y[n]=b0w[n]+b1w[n1]+b2w[n2]+b3w[n3]

这种结构中,输入信号和输出信号分别通过两个部分进行处理。

优点:
  • 存储需求低:因为可以通过共享的延迟单元来实现,减少了存储需求。
  • 数值稳定性好:通常比直接I型结构更稳定,先计算极点多项式,再零点多项式。
缺点:
  • 实现复杂:实现过程稍微复杂一些,需要理解状态变量的概念。
  • 设计较为复杂:适合高级应用和高阶滤波器设计。
import numpy as np
import matplotlib.pyplot as plt

# 定义滤波器系数
b = [0.0675, 0.2025, 0.2025, 0.0675]
a = [1.0, -1.1430, 0.4128, -0.0951]

# 输入信号:单位脉冲信号
n = 100  # 信号长度
x = np.zeros(n)
x[0] = 1  # 单位脉冲

# 直接I型结构
y_direct1 = np.zeros(n)
for i in range(3, n):
    y_direct1[i] = (b[0]*x[i] + b[1]*x[i-1] + b[2]*x[i-2] + b[3]*x[i-3] -
                    a[1]*y_direct1[i-1] - a[2]*y_direct1[i-2] - a[3]*y_direct1[i-3])

# 直接II型结构
w = np.zeros(n)
y_direct2 = np.zeros(n)
for i in range(3, n):
    w[i] = x[i] - a[1]*w[i-1] - a[2]*w[i-2] - a[3]*w[i-3]
    y_direct2[i] = b[0]*w[i] + b[1]*w[i-1] + b[2]*w[i-2] + b[3]*w[i-3]

# 绘制结果
plt.figure(figsize=(12, 6))
plt.plot(y_direct1, label='Direct I Structure')
plt.plot(y_direct2, label='Direct II Structure')
plt.legend()
plt.title('Comparison of Direct I and Direct II Structures')
plt.xlabel('Sample Index')
plt.ylabel('Amplitude')
plt.grid()
plt.show()

在这个例子中,我们会看到直接I型结构由于其数值误差的累积和放大,输出信号在某些情况下可能会出现不稳定或异常的情况。而直接II型结构通过分离分子和分母的计算,通常会表现出更好的数值稳定性,输出信号更接近预期的结果。
在这里插入图片描述

总结

存储需求

  • 直接 I 型结构需要更多的存储,因为它需要存储输入和输出的延迟项。
  • 直接 II 型结构需要较少的存储,因为它只需要存储中间变量的延迟项。

数值稳定性

  • 直接 II 型结构通常比直接 I 型结构具有更好的数值稳定性,特别是对于高阶滤波器。 这是因为直接 II
    型结构在计算过程中减少了中间变量的累积误差。

实现复杂度

  • 直接 I 型结构实现较为简单,直接根据传递函数进行计算。
  • 直接 II 型结构实现稍微复杂,需要将滤波器分解为两个部分来计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1808594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kaggle -- Titanic - Machine Learning from Disaster

新手kaggle之旅:1 . 泰坦尼克号 使用一个简单的决策树进行模型构建,达到75.8%的准确率(有点低,但是刚开始) 完整代码如下: import pandas as pd import numpy as npdf pd.read_csv("train.csv&quo…

队列和栈的实现

文章目录 队列队列的定义队列常见的基本操作队列的顺序存储结构实现 栈栈的定义栈的常见基本操作栈的顺序存储实现 栈的链式存储实现 队列 队列的定义 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先…

翻译《The Old New Thing》- Why do messages posted by PostThreadMessage disappear?

Why do messages posted by PostThreadMessage disappear? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20090930-00/?p16553 Raymond Chen 2008年09月30日 为什么 PostThreadMessage 发布的信息会消失? 在显示用户界面的线…

【上下界分析 差分数组】798得分最高的最小轮调

本文涉及知识点 差分数组 本题同解 C算法前缀和的应用:798得分最高的最小轮调 LeetCode798得分最高的最小轮调 给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调,这样可以使数组变为 [nums[k], nums[k 1], … nums[nums.lengt…

NetSuite精益实施 之 系统切换作业标准化

这个题目为近日所思,一直没有落笔。今天是端午假日,得空卸货。 标准化是精益实施的三个基础之一,在我们的项目实践中没有须臾忘记。在此我们不再赘述标准化为啥这么重要,更多来分享如何标准化。 在项目实施的各阶段中&#xff0…

【漏洞复现】宏景eHR pos_dept_post SQL注入漏洞

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR pos_dept_post 接囗处存在SQL注入漏洞,未经过身份认证的远程攻击者利用此漏洞执行任意SQL指令,…

每日一题——Python实现PAT乙级1019 数字黑洞(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 点评代码的优缺点: 时间复杂度: 空间复杂度&#…

数据结构:插入排序和希尔排序

插入排序 逆序的情况下: 时间复杂度:O(N^2) 空间复杂度:O(1) 顺序的情况下: 时间复杂度:O(N) 空间复杂度…

【Linux系统化学习】传输层——TCP协议

目录 预备知识 全双工协议 协议缓冲区 TCP协议 TCP协议格式 六个标志位 两个问题 确认应答机制 流量控制 超时重传机制 连接管理机制 CLOSE_WAIT状态 TIME_WAIT状态 滑动窗口 拥塞控制 延迟应答 捎带应答 粘包问题 TCP的异常情况 TCP小结 TCP/UDP协议对比…

首届IEEE RAS峰会,为什么大厂阿里、字节、腾讯都参加了?

"RAS in Data Centers 2024" 首届IEEE RAS(Reliability, Availability, and Serviceability,即可靠性、可用性和可维护性)在数据中心峰会在2024年6月11日至12日举行,地点设在美国加利福尼亚州圣克拉拉市的圣克拉拉万豪酒…

LangChain开发【NL2SQL】应用(few-shot优化)

前言 之前发布的博客LangGraph开发Agent智能体应用【NL2SQL】-CSDN博客,留了一个问题,对于相对复杂的sql(leetcode中等难度的sql题),gpt4o就力不从心了。这篇文章来讲一下优化 什么是few-shot 使用这些少量的、调整…

公安视频图像信息数据库及GA/T 1400视图库视频监控系统的使用场景

随着科技的快速发展,大数据、人工智能等新技术不断融入各行各业,为各行各业带来了前所未有的变革。在公安领域,GA/T 1400协议公安视频图像信息数据库的应用为视频监控场景提供了强有力的支持,极大地提升了公安工作的效率和准确性。…

排序-快排算法对数组进行排序

目录 一、问题描述 二、解题思路 1.初始化 2.将右侧小于基准元素移到左边 3.将左侧大于基准元素移到右边 4.重复执行上面的操作 5.对分好的左、右分区再次执行分区操作 6.最终排序结果 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 快排算法实现数组排序&am…

算法金 | A - Z,115 个数据科学 机器学习 江湖黑话(全面)

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 机器学习本质上和数据科学一样都是依赖概率统计,今天整整那些听起来让人头大的机器学习江湖黑话 A - C A/B Testing (A/B …

保姆级讲解 Linux下FTP服务器的搭建、配置与管理

本来目录很长的 因为感觉不太美观 所以小标题都删掉了 本文介绍了 本地用户的FTP服务器搭建实例匿名用户的FTP服务器搭建实例虚拟用户的FTP服务器搭建实例企业常见类型搭建实验 配置与管理FTP服务器 配置与管理FTP服务器一、FTP相关知识二、项目设计与准备三、项目实施四、认识…

存内计算与扩散模型:下一代视觉AIGC能力提升的关键

目录 前言 视觉AIGC的ChatGPT4.0时代 扩散模型的算力“饥渴症” 存内计算解救算力“饥渴症” 结语 前言 ​ 在这个AI技术日新月异的时代,我们正见证着前所未有的创新与变革。尤其是在视觉内容生成领域(AIGC,Artificial Intelligence Generate…

python导入非当前目录(如:父目录)下的内容

在开发python项目时,通常会划分不同的目录,甚至不同层级的目录,这时如果直接导入不在当前目录下的内容时,会报如下的错误:ModuleNotFoundError: No module named miniai其实这里跟操作系统的环境变量很类似的&#xff…

less学习笔记

一、什么是less? Less是CSS预处理语言,可以使用变量、嵌套、运算等,便于维护项目CSS样式代码。 二、less安装 使用npm包管理工具,全局安装less包 npm install -g lessless安装好的同时,lessc也安装好了 通过 lessc -…

【图解IO与Netty系列】Netty核心组件解析

Netty核心组件解析 Bootstrap & ServerBootstrapEventLoop & EventLoopGroupChannelChannelHandler & ChannelPipeline & ChannelHandlerContextChannelHandlerChannelPipelineChannelHandlerContext ChannelFuture Bootstrap & ServerBootstrap Bootstra…

代码随想录算法训练营第36期DAY56

DAY56 套磁很顺利,发现又有书读了! 300最长递增子序列 朴素法,这个好想,但是不对,比如 0 1 0 3 2 3 我的算法会找出0 1 3作为答案,而不是0 1 2 3 可以看出,后面的状态依赖于前面的状态&am…