音频滤波笔记之高低通滤波器

音频滤波

  • 音频滤波
    • 数字滤波器设计
      • 一阶IIR数字滤波器的设计
        • 最简单的低通滤波器
        • 高通滤波器
        • 带通滤波器
        • 带阻滤波器
    • 算法
      • 高通滤波
  • 参考文档

音频滤波

数字滤波器设计

一阶IIR数字滤波器的设计

最简单的低通滤波器
  • 传递函数

H ( s ) = 1 1 + s H(s) = \frac{1}{1 + s} H(s)=1+s1

  • 傅氏变换

H ( j Ω ) = 1 1 + j Ω H(j \Omega) = \frac{1}{1+ j \Omega} H(jΩ)=1+jΩ1

  • 改造后的公式

H ( s ) = Ω c Ω c + s H(s) = \frac{\Omega_c}{\Omega_c + s} H(s)=Ωc+sΩc

其中 Ω c = 2 ∗ π ∗ f c \Omega_c = 2 * \pi * f_c Ωc=2πfc f c f_c fc​ 为截止频率

高通滤波器

将低通滤波器的的 s = 1 s s=\frac{1}{s} s=s1 就得到高通滤波器了
H ( s ) = Ω c s Ω c s + 1 H(s) = \frac{\Omega_c s}{\Omega_c s + 1} H(s)=Ωcs+1Ωcs

截止角频率 Ω h = 1 Ω c \Omega_h = \frac{1}{\Omega_c} Ωh=Ωc1 得到
H ( s ) = s s + Ω h H(s) = \frac{s}{s + \Omega_h} H(s)=s+Ωhs
截止频率为$f_n = \frac{1}{2 \pi \Omega_h} $

带通滤波器

公式
s = s 2 + Ω m 2 B W s s = \frac{s^2 + \Omega^2_m}{BW_s} s=BWss2+Ωm2

带入最原始的低通滤波器得到传递函数:
H ( s ) = B W s s 2 + Ω m 2 + B W s H(s) = \frac{BW_s}{s^2 + \Omega^2_m + BW_s} H(s)=s2+Ωm2+BWsBWs

带阻滤波器

公式:
s = s 2 + Ω c 2 B W s s= \frac{s^2 +\Omega^2_c}{BW_s} s=BWss2+Ωc2

带入初始的高通滤波器得到传递函数:
H ( s ) = s 2 + Ω m 2 s 2 + Ω m 2 + B W s H(s) = \frac{s^2 + \Omega_m^2}{s^2 + \Omega^2_m + BW_s} H(s)=s2+Ωm2+BWss2+Ωm2

算法

高通滤波

  1. 基本公式
  • 经典模拟高通滤波器

H ( s ) = ω c s + ω c H(s) = \frac{\omega_c}{s + \omega_c} H(s)=s+ωcωc

H ( s ) H(s) H(s) 是拉普拉斯域中的传递函数

ω c \omega_c ωc 是截止频率的角频率 ω c = 2 ∗ π ∗ f c \omega_c = 2 * \pi * f_c ωc=2πfc f c f_c fc​ 是截止频率

  • 无限冲击响应 ( IIR ) 高通滤波器(简单版本)

y [ n ] = − α ∗ y [ n − 1 ] + x [ n ] y[n] = -\alpha * y[n-1] +x[n] y[n]=αy[n1]+x[n]

y [ n ] y[n] y[n] 当前计算后的输出信号

x [ n ] x[n] x[n] 是当前的输入信号

y [ n − 1 ] y[n-1] y[n1] 上次一计算后的输出信号

α \alpha α 衰减系数

  • 有限冲击响应 ( FIR ) 高通滤波器(常用查分方程

y [ n ] = ∑ k = 0 M − 1 b [ k ] ∗ x [ n − k ] y[n] = \sum_{k=0}^{M-1} b[k] * x[n-k] y[n]=k=0M1b[k]x[nk]

y [ n ] y[n] y[n] 计算后的输出信号

b [ k ] b[k] b[k] 滤波器系数

x [ n − k ] x[n-k] x[nk] 过去第 k k k 个输入样本

M M M 滤波器阶数

  1. 源码(whisper.cpp 中给出的代码)
void high_pass_filter(std::vector<float> & data, float cutoff, float sample_rate) {const float rc = 1.0f / (2.0f * M_PI * cutoff);const float dt = 1.0f / sample_rate;const float alpha = dt / (rc + dt);float y = data[0];for (size_t i = 1; i < data.size(); i++) {y = alpha * (y + data[i] - data[i - 1]);data[i] = y;}
}
  1. 源码公式解析

这段代码中包含的数学公式是针对高通滤波器的设计和应用。以下是公式及其功能:

  • 时间常数 (RC Constant) 的计算:

r c = 1.0 2.0 ∗ π ∗ c u t o f f rc = \frac{1.0} {2.0 * \pi * cutoff} rc=2.0πcutoff1.0

这个公式计算了基于截止频率(cutoff)和圆周率(π)的时间常数 rc

  • 时间步长 (Sample Step) 的计算:

d t = 1.0 s a m p l e _ r a t e dt = \frac{1.0}{sample\_rate} dt=sample_rate1.0

这个公式基于采样率 sample_rate 计算了时间步长 dt,是每次采样之间的时间间隔。

  • 滤波器系数 (Alpha) 的计算:

α = d t r c + d t \alpha = \frac{dt}{rc + dt} α=rc+dtdt

这个公式计算了滤波器的系数 α \alpha α,它是构成滤波器整合公式的关键参数。

  • 高通滤波器的递推公式:

y = α ∗ ( y + d a t a [ i ] − d a t a [ i − 1 ] ) y = \alpha * (y + data[i] - data[i - 1]) y=α(y+data[i]data[i1])

这个公式是高通滤波器的核心,它定义了如何根据输入信号样本 d a t a [ i ] data[i] data[i] ,之前的结果 y y y 和两个连续样本之间的差 ( d a t a [ i ] − d a t a [ i − 1 ] ) (data[i] - data[i - 1]) (data[i]data[i1]) 来计算每个时间步长的输出值 y y y

这些数学公式一起用于实现高通滤波器的数字模型,该模型以特定频率以上的声音为主,而忽略低频声音,通常用于音频处理中以去除低频噪声或重低音中的无用成分。

参考文档

一阶IIR数字滤波器的设计
whisper.cpp

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

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

相关文章

(九)Spring教程——ApplicationContext中Bean的生命周期

1.前言 ApplicationContext中Bean的生命周期和BeanFactory中的生命周期类似&#xff0c;不同的是&#xff0c;如果Bean实现了org.springframework.context.ApplicationContextAware接口&#xff0c;则会增加一个调用该接口方法setApplicationContext()的步骤。 此外&#xff0c…

NeMo训练llama2_7b(不用NeMo-Framework-Launcher)

TOC 本文介绍了NeMo如何训练llama2_7b模型 1.参考链接 支持的模型列表功能特性LLAMA2端到端流程(基于NeMo-Framework-Launcher) 2.创建容器 docker run --gpus all --shm-size32g -ti -e NVIDIA_VISIBLE_DEVICESall \--privileged --nethost -v $PWD:/home \-w /home --na…

香橙派 Orange AIpro 测评记录视频硬件解码

香橙派 Orange AIpro 测评记录视频硬件解码 香橙派官网&#xff1a;http://www.orangepi.cn/ 收到了一块Orange Pi AIpro开发板&#xff0c;记录一下我的测评~测评简介如下&#xff1a;1.连接网络2.安装流媒体进行硬件解码测试3.安装IO测试 简介 Orange Pi AI Pro 是香橙派联合…

0基础学习区块链技术——链之间数据同步样例

我们可以在https://blockchaindemo.io/体验这个过程。 创建区块 默认第一个链叫Satoshi(中本聪)。链上第一个区块叫“创世区块”——Genesis Block。后面我们会看到创建的第二条链第一个区块也是如此。 新增链 新创建的链叫Debby。默认上面有一个创世区块。 然后我们让这…

Android自定义View - LayoutParams

这一期我们来讲一讲LayoutParams这个玩意儿。Android入门的第一行代码就牵扯到这个东西&#xff0c;然而&#xff0c;你真的理解够了吗&#xff1f; 第一层理解 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http…

C# 中文字符串转GBK字节的示例

一、编写思路 在 C# 中&#xff0c;将中文字符串转换为 GBK 编码的字节数组需要使用 Encoding 类。然而&#xff0c;Encoding 类虽然默认并不直接支持 GBK 编码&#xff0c;但是可以通过以下方式来实现这一转换&#xff1a; 1.使用系统已安装的编码提供者&#xff08;如果系统…

数据库查询字段在哪个数据表中

问题的提出 当DBA运维多个数据库以及多个数据表的时候&#xff0c;联合查询是必不可少的。则数据表的字段名称是需要知道在哪些数据表中存在的。故如下指令&#xff0c;可能会帮助到你&#xff1a; 问题的处理 查找sysinfo这个字段名称都存在哪个数据库中的哪个数据表 SELEC…

大模型日报2024-06-04

大模型日报 2024-06-04 大模型资讯 1-bit LLMs或能解决AI的能耗问题 摘要: 大型语言模型&#xff08;如ChatGPT&#xff09;的性能不断提升&#xff0c;但其规模也在扩大。1-bit LLMs有望在保持高性能的同时&#xff0c;大幅降低能耗&#xff0c;解决AI系统的能源需求问题。 Hu…

Ubuntu系统设置Redis与MySQL登录密码

Ubuntu系统设置Redis与MySQL登录密码 在Ubuntu 20.04系统中配置Redis和MySQL的密码&#xff0c;您需要分别对两个服务进行配置。以下是详细步骤&#xff1a; 配置Redis密码 打开Redis配置文件: Redis的配置文件通常位于/etc/redis/redis.conf。 sudo nano /etc/redis/redis.c…

从实战案例来学习结构化提示词(一)

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之…

C# 获取windows的上传下载速度

直接利用CZGL.SystemInfo代码 UnitType.cs /// <summary> /// 单位 /// </summary> public enum UnitType : int {/// <summary>/// Byte/// </summary>/// B 0,/// <summary>/// KB/// </summary>KB,/// <summary>/// MB/// </…

Python语法详解module1(变量、数据类型)

目录 一、变量1. 变量的概念2. 创建变量3. 变量的修改4. 变量的命名 二、数据类型1. Python中的数据类型2. 整型&#xff08;int&#xff09;3. 浮点型&#xff08;float&#xff09;4. 布尔型&#xff08;bool&#xff09;5. 字符串&#xff08;str&#xff09;6.复数&#xf…

MySQL中所有常见知识点汇总

存储引擎 这一张是关于整个存储引擎的汇总知识了。 MySQL体系结构 这里是MySQL的体系结构图&#xff1a; 一般将MySQL分为server层和存储引擎两个部分。 其实MySQL体系结构主要分为下面这几个部分&#xff1a; 连接器&#xff1a;负责跟客户端建立连 接、获取权限、维持和管理…

JavaScript第九讲BOM编程的练习题

前言 上一节有BOM的讲解&#xff0c;有需要的码客们可以去看一下 以下是一个结合了上述BOM&#xff08;Browser Object Model&#xff09;相关内容的练习题及其源代码示例&#xff1a; 练习题&#xff1a; 编写一个JavaScript脚本&#xff0c;该脚本应该执行以下操作&#…

1141. 查询近30天活跃用户数

1141. 查询近30天活跃用户数 题目链接&#xff1a;1141. 查询近30天活跃用户数 代码如下&#xff1a; # Write your MySQL query statement below select activity_date as day,count(distinct user_id) as active_users from Activity where activity_date between 2019-06-…

[数据集][图像分类]蘑菇分类数据集14689张50类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;14689 分类类别数&#xff1a;50 类别名称:[“agaricus_augustus”,“agari…

流程引擎,灵活设计业务流程的编辑器设计

流程引擎&#xff0c;灵活设计业务流程的编辑器设计

PySpark特征工程(I)--数据预处理

有这么一句话在业界广泛流传&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。由此可见&#xff0c;特征工程在机器学习中占有相当重要的地位。在实际应用当中&#xff0c;可以说特征工程是机器学习成功的关键。 特征工程是数据分析…

若依项目部署(Linux2.0)

解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置Java环境变量&#xff1a; vim /etc/profile 设置环境变量生效&#xff1a; source /etc/profile 查看一下jdk版本&#xff1a; java -version 解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz 防火墙设置&#xff1a; …

一款WPF的小巧MVVM框架——stylet框架初体验

今天偶然知道有一款叫做stylet的MVVM框架&#xff0c;挺小巧的&#xff0c;特别是它的命令触发方式&#xff0c;简单粗暴&#xff0c;让人感觉很神器。所以接下来我要做一个简单的demo&#xff0c;顺便来分享给大家。 本地创建一个WPF项目&#xff0c;此处我使用.NET 8来创建。…