椭圆滤波器
之前的文章 信号去噪 中列出了7种常用的信号去噪算法,对于后两种算法——深度学习和奇异值分解(SVD),我现在也不太理解,就先不写了。
很多朋友留言又提了一些算法,今天一起来聊聊椭圆滤波器。
椭圆滤波器(Elliptic Filter),也称为Cauer滤波器,是一种数字滤波器,用于信号处理和滤波应用。椭圆滤波器之所以得名,是因为其在频率响应图上的特征呈现出椭圆形的形状。
椭圆滤波器有以下特点和优点:
-
极窄的过渡带宽:椭圆滤波器的过渡带宽(即通频带到阻频带的过渡区域)非常窄,这意味着它可以在频域内实现非常陡峭的滤波特性。
-
通带和阻带均衡:椭圆滤波器通常可以在通带和阻带内实现更好的幅度响应均衡。这意味着它可以在通带内最小化幅度失真,并在阻带内最大化信号抑制。
-
允许通带和阻带的波动:与其他滤波器设计相比,椭圆滤波器允许通带和阻带内的振荡,但在给定的通带和阻带容限下,可以实现更小的阶数(更低的复杂度)。
-
高阶滤波特性:椭圆滤波器通常以较高的阶数实现,这使其适用于需要极高滤波性能的应用,如无线通信和雷达系统。
椭圆滤波器的设计需要确定以下参数:
- 通带边界频率(通带上下限的频率)。
- 阻带边界频率(阻带上下限的频率)。
- 通带最大允许波纹(通带内振荡的幅度波纹)。
- 阻带最小抑制(阻带内信号抑制的最小要求)。
椭圆滤波器设计通常涉及到数学优化问题,以找到最佳参数配置来满足上述要求。
椭圆滤波器的设计
滤波器的目标
任何滤波器的目标都是根据特定的频率响应特性来修改输入信号的频谱。在椭圆滤波器中,通常有以下几个重要的频率响应特性目标:
- 通带(Passband):这是允许信号通过的频率范围,通常是我们希望保留的信号频率范围。
- 阻带(Stopband):这是我们希望完全抑制的频率范围,通常包括噪声或干扰信号。
- 过渡带(Transition Band):这是从通带到阻带之间的频率范围,通常需要在此范围内实现平滑的过渡。
频率响应特性
椭圆滤波器的主要特点是它在通带和阻带内具有波纹,这意味着幅度响应在这些频率范围内会波动。设计椭圆滤波器时,需要指定以下几个关键参数:
- 通带上限和下限频率。
- 阻带上限和下限频率。
- 通带内的最大允许波纹(通带内振荡的幅度波纹)。
- 阻带内的最小抑制要求(阻带内信号抑制的最小要求)。
设计优化
设计椭圆滤波器通常是一个优化问题,其中的目标是找到一组滤波器系数,以满足上述频率响应特性和参数要求。这个问题通常涉及到复杂的数学和优化算法。
阶数
椭圆滤波器的性能和复杂度与其阶数有关。阶数是滤波器的系数数量,通常以n表示。增加阶数可以提高滤波器的性能,但也会增加计算复杂度。
通带和阻带特性
椭圆滤波器的主要特点是通带和阻带内的波纹,这些波纹是通过合适的设计参数来控制的。通带波纹是通带内的最大振荡幅度,而阻带波纹是阻带内允许的最小信号抑制。
通带和阻带边界
设计椭圆滤波器时,需要指定通带和阻带的频率边界。这些边界决定了滤波器在哪些频率范围内工作以及哪些频率范围内抑制信号。
滤波器的实现
一旦设计出椭圆滤波器的系数,它可以被实现为数字滤波器。在数字信号处理中,可以使用差分方程或频域方法来应用这些系数。
性能权衡
椭圆滤波器的设计涉及性能和复杂度之间的权衡。增加阶数和降低通带和阻带波纹可以提高性能,但会增加计算复杂度。设计者需要根据具体应用的需求来选择合适的权衡。
应用
椭圆滤波器在各种领域都有广泛的应用,包括通信、图像处理、生物医学工程和音频处理等。下面是椭圆滤波器在音频处理中的应用实例之一——音频均衡器。
应用实例:音频均衡器
音频均衡器是音频处理中常见的设备,用于调整不同频率范围内的音频信号的增益,以满足特定的声音质量和音频效果要求。通常,音频均衡器分为多个频带,每个频带可以独立地调整增益,以实现音频的均衡。
在音频均衡器中,椭圆滤波器用于实现不同频带的均衡。每个频带都有一个椭圆滤波器,它可以调整该频带内的音频信号的增益,同时保持其他频带不受影响。以下是一个音频均衡器的应用示例:
信号描述: 假设我们有一个音频均衡器,它分为低音、中音和高音三个频带。我们希望用户能够通过调整这三个频带的增益来实现音频的均衡,即增强或减弱不同频率范围内的声音。
解决方案: 对于每个频带,我们可以使用椭圆滤波器来实现频率范围内的增益控制。椭圆滤波器的通带可以定位在相应频带内,而阻带则可以防止信号泄漏到其他频带。用户可以通过旋钮或界面上的控制来调整每个频带的增益。
性能: 椭圆滤波器可以设计为非常陡峭的滤波器,具有出色的频率选择和抑制特性。这使得它们非常适合用于音频均衡器,因为它们可以准确地控制每个频带的音频信号,而不会对其他频带产生不希望的影响。
实际应用: 音频均衡器广泛用于音响系统、录音室设备、电视和广播设备等领域。用户可以根据音频播放环境和个人喜好来调整音频的均衡,以获得更好的音质和听觉体验。
这个示例说明了椭圆滤波器在音频均衡器中的应用,帮助实现不同频带的音频均衡和定制。这对于音频处理和音响应用中的声音调整非常重要。
python示例
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import ellip, lfilter
from scipy.fft import fft# 生成一个示例音频信号
fs = 44100 # 采样率
t = np.arange(0, 0.1, 1/fs) # 时间向量
frequencies = [100, 500, 1000, 5000] # 音频信号的频率成分
signal = np.sum([np.sin(2 * np.pi * f * t) for f in frequencies], axis=0)# 设计椭圆滤波器
# 假设我们有3个频带,每个频带的通带和阻带频率范围由用户定义
band1 = (50, 200) # 低音频带
band2 = (400, 800) # 中音频带
band3 = (800, 5000) # 高音频带# 设计低音频带的椭圆滤波器
low_band = ellip(4, 0.05, 40, [2 * f / fs for f in band1], 'bandpass', analog=False)# 设计中音频带的椭圆滤波器
mid_band = ellip(4, 0.5, 40, [2 * f / fs for f in band2], 'bandpass', analog=False)# 设计高音频带的椭圆滤波器
high_band = ellip(4, 0.5, 40, [2 * f / fs for f in band3], 'bandpass', analog=False)# 使用滤波器处理信号
filtered_signal1 = lfilter(*low_band, signal)
filtered_signal2 = lfilter(*mid_band, signal)
filtered_signal3 = lfilter(*high_band, signal)# 计算频谱
def calculate_spectrum(x, fs):N = len(x)spectrum = np.abs(fft(x))[:N // 2]frequency = np.fft.fftfreq(N, 1 / fs)[:N // 2]return frequency, spectrum# 计算原始信号的频谱
freq_original, spec_original = calculate_spectrum(signal, fs)# 计算处理后的信号频谱
freq_filtered1, spec_filtered1 = calculate_spectrum(filtered_signal1, fs)
freq_filtered2, spec_filtered2 = calculate_spectrum(filtered_signal2, fs)
freq_filtered3, spec_filtered3 = calculate_spectrum(filtered_signal3, fs)# 绘制原始信号和处理后的信号
plt.figure(figsize=(12, 8))plt.subplot(4, 1, 1)
plt.title('Original Signal')
plt.plot(t, signal)plt.subplot(4, 1, 2)
plt.title('Low Frequency Band')
plt.plot(t, filtered_signal1)plt.subplot(4, 1, 3)
plt.title('Mid Frequency Band')
plt.plot(t, filtered_signal2)plt.subplot(4, 1, 4)
plt.title('High Frequency Band')
plt.plot(t, filtered_signal3)plt.tight_layout()# 绘制频谱图
plt.figure(figsize=(12, 6))plt.subplot(4, 1, 1)
plt.title('Original Signal Spectrum')
plt.semilogy(freq_original, spec_original)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')plt.subplot(4, 1, 2)
plt.title('Low Frequency Band Spectrum')
plt.semilogy(freq_filtered1, spec_filtered1)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')plt.subplot(4, 1, 3)
plt.title('Mid Frequency Band Spectrum')
plt.semilogy(freq_filtered2, spec_filtered2)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')plt.subplot(4, 1, 4)
plt.title('High Frequency Band Spectrum')
plt.semilogy(freq_filtered3, spec_filtered3)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')plt.tight_layout()
plt.show()
输出:


公众号 | FunIO
微信搜一搜 “funio”,发现更多精彩内容。
个人博客 | blog.boringhex.top
相关文章:
椭圆滤波器
之前的文章 信号去噪 中列出了7种常用的信号去噪算法,对于后两种算法——深度学习和奇异值分解(SVD),我现在也不太理解,就先不写了。 很多朋友留言又提了一些算法,今天一起来聊聊椭圆滤波器。 椭圆滤波器(Elliptic F…...
Mac 下安装golang环境
一、下载安装包 安装包下载地址 下载完成,直接继续----->下一步到结束即可安装成功; 安装成功之后,验证一下; go version二、配置环境变量 终端输入vim ~/.zshrc进入配置文件,输入i进行编辑 打开的不管是空文本…...
前端面试大纲
一、CSS 1.说一下CSS的盒模型。 在HTML页面中的所有元素都可以看成是一个盒子 盒子的组成:内容content、内边距padding、边框border、外边距margin 盒模型的类型: 标准盒模型 margin border padding content IE盒模型 margin content(border padd…...
CAN(Controller Area Network)是一种用于在汽车和工业领域中进行通信的串行总线系统(附加案例)
CAN(Controller Area Network)是一种用于在汽车和工业领域中进行通信的串行总线系统。它是一种高可靠性、多主机、多节点通信协议,主要用于实时控制和数据传输。 CAN数据是指在CAN总线上通过CAN协议进行通信传输的数据。CAN总线上的数据被分…...
代码随想录day53|1143.最长公共子序列、 1035.不相交的线、 53. 最大子序和
1143.最长公共子序列 dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j] 因此是if(nums1[i-1] nums2[j-1]) 1035.不相交的线 和上一题一样 53. 最大子序和 int result dp[0]; 不是0,因为dp[i]有…...
xilinx fpga ddr mig axi
硬件 参考: https://zhuanlan.zhihu.com/p/97491454 https://blog.csdn.net/qq_22222449/article/details/106492469 https://zhuanlan.zhihu.com/p/26327347 https://zhuanlan.zhihu.com/p/582524766 包括野火、正点原子的资料 一片内存是 1Gbit 128MByte 16bit …...
《golang设计模式》第三部分·行为型模式-04-迭代器模式(Iterator)
文章目录 1. 概念1.1 角色1.2 类图 2. 代码示例2.1 需求2.2 代码2.3 类图 1. 概念 迭代器(Iterator)能够在不暴露聚合体内部表示的情况下,向客户端提供遍历聚合元素的方法。 1.1 角色 InterfaceAggregate(抽象聚合)…...
python加上ffmpeg实现音频分割
前言: 这是一个系列的文章,主要是使用python加上ffmpeg来对音视频文件进行处理,包括音频播放、音频格式转换、音频文件分割、视频播放等。 系列文章链接: 链接1: python使用ffmpeg来制作音频格式转换工具(优化版) 链接2:<Python>PyQt5+ffmpeg,简单视频播放器的编写(…...
LLM之Prompt(一):5个Prompt高效方法在文心一言3.5的测试对比
在Effective Prompt: 编写高质量Prompt的14个有效方法文中我们了解了14个编写Prompt的方法(非常感谢原作者),那么这些Prompt在具体大模型中的效果如何呢?本文以百度文心一言3.5版本大模型在其中5个方法上做个测试对比。 第1条&am…...
TreeBERT:基于树的编程语言预训练模型。
TreeBERT https://arxiv.org/abs/2105.12485 Comments: Accepted by UAI2021 Subjects: Machine Learning (cs.LG); Programming Languages (cs.PL) Cite as: arXiv:2105.12485 [cs.LG] 1 Introduction 现有挑战: 设计适当的机制来学习程序的语法结构 代码是强结…...
生成小程序的二维码的base64码(中间logo可以自定义)
1.生成基础二维码 /*** 生成微信小程序二维码,带参数,最终转成base64* param page 当前小程序相对页面 必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不…...
【音视频 | Ogg】Ogg封装格式详解——包含Ogg封装过程、数据包(packet)、页(page)、段(segment)等
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
ubuntu 22.04 安装ros2 iron
目录 一、镜像 二、ifconfig 三、ssh连接不上 四、安装iron 一、镜像 123云盘直接下载 二、ifconfig sudo apt install net-tools 三、ssh连接不上 sudo apt install openssh-server 四、安装iron Ubuntu (Debian packages) — ROS 2 Documentation: Iron document…...
PHP语言、B/S手术麻醉临床信息管理系统源码
手术麻醉临床信息管理系统有着完善的临床业务功能,能够涵盖整个围术期的工作,能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施,能够规范麻醉科的工作流程,实现麻醉手术过程的信息数字化,自动生…...
Win11安装网络打印机
https://support.microsoft.com/zh-cn/windows/%E5%9C%A8-windows-%E4%B8%AD%E5%AE%89%E8%A3%85%E6%89%93%E5%8D%B0%E6%9C%BA-cc0724cf-793e-3542-d1ff-727e4978638b...
逆向学习记录(3)工具介绍jadx、gda和jeb
1、jadx 下载地址如下,目前最新版本为v1.4.7,改成想要下载的版本号就能下载对应的版本。 https://github.com/skylot/jadx/releases/tag/v1.4.7 下载后解压,进入对应路径的bin文件夹内,运行jadx-gui.bat。 2、gda 下载地址和gi…...
C#,数值计算——偏微分方程,Mglin的计算方法与源程序
1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Mglin { private int n { get; set; } private int ng { get; set; } private double[,] uj1 { get; set; } private Lis…...
一机服务万人,拓世法宝AI智能商业数字人一体机,解锁文旅新表达
在人工智能的强劲推动下,人们走进了一个令人振奋的数字化时代。如何让文化传承与现代科技完美融合,成为一个十分有趣的议题,当AI技术结合文旅生活,便悄然开启了一种全新的旅游服务模式——AI数字文旅。 在我国国家博物馆、文旅大…...
【源码解析】聊聊SpringBean是如何初始化和创建
我们知道通过类进行修复不同的属性,比如单例、原型等,而具体的流程是怎么样的呢,这一篇我们开始从源码的视角分析以下。 刷新方法 在刷新容器中有一个方法,其实就是 Bean创建的过程。 finishBeanFactoryInitialization(beanFact…...
【0基础学Java第六课】-- 数组的定义与使用
6 数组的定义与使用 6.1 什么是数组6.2 数组的创建及初始化6.2.1 数组的创建:6.2.2 数组的初始化 6.3 数组的使用6.3.1 数组中元素的访问6.3.2 Java中JVM当中的内存划分6.3.3 遍历数组 6.4 数组是引用类型6.4.1 初始JVM的内存分布6.4.2 基本类型变量与引用类型变量的…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
