信号系统之窗口正弦滤波器

1 Windowed-Sinc 的策略

图 16-1 说明了 windowed-sinc 滤波器背后的思想。在**(a)**中,显示了理想低通滤波器的频率响应。所有低于截止频率 f c f_c fc 的频率都以单位振幅通过,而所有较高的频率都被阻挡。通带是完全平坦的,阻带中的衰减是无限的,两者之间的过渡是无限小的。

采用该理想频率响应的逆傅里叶变换产生理想滤波器核(脉冲响应),如 (b) 所示。该曲线的一般形式称为 sinc 函数,由下式给出:

使用该滤波器内核对输入信号进行卷积可提供完美的低通滤波器。问题是,sinc 函数继续到负无穷大和正无穷大,而不会下降到零振幅。虽然这种无限长度对数学来说不是问题,但它对计算机来说是一个障碍

为了解决这个问题,将对(b)中的 sinc 函数进行两次修改,得到©中所示的波形:

  • 首先,它被截断为 M+1 点,在主瓣周围对称选择,其中 M 是 偶数。这些 M+1 点之外的所有样本都设置为零,或者干脆忽略。
  • 其次,整个序列向右移动,使其从 0 到 M。这允许仅使用正索引来表示筛选器内核。虽然许多编程语言允许负索引,但它们使用起来很麻烦。滤波器内核中这种 M/2 位移的唯一效果是将输出信号偏移相同的量。

由于修改后的滤波器内核只是理想滤波器内核的近似值,因此它不会具有理想的频率响应。为了找到获得的频率响应,可以对©中的信号进行傅里叶变换,从而得到(d)中的曲线。通带中存在过大的纹波和阻带中的衰减不良。这些问题是由于截断的 sinc 函数末端的突然不连续性造成的。增加过滤器内核的长度并不能减少这些问题;无论 M 产生多长时间,不连续性都是显着的。

幸运的是,有一种简单的方法可以改善这种情况。图(e)显示了一条平滑的锥形曲线,称为Blackman window。将截断的 sinc©乘以 Blackman 窗口(e),得到(f)中所示的** windowed-sinc 滤波器内核**。这个想法是减少截断末端的突兀性,从而改善频率响应。图(g)显示了这种改进。通带现在是平坦的,阻带衰减非常好,在这张图中看不到。

有几种不同的窗口可用,其中大多数以 1950 年代的原始开发人员命名。只有两个值得使用,Hamming window 和 Blackman window,这些是由以下方式给出的:

图 16-2a 显示了这两个窗口的形状(即曲线中总共 51 个点)。应该使用这两个窗口中的哪一个? 这是 参数之间的权衡。如图 16-2b 所示,汉明窗的滚降速度比布莱克曼快约 20%。然而(c)表明Blackman具有更好的阻带衰减。Blackman 的阻带衰减为 -74dB(∼0.02%),而汉明的阻带衰减仅为 -53dB(∼0.2%)。虽然在这些图中看不到,但布莱克曼的通带纹波仅为0.02%左右,而汉明纹波通常为0.2%。一般来说,布莱克曼应该是第一选择;缓慢的滚降比不良的阻带衰减更容易处理。

2 设计过滤器

要设计窗口正弦,必须选择两个参数:截止频率 f c f_c fc滤波器核的长度 M。截止频率为表示为采样率的分数,因此必须介于 0 和 0.5 之间。M 的值根据近似值设置滚降:

其中 BW 是过渡带的宽度,从曲线几乎不离开 1 的地方到几乎达到零的地方(例如,曲线的 99% 到 1%)测量。转换带宽也表示为采样频率的分数,并且必须在 0 和 0.5 之间。图 16-3a 显示了如何使用此近似值的示例。所示的三条曲线是从具有以下条件的过滤器内核生成的:M=20、40和200。从方程 16-3 可以看出,转换带宽分别为:BW=0.2、0.1和0.02。图(b)显示,频率响应的形状不取决于所选的截止频率。

由于卷积所需的时间与信号的长度成正比,方程 16-3 表示计算时间(M 的值)和滤波器锐度(BW 的值)之间的权衡。例如,Blackman 窗口的滚降速度慢了 20%(与汉明相比),可以通过使用长 20% 的滤波器内核来补偿。换句话说,可以说布莱克曼窗口的执行速度比等效的滚降汉明窗口慢 20%。这很重要,因为 windowed-sinc 过滤器的执行速度已经非常慢了。

如图16-3b所示,windowed-sinc滤波器的截止频率是在半振幅点处测量的。为什么使用 0.5 而不是模拟电子和其他数字滤波器中使用的标准0.707(-3dB)?这是因为窗口正弦波的频率响应在通带和阻带之间是对称的。例如,汉明窗口产生的通带纹波为 0.2%,阻带衰减(即阻带中的纹波)为 0.2%。其他滤波器不显示这种对称性,因此在使用一半振幅点来标记截止频率时没有优势。这种对称性使窗口正弦成为光谱反演的理想选择。

选择 f c f_c fc 和 M 后,根据以下关系计算过滤器内核:

根据前面的讨论,应该能够识别三个组成:sinc 函数、M/2 移位和 Blackman 窗口。为了使滤波器在直流时具有单位增益,必须选择常数 K,使所有样本的总和等于1。在实践中,在计算滤波器核时忽略 K,然后根据需要对所有样本进行归一化。表 16-1 中列出的程序显示了如何完成此操作。还要注意计算是如何在 sinc 的中心 = M/2 处处理的,这涉及除以零。

具体说明方程 16-4 描述的过滤器内核在计算机阵列中的位置。例如,M 将被选为 100。M 必须是偶数。筛选器内核中的第一个点位于数组位置 0,而最后一个点位于数组位置 100。整个信号的长度为 101 个点。对称中心位于点 50,即 M/2。点 50 左边的 50 个点与右边的 50 个点是对称的。点 0 与点 100 的值相同,点 49 与点 51 相同。如果滤波器内核中必须有特定数量的样本,例如要使用 FFT,只需在一端或另一端添加零即可。例如,当 M = 100 时,可以使样本 101 到 127 等于零,从而产生一个 128 点长的滤波器核。

图 16-4 显示了 windowed-sinc 滤波器内核的示例及其相应的阶跃响应。过滤器内核开头和结尾的样本非常小,甚至在图形中都看不到它们。不要错误地认为它们不重要!这些样本的价值可能很小;但是,它们共同对滤波器的性能有很大影响。这也是为什么浮点表示通常用于实现窗口化 sinc 滤波器的原因。整数通常没有足够的动态范围来捕获筛选器内核中包含的值的大量变化。windowed-sinc滤波器在时域中的表现如何?阶跃响应有过冲和振铃;这不是对时域中编码信息的信号的过滤器。

3 Windowed-Sinc滤波器示例

脑电图(EEG)是大脑电活动的测量值。它可以被检测为出现在连接到头部表面的电极上的毫伏级信号。大脑中的每个神经细胞都会产生小的电脉冲。脑电图是以(希望)协调的方式产生大量这些电脉冲的综合结果。尽管对思维和这种电协调之间的关系知之甚少,但脑电图中的不同频率可以通过特定的心理状态来识别。如果您闭上眼睛放松,主要的脑电图模式将在大约 7 到 12 赫兹之间缓慢振荡。这种波形称为alpha rhythm,与满足感和注意力水平下降有关。睁开眼睛环顾四周,脑电图会变为β节律,频率在17到20赫兹之间。其他频率和波形见于儿童、不同深度的睡眠以及各种脑部疾病,如癫痫。

在这个例子中,将假设脑电信号已被模拟电子设备放大,然后以每秒 100 个样本的采样率进行数字化。采集数据 50 秒会产生 5,000 个点的信号。目标是将 alpha 节律与 beta 节律分开。为此,将设计一个截止频率为 14 赫兹或 0.14 的数字低通滤波器的采样率。转换带宽将设置为 4 赫兹,即采样率的 0.04。从方程 16-3 开始,滤波器内核需要大约 101 个点长,将任意选择使用汉明窗口。表 16-1 中的程序显示了如何执行过滤器。滤波器的频率响应由滤波器核的傅里叶变换得到,如图16-5所示。

在第二个示例中,将设计一个带通滤波器来隔离音频信号中的信号音,例如当按下电话上的按钮时。假设信号已在 10 kHz 下数字化,目标是隔离以 2 kHz 为中心的 80 赫兹频段。在采样率方面,希望阻断所有低于 0.196 和高于 0.204 的频率(分别对应于 1960 赫兹和 2040 赫兹)。为了实现 50 赫兹(采样率的 0.005)的转换带宽,将滤波器内核设置为 801 个点长,并使用布莱克曼窗口。表 16-2 包含用于计算滤波器内核的程序,而图 16-6 显示了频率响应。设计涉及几个步骤。首先,设计了两个低通滤波器,一个截止值为0.196,另一个截止值为0.204。然后,第二个滤光片在光谱上反转,使其成为高通滤波器。接下来,添加两个滤波器核,产生带阻滤波器。最后,另一个光谱反转使其成为所需的带通滤波器。

4 将其推向极限

windowed-sinc滤波器可以被推到令人难以置信的性能水平,而不会出现令人讨厌的意外。例如,假设需要隔离 120 伏电源线上的 1 毫伏信号。低通滤波器将需要阻带衰减至少为 -120dB。如前所述,Blackman 窗口仅提供 -74dB(五千分之一)。幸运的是,更容易获得更大的阻带衰减。输入信号可以使用传统的windowed-sinc滤波器内核进行滤波,从而提供中间信号。然后,中间信号可以第二次通过滤波器,进一步将阻带衰减提高到-148dB(3000万分之),也可以将两个阶段组合成一个过滤器。组合滤波器的核等于两级滤波器核的卷积。这也意味着,将任何滤波器内核与自身卷积会产生一个具有显着改善阻带衰减的滤波器内核。付出的代价是更长的滤波器内核和更慢的滚降。图 16-7a 显示了 201 点低通滤波器的频率响应,该滤波器是通过将 101 点布莱克曼窗口正弦与自身卷积而形成的(如果确实需要超过-100dB的阻带衰减,则应使用双精度。单精度通带内信号的舍入噪声可能不规则地出现在阻带中,幅度在-100dB至-120dB范围内)。

图 16-7b 显示了窗口化 sinc 令人难以置信的性能的另一个示例:内核中具有 32,001 个点的低通滤波器。频率响应符合预期,采样率为0.000125。这个过滤器有多好?尝试构建一个模拟电子滤波器,以小于 0.02% 的变化将信号从 DC 传递到 1000 赫兹,并以小于 0.02% 的残余阻断阻断 1001 赫兹以上的所有频率。现在这是一个过滤器!请记住图 16-7 中的两个过滤器都使用单精度。使用双精度可以使这些性能级别扩展一百万倍。

windowed-sinc 滤波器的最大限制是执行时间;如果滤波器内核中有很多点,并且使用标准卷积,则它可能会长得令人无法接受。

windowed-sinc 是分离频率的最佳滤波器内核吗?不,由更复杂的技术产生的过滤器内核可能会更好。

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

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

相关文章

代码随想录算法训练营第三六天 | 无重叠区间、划分字母区间、合并区间

目录 无重叠区间划分字母区间合并区间 LeetCode 435. 无重叠区间 LeetCode 763.划分字母区间 LeetCode 56. 合并区间 无重叠区间 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠…

【linux】体系结构和os管理

冯诺依曼体系结构 输入单元:包括键盘, 鼠标,扫描仪, 写板等 中央处理器(CPU):含有运算器和控制器等 输出单元:显示器,打印机等 这里的存储器指的是内存 三者是相互连接的,设备之间会进行数据的来回拷贝&am…

STM32F1 - I2C读写EEPROM

Inter-integrated circuit 1> 实验概述2> I2C模块 - 硬件方框图3> I2C模块 - 主发送器模式4> I2C模块 - 主接收器模式 1> 实验概述 通过STM32F103内部I2C硬件模块, 读写EEPROM - AT24C02 2> I2C模块 - 硬件方框图 3> I2C模块 - 主发送器模式 4…

GPT-4助力我们突破思维定势

GPT-4在突破思维局限、激发灵感和促进知识交叉融合方面的作用不可小觑,它正逐渐成为一种有力的工具,助力各行业和研究领域的创新与发展。 GPT-4在突破传统思维模式、拓宽创新视野和促进跨学科知识融合方面扮演着越来越重要的角色: 突破思维…

java 数据结构LinkedList类

目录 什么是LinkedList 链表的概念及结构 链表的结构 无头单向非循环链表 addFirst方法(头插法) addLast方法(尾插法) addIndex方法 contains方法 removeAllKey方法 size和clear方法 链表oj题 无头双向非循环链表 ad…

Paper - 使用 CombFold 组合装配实现大型蛋白质复合物的结构预测

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/136170304 CombFold: predicting structures of large protein assemblies using a combinatorial assembly algorithm and AlphaFold2 CombFold…

大公司为什么禁止SpringBoot项目使用Tomcat?

原作者:老杨 原文PDF链接:https://topjavaer.cn/advance/excellent-article/28-springboot-forbid-tomcat.html 前言 在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat…

ClickHouse监控及备份

第1章 ClickHouse监控概述 第2章 Prometheus&Grafana的安装 第3章 ClickHouse配置 第4章 Grafana集成Prometheus 第5章 备份及恢复

【C语言】位操作符与移位操作符练习

目录 前言: 1.一道变态的面试题 2.输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。 方法一: 方法二: 方法三: 3.打印整数二进制的奇数位和偶数位 前言: 前篇我们学习过C语言…

【开源】JAVA+Vue.js实现城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统,支持…

C#分部类、分割类的用法,及用分割类设计一个计算器

目录 一、涉及到的知识点 1.分部类 2.分部类主要应用在以下两个方面 3.合理使用分部类分割类 4.事件处理程序 5.Math.Ceiling方法 6.Text.Contains() 7.pictureBox.Tag属性 二、实例 1.源码 2.生成效果 在开发一些大型项目或者特殊部署时,可能需要…

MySQL的基础架构

文章目录 前言MySQL的基础架构总结 前言 你使用 MySQL 开发,你知道 MySQL 的基础架构吗?本文带你来入门MySQL 的基础架构 MySQL的基础架构 MySQL 是我们经常使用到的数据库。它的基础架构分为 server 层与存储引擎层。 server 层:用于存储…

(十九)springboot实战——springboot集成redis实现消息的订阅与发布

前言 本节内容主要介绍springboot项目通过集成redis,如何利用redis的订阅发布机制,完成系统消息的发布与订阅功能。Redis中的发布与订阅是一种消息通信模式,允许发送者(发布者)将消息发送给多个接收者(订…

小型医院医疗设备管理系统|基于springboot小型医院医疗设备管理系统设计与实现(源码+数据库+文档)

小型医院医疗设备管理系统目录 目录 基于springboot小型医院医疗设备管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、职员信息管理 2、设备信息管理 3、库房信息管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、…

2.15日学习打卡----初学Zookeeper(二)

2.15日学习打卡 目录: 2.15日学习打卡一. Zookeeper部署运行伪集群安装集群安装服务管理 二. Zookeeper系统模型数据模型节点特性客户端命令行节点数据信息Watcher监听机制权限控制 ACL 三. 原生api操作Zookeeper四. zkclient库操作Zookeeper五. Apache Curator操作Zookeeper六…

『论文阅读|研究用于视障人士户外障碍物检测的 YOLO 模型』

研究用于视障人士户外障碍物检测的 YOLO 模型 摘要1 引言2 相关工作2.1 障碍物检测的相关工作2.2 物体检测和其他基于CNN的模型 3 问题的提出4 方法4.1 YOLO4.2 YOLOv54.3 YOLOv64.4 YOLOv74.5 YOLOv84.6 YOLO-NAS 5 实验和结果5.1 数据集和预处理5.2 训练和实现细节5.3 性能指…

【内网穿透】如何在小米4A中刷OpenWRT并实现公网访问本地路由器

文章目录 前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 前言 OpenWRT是一个高度模块化、高度自…

motplotlib图例案例1:通过多个legend完全控制图例显示顺序(指定按行排序 or 按列排序)

这个方法的核心,是手动的获得图中的handlers和labels,然后对它们进行切分和提取,最后分为几个legend进行显示。代码如下: 后来对下面的代码进行修改,通过handlers, labels get_legend_handles_labels(axs[axis])自动的…

新年红包的题解

目录 原题描述: 题目描述 题目背景 题目描述 输入格式 输出格式 样例 Input 1 Output 1 Input 2 Output 2 数据范围 主要思路: 代码code: 原题描述: 题目描述 题目背景 龙飞凤舞迎跨年,瑞雪飘飘送祝愿…

Spring Boot 笔记 024 登录页面

1.1 登录接口 //导入request.js请求工具 import request from /utils/request.js//提供调用注册接口的函数 export const userRegisterService (registerData)>{//借助于UrlSearchParams完成传递const params new URLSearchParams()for(let key in registerData){params.a…