FIR数字滤波器设计——窗函数设计法——滤波器的时域截断
与IIR数字滤波器的设计类似,设计FIR数字滤波器也需要事先给出理想滤波器频率响应 H ideal ( e j ω ) H_{\text{ideal}}(e^{j\omega}) Hideal(ejω),用实际的频率响应 H ( e j ω ) H(e^{j\omega}) H(ejω)去逼近 H ideal ( e j ω ) H_{\text{ideal}}(e^{j\omega}) Hideal(ejω),在此以低通FIR数字滤波器为例介绍窗函数设计法。



线性相位的理想低通FIR数字滤波器频率响应为
H ideal ( e j ω ) = { e − j ω τ , 0 ⩽ ∣ ω ∣ ⩽ ω c 0 , ω c < ∣ ω ∣ ⩽ π H_{\text{ideal}}(e^{j\omega}) = \begin{cases} e^{-j\omega\tau}, & 0 \leqslant |\omega| \leqslant \omega_c \\ 0, & \omega_c < |\omega| \leqslant \pi \end{cases} Hideal(ejω)={e−jωτ,0,0⩽∣ω∣⩽ωcωc<∣ω∣⩽π
其中, ω c \omega_c ωc为截止频率,幅度函数为
H ideal ( ω ) = { 1 , 0 ⩽ ∣ ω ∣ ⩽ ω c 0 , ω c < ∣ ω ∣ ⩽ π H_{\text{ideal}}(\omega) = \begin{cases} 1, & 0 \leqslant |\omega| \leqslant \omega_c \\ 0, & \omega_c < |\omega| \leqslant \pi \end{cases} Hideal(ω)={1,0,0⩽∣ω∣⩽ωcωc<∣ω∣⩽π
对应的滤波器单位脉冲响应 h ideal ( n ) h_{\text{ideal}}(n) hideal(n)为
h ideal ( n ) = IDTFT [ H ideal ( e j ω ) ] = 1 2 π ∫ − ω c ω c e − j ω τ e j ω n d ω = sin [ ω c ( n − τ ) ] π ( n − τ ) h_{\text{ideal}}(n) = \text{IDTFT} \left[ H_{\text{ideal}}(e^{j\omega}) \right] = \frac{1}{2\pi} \int_{-\omega_c}^{\omega_c} e^{-j\omega\tau} e^{j\omega n} d\omega = \frac{\sin[\omega_c(n - \tau)]}{\pi(n - \tau)} hideal(n)=IDTFT[Hideal(ejω)]=2π1∫−ωcωce−jωτejωndω=π(n−τ)sin[ωc(n−τ)]
可以看出, h ideal ( n ) h_{\text{ideal}}(n) hideal(n)为偶对称序列,对称中心为 n = τ n = \tau n=τ。
但 h ideal ( n ) h_{\text{ideal}}(n) hideal(n)也是一个无限长的非因果序列,这在计算机或 DSP 中是无法实现的。简便的办法就是对 h ideal ( n ) h_{\text{ideal}}(n) hideal(n)进行截断,也就是用一个有限时长的窗函数 w ( n ) w(n) w(n)与 h ideal ( n ) h_{\text{ideal}}(n) hideal(n)相乘。设窗函数长度为 N N N,则在时域截断后的滤波器单位脉冲响应 h ( n ) h(n) h(n)为
h ( n ) = h ideal ( n ) ⋅ w ( n ) h(n) = h_{\text{ideal}}(n) \cdot w(n) h(n)=hideal(n)⋅w(n)
其中,窗函数长度和形状是两个非常重要的设计参数。
为保证 h ( n ) h(n) h(n)为因果序列,时域截断时取 n = τ n = \tau n=τ为对称中心,并且设 τ = N − 1 2 \tau = \frac{N-1}{2} τ=2N−1。这种截断方式就好比用一个 N N N点矩形窗 R N ( n ) R_N(n) RN(n)与 h ideal ( n ) h_{\text{ideal}}(n) hideal(n)相乘,即
h ( n ) = h ideal ( n ) ⋅ R N ( n ) = { h ideal ( n ) , 0 ⩽ n ⩽ N − 1 0 , 其他 n h(n) = h_{\text{ideal}}(n) \cdot R_N(n) = \begin{cases} h_{\text{ideal}}(n), & 0 \leqslant n \leqslant N-1 \\ 0, & \text{其他 } n \end{cases} h(n)=hideal(n)⋅RN(n)={hideal(n),0,0⩽n⩽N−1其他 n
由频域卷积定理可知,时域相乘对应频域卷积,故实际滤波器的频率响应为
H ( e j ω ) = DTFT [ h ideal ( n ) ⋅ w ( n ) ] = 1 2 π [ H ideal ( e j ω ) ∗ W N ( e j ω ) ] H(e^{j\omega}) = \text{DTFT} \left[ h_{\text{ideal}}(n) \cdot w(n) \right] = \frac{1}{2\pi} \left[ H_{\text{ideal}}(e^{j\omega}) * W_N(e^{j\omega}) \right] H(ejω)=DTFT[hideal(n)⋅w(n)]=2π1[Hideal(ejω)∗WN(ejω)]
N N N点矩形窗 R N ( n ) R_N(n) RN(n)的 DTFT 结果为
W N ( e j ω ) = DTFT [ R N ( n ) ] = e − j N − 1 2 ω sin ( ω N / 2 ) sin ( ω / 2 ) W_N(e^{j\omega}) = \text{DTFT} \left[ R_N(n) \right] = e^{-j\frac{N-1}{2}\omega} \frac{\sin(\omega N/2)}{\sin(\omega/2)} WN(ejω)=DTFT[RN(n)]=e−j2N−1ωsin(ω/2)sin(ωN/2)
N N N点矩形窗也是严格线性相位的 FIR 数字滤波器,其幅度函数为
W N ( ω ) = sin ( ω N / 2 ) sin ( ω / 2 ) W_N(\omega) = \frac{\sin(\omega N/2)}{\sin(\omega/2)} WN(ω)=sin(ω/2)sin(ωN/2)
由 DTFT 的时移特性可知,相位函数只会对 h ( n ) h(n) h(n)起时移作用,因此 H ( e j ω ) H(e^{j\omega}) H(ejω)的幅度函数只取决于理想低通的幅度函数 H ideal ( ω ) H_{\text{ideal}}(\omega) Hideal(ω)和矩形窗的幅度函数 W N ( ω ) W_N(\omega) WN(ω),即
H ( ω ) = 1 2 π [ H ideal ( ω ) ∗ W N ( ω ) ] H(\omega) = \frac{1}{2\pi} \left[ H_{\text{ideal}}(\omega) * W_N(\omega) \right] H(ω)=2π1[Hideal(ω)∗WN(ω)]
理想低通滤波器的通带幅度为 1,阻带幅度为 0,但实际的低通滤波器在通带和阻带都出现起伏振荡的现象,在其过渡带的边缘出现了正、负肩峰,即极大值和极小值。正肩峰出现在窗函数主瓣刚刚全部进入理想低通滤波器 ( ω = − ω c + 2 π N ) \left(\omega = -\omega_c + \frac{2\pi}{N}\right) (ω=−ωc+N2π),以及窗函数主瓣即将移出理想低通滤波器 ( ω = ω c − 2 π N ) \left(\omega = \omega_c - \frac{2\pi}{N}\right) (ω=ωc−N2π)的时候。负肩峰表示卷积结果的极小值,负肩峰出现在窗函数主瓣即将进入理想低通滤波器 ( ω = − ω c − 2 π N ) \left(\omega = -\omega_c - \frac{2\pi}{N}\right) (ω=−ωc−N2π),以及窗函数主瓣刚刚全部移出理想低通滤波器 ( ω = ω c + 2 π N ) \left(\omega = \omega_c + \frac{2\pi}{N}\right) (ω=ωc+N2π)的时候。

只要确保 h ( n ) h(n) h(n)为偶对称或奇对称的,就可以不再“操心”线性相位的需求,“专心”考虑FIR数字滤波器的幅度指标即可。
实际滤波器幅频响应起伏振荡的幅度取决于窗函数旁瓣的相对幅度,而起伏振荡的次数取决于窗函数旁瓣的数量。增加窗函数的长度(不改变窗函数的形状),过渡带的宽度变窄,振荡起伏变密,但是滤波器肩峰的相对值(相对于1或者0)保持8.95%不变,这种现象称作“吉布斯(Gibbs)效应”。

我们知道信号的时域截断会引起频谱泄漏。窗函数法也是在时域进行截断,出现的“过渡带”“吉布斯效应”等其实都是频谱泄漏在FIR数字滤波器设计中的体现。只不过信号的时域截断引起的频谱泄漏主要是分析信号的频谱,这里的频谱泄露主要是分析系统(滤波器)的频谱。
这里只介绍利用窗函数法设计低通FIR数字滤波器,如果要设计其他类型的FIR数字滤波器,只需要采用对应的理想滤波器频率响应即可,在此不再进一步讨论。
相关文章:
FIR数字滤波器设计——窗函数设计法——滤波器的时域截断
与IIR数字滤波器的设计类似,设计FIR数字滤波器也需要事先给出理想滤波器频率响应 H ideal ( e j ω ) H_{\text{ideal}}(e^{j\omega}) Hideal(ejω),用实际的频率响应 H ( e j ω ) H(e^{j\omega}) H(ejω)去逼近 H ideal ( e j ω ) H_{\text{ideal}}…...
MySQLOCP考试过了,题库很稳,经验分享。
前几天,本人参加了Oracle认证 MySQLOCP工程师认证考试 ,先说下考这个证书的初衷: 1、首先本人是从事数据库运维的,今年开始单位逐步要求DBA持证上岗。 2、本人的工作是涉及数据库维护,对这块的内容比较熟悉ÿ…...
WPF 绘制过顶点的圆滑曲线 (样条,贝塞尔)
在一个WPF项目中要用到样条曲线,必须过顶点,圆滑后还不能太走样,捣鼓一番,发现里面颇有玄机,于是把我多方抄来改造的方法发出来,方便新手: 如上图,看代码吧: ----------…...
Kafka 幂等性与事务
文章目录 幂等性实现机制配置使用局限性 事务使用场景配置使用实现机制事务过程事务初始化事务开始事务提交事务取消事务消费 幂等性 Producer 无论向 Broker 发送多少次重复的数据,Broker 端只会持久化一条,保证数据不丢失且不重复。 实现机制 通过引…...
day2 Linux操作系统指令
思维导图 在家目录下创建目录文件,dir 1、dir下创建dir1和dir2 2、把当前目录下的所有文件拷贝到dir1中, 3、把当前目录下的所有脚本文件拷贝到dir2中 4、把dir2打包并压缩为dir2.tar.xz 5、再把dir2.tar.xz移动到dir1中 6、解压dir1中的压缩包 7、使用…...
AI一周重要会议和活动概览
一、小模型的曙光和机会之思辨高峰论坛 会议介绍:小模型的曙光和机会之思辨”高峰论坛暨第32期CSIG图像图形学科前沿讲习班于2025年1月3—4日在杭州举办,会议由中国图象图形学学会主办,中国图象图形学学会前沿科技论坛委员会承办。本次论坛设…...
重启ubuntu服务器,如何让springboot服务自动运行
文章目录 1. 使用 systemd 服务步骤: 2. 使用 cron 的 reboot 任务步骤: 3. 使用 init.d 脚本(适用于较旧版本)步骤: 推荐方案 为了确保在重启Ubuntu服务器后,让springboot的服务test.jar象 nohup java -ja…...
python系列教程237——启动扩展功能
朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow 声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享…...
U盘格式化工具合集:6个免费的U盘格式化工具
在日常使用中,U盘可能会因为文件系统不兼容、数据损坏或使用需求发生改变而需要进行格式化。一个合适的格式化工具不仅可以清理存储空间,还能解决部分存储问题。本文为大家精选了6款免费的U盘格式化工具,并详细介绍它们的功能、使用方法、优缺…...
循环神经网络(RNN)入门指南:从原理到实践
目录 1. 循环神经网络的基本概念 2. 简单循环网络及其应用 3. 参数学习与优化 4. 基于门控的循环神经网络 4.1 长短期记忆网络(LSTM) 4.1.1 LSTM的核心组件: 4.2 门控循环单元(GRU) 5 实际应用中的优化技巧 5…...
马原复习笔记
文章目录 前言导论物质实践人类社会资本主义社会主义共产主义后记 前言 一月二号下午四点多考试,很友好,不是早八,哈哈哈。之前豪言壮语和朋友说这次马原要全对,多做了几次测试之后,发现总有一些知识点是自己不知道的…...
Android Room 框架的初步使用
一、简介 Room 是一个强大的对象关系映射库,它允许你将 SQLite 数据库中的表映射到 Java 或 Kotlin 的对象(称为实体)上。你可以使用简单的注解(如 Entity、Dao 和 Database)来定义数据库表、数据访问对象(…...
什么是过度拟合和欠拟合?
在机器学习中,当一个算法的预测非常接近或者直接等于它的训练数据,导致不能够准确预测除了训练数据以外的数据,我们把这种情况称为过度拟合。算法能够非常接近甚至就是训练的数据,是个非常好的事,但是它不能准确预测除…...
DotnetSpider实现网络爬虫
1. 使用DotnetSpider框架 DotnetSpider是一个开源的、轻量、灵活、高性能、跨平台的分布式网络爬虫框架,适用于.NET平台。它可以帮助开发者快速实现网页数据的抓取功能。 1.1 安装DotnetSpider NuGet包 首先,你需要在你的.NET项目中安装DotnetSpider NuGet包。你可以通过…...
锐捷WLAN产品出货量排名第一!
摘要:2024年Q3锐捷WLAN产品出货量排名第一!锐捷多形态Wi-Fi 7产品重磅出击! 近日, IT市场研究和咨询公司IDC发布《IDC中国企业级WLAN市场跟踪报告,2024年Q3》。报告显示,锐捷WLAN产品在2024年Q3出货量位居行业首位。至此,锐捷WLAN产品在2024年的Q1、Q2、Q3均实现了市场出货量的…...
win32汇编环境下,对话框程序中生成listview列表控件,点击标题栏自动排序的示例
;把代码抄进radasm里面,可以直接编译运行。重要的地方加了备注。 ;这个有点复杂,重要的地方加了备注 ;以下是ASM文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>…...
自动化文档处理:Azure AI Document Intelligence
Azure AI Document Intelligence支持多种文件格式,包括PDF、JPEG、PNG等。其核心功能是将这些文档按页进行内容提取,并转化为LangChain文档。其默认输出格式是Markdown,这使得文档可以通过MarkdownHeaderTextSplitter进行语义分片。您也可以使…...
【Maven】Maven打包机制详解
Maven打包的类型? 以下是几种常见的打包形式: 1、jar (Java Archive) 用途:用于包含 Java 类文件和其他资源(如属性文件、配置文件等)的库项目。特点: 可以被其他项目作为依赖引用。适合创建独立的应用程…...
Python 向量检索库Faiss使用
Faiss(Facebook AI Similarity Search)是一个由 Facebook AI Research 开发的库,它专门用于高效地搜索和聚类大量向量。Faiss 能够在几毫秒内搜索数亿个向量,这使得它非常适合于实现近似最近邻(ANN)搜索&am…...
pd.Timestamp接收的参数类型
pd.Timestamp() 是 Pandas 中用于表示单个日期时间的函数,它可以接受多种类型的参数。以下是 pd.Timestamp() 可以接受的主要参数类型,并举例说明: 1. 日期时间字符串(Date/Time String) pd.Timestamp() 可以接收标准…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
