声音响度、声压级计权(A B C)实现

 声压 sound pressure

声压就是大气压受到声波扰动后产生的变化,即为大气压强的余压,它相当于在大气压强上的叠加一个声波扰动引起的压强变化。由于声压的测量比较容易实现,通过声压的测量也可以间接求得质点速度等其它物理量,所以声学中常用这个物理量来描述声波

我们知道大气压强单位 1Pa = 1 pascal = 1N/m

实际计算可以参考http://www.sengpielaudio.com/calculator-soundlevel.htm

由于人对不同的声音频段 听感大小不一致,所以要对声音进行计权处理

如下实现 A  B   C 计权的实现,计权的实现参考标准,用于逼近实际的等响度曲线

 

ISO 226-2003标准

A、B、C三种计权网络特性,分别对应于倒置的40、70、100Phon等响曲线(1000Hz归一化到0dB),其作用是分别反应人耳对低、中、高声压级的响度感觉。A计权被证实是人耳对声压级主观反应的极好校正。对由A计权测量的声级称为A声级,记作LPA 或dB(A)。近来B计权、C计权已很少采用。

  • A计权:40Phon等响曲线的翻转,模拟55dB以下低强度噪声特性。

  • B计权:70Phon等响曲线的翻转,模拟55~85dB中等强度噪声特性。

  • C计权:100Phon等响曲线的翻转,模拟高强度噪声特性。

  • D计权:专用于飞机噪声的测量。


target_folder='audio/'
audio_targets = '.wav'
spl_folder = '/c_audio'
from  librosa import load
from  os import  listdir,path
from scipy.signal import lfilter,bilinear
from numpy import pi, convolve,log10,sqrt,sum,power
from csv import writerdef a_weighting_coeffs_design(sample_rate):"""Returns b and a coeff of a A-weighting filter.Parameters----------sample_rate : scalarSample rate of the signals that well be filtered.Returns-------b, a : ndarrayFilter coefficients for a digital weighting filter.Examples-------->>> b, a = a_weighting_coeff_design(sample_rate)To Filter a signal use scipy lfilter:>>> from scipy.signal import lfilter>>> y = lfilter(b, a, x)See Also--------b_weighting_coeffs_design : B-Weighting coefficients.c_weighting_coeffs_design : C-Weighting coefficients.weight_signal : Apply a weighting filter to a signal.scipy.lfilter : Filtering signal with `b` and `a` coefficients."""f1 = 20.598997f2 = 107.65265f3 = 737.86223f4 = 12194.217A1000 = 1.9997numerators = [(2 * pi * f4)**2 * (10**(A1000 / 20.0)), 0., 0., 0., 0.]denominators = convolve([1., +4 * pi * f4, (2 * pi * f4)**2],[1., +4 * pi * f1, (2 * pi * f1)**2])denominators = convolve(convolve(denominators, [1., 2 * pi * f3]),[1., 2 * pi * f2])return bilinear(numerators, denominators, sample_rate)def b_weighting_coeffs_design(sample_rate):"""Returns `b` and `a` coeff of a B-weighting filter.B-Weighting is no longer described in DIN61672.Parameters----------sample_rate : scalarSample rate of the signals that well be filtered.Returns-------b, a : ndarrayFilter coefficients for a digital weighting filter.Examples-------->>> b, a = b_weighting_coeff_design(sample_rate)To Filter a signal use :function: scipy.lfilter:>>> from scipy.signal import lfilter>>> y = lfilter(b, a, x)See Also--------a_weighting_coeffs_design : A-Weighting coefficients.c_weighting_coeffs_design : C-Weighting coefficients.weight_signal : Apply a weighting filter to a signal."""f1 = 20.598997f2 = 158.5f4 = 12194.217B1000 = 0.17numerators = [(2 * pi * f4)**2 * (10**(B1000 / 20)), 0, 0, 0]denominators = convolve([1, +4 * pi * f4, (2 * pi * f4)**2],[1, +4 * pi * f1, (2 * pi * f1)**2])denominators = convolve(denominators, [1, 2 * pi * f2])return bilinear(numerators, denominators, sample_rate)def c_weighting_coeffs_design(sample_rate):"""Returns b and a coeff of a C-weighting filter.Parameters----------sample_rate : scalarSample rate of the signals that well be filtered.Returns-------b, a : ndarrayFilter coefficients for a digital weighting filter.Examples--------b, a = c_weighting_coeffs_design(sample_rate)To Filter a signal use scipy lfilter:from scipy.signal import lfiltery = lfilter(b, a, x)See Also--------a_weighting_coeffs_design : A-Weighting coefficients.b_weighting_coeffs_design : B-Weighting coefficients.weight_signal : Apply a weighting filter to a signal."""f1 = 20.598997f4 = 12194.217C1000 = 0.0619numerators = [(2 * pi * f4)**2 * (10**(C1000 / 20)), 0, 0]denominators = convolve([1, +4 * pi * f4, (2 * pi * f4)**2],[1, +4 * pi * f1, (2 * pi * f1)**2])return bilinear(numerators, denominators, sample_rate)def SPLCal(x):Leng = len(x)pa = sqrt(sum(power(x, 2))/Leng)p0 = 2e-5spl = 20 * log10(pa / p0)return spl    def preprocess_spl(name,spl):"""Main logic for SPL weighting"""n = 1##at = find_recordings(target_folder, audio_targets)at =listdir(target_folder)for f in at:filename = path.join(target_folder, f)x, Fs = load(filename)b, a = c_weighting_coeffs_design(Fs)y = lfilter(b, a, x)out = SPLCal(y)spl.append(out)name.append(f[:-4])print(filename[6:-4]+"     spl:"+str(out))'''print("--- Preprocessing SPLs: " + str(round(n / len(at) * 100, 2)) +"% done. ---\t\t",end='\r\r\r\n\n')'''n += 1    
if __name__ == '__main__':name =[]spl= []preprocess_spl(name,spl)header =['name', 'spl(dbc)']with open('save.csv', 'w') as file:# 2. Create a CSV writermywrite = writer(file)# 3. Write data to the filemywrite.writerow(header)tmp = zip(name,spl)mywrite.writerows(tmp)file.close()

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

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

相关文章

【开源】基于JAVA的天然气工程业务管理系统

项目编号: S 021 ,文末获取源码。 \color{red}{项目编号:S021,文末获取源码。} 项目编号:S021,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四…

手把手教会你--渗透实战--Hack The Box-Starting Point-Meow--持续更新

有什么问题,请尽情问博主,QQ群796141573 前言 前言 请务必跟着博主复现一遍 参考: Hack The Box-Starting Point-Meow

pygame加载图像,并让小球做平抛运动

文章目录 load转换和存储自由落体 在游戏设计中,图像显示是必不可少的功能,pygame中的image模块便用于加载图像。 load 通过load函数,可以加载多种图像格式,如下表所示 旧版本bmp, gpeg, png, pcx, tiff, xpmc, lbm(以及pbm, p…

windows下docker环境搭建与运行实战

背景 学习docker使用,需要环境,今天主要的目标是在windows环境下安装docker环境。 为什么要这么搞,主要是企业内部服务器,都是跟公网隔离的,没有访问公网权限,所以镜像什么的,从公网拉取完全没…

卷积神经网络(Inception-ResNet-v2)交通标志识别

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据 二、构建一个tf.data.Dataset1.加载数据2. 配置数据集 三、构建Inception-ResNet-v2网络1.自己搭建2.官方模型 五、设置动态学习率六、训练模型七、模型评…

rust tokio select!宏详解

rust tokio select!宏详解 简介 本文介绍Tokio中select!的用法,重点是使用过程中可能遇到的问题,比如阻塞问题、优先级问题、cancel safe问题。在Tokio 中,select! 是一个宏,用于同时等待多个异步任务,并在其中任意一…

探索 Vue 中的 bus.$emit:实现组件通信的强大工具

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

运维高级--centos7源码安装Apache

安装必要的依赖项: sudo yum groupinstall "Development Tools" sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel这将安装编译和构建所需的基本工具,以及 Apache HTTP Server 所需的一些依赖项。 下载 Apache HTT…

Pycharm Available Packages显示Noting to show

使用Pycharm安装依赖包时Available packages 页面点击添加按钮后,没有任何包显示,并且无法搜索安装. 在各种网站查看到的方法如下: 1.网络问题,需要添加镜像源 点击Manage Repositories 添加一个可用的镜像源地址即可 2.打开了anaconda(那个绿色圈圈小图标),再点一下把它点…

如何在 Vim 中剪切、复制和粘贴

目录 前言 如何在 Vim 编辑器中复制文本 如何在 Vim 编辑器中剪切文本 如何在 Vim 编辑器中粘贴文本 如何通过选择文本来剪切和复制文本 通过选择文本复制 在 Vim 中选择文本来剪切文本 前言 在本篇 Vim 快速技巧中,你将学习到剪切和复制粘贴的相关知识。 剪…

PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables

PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables pg_stat_all_tables视图中记录有analyze信息,比如何时做的analyze、表元组个数(活元组、死元组)等。重启后发现该视图中表的统计信息重置不见了,发生了什么? 1、p…

HarmonyOS开发者工具DevEco Studio-汉化

HarmonyOS DevEco Studio 简介 下载安装及汉化 打开开发者工具 安装语言包重启 然后设置页搜索“chinese”,选中中文语言包,点击后面的install; 或者 汉化按照IDEA的汉法风格,需要安装插件重启就可以汉化,步骤为&…

在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT

原创/朱季谦 本文分成两部分,包括【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】。 无论是在【国内服务器上搭建chat GPT】和【后端Spring Boot集成chat GPT】,两个方式都需要魔法访问,否则是无法正常使用的,即…

Linux uname命令教程:如何打印linux操作系统名称和硬件的基本信息(附实例教程和注意事项)

Linux uname命令介绍 uname命令是一个在Linux中常用的命令行工具,用于打印有关操作系统名称和系统硬件的基本信息。uname这个名字来源于"UNIX name"。它最常用于确定处理器架构,系统主机名和系统上运行的内核版本。 Linux uname命令适用的Li…

基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目

演示视频: 基于SSM的企业订单跟踪管理系统(有报告)。Javaee项目 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringM…

Python---函数的数据---拆包的应用案例(两个变量值互换,*args, **kwargs调用时传递参数用法)

案例: 使用至少3种方式交换两个变量的值 第一种方式:引入一个临时变量 c1 10 c2 2# 引入临时变量temp temp c2 c2 c1 c1 tempprint(c1, c2) 第二种方式:使用加法与减法运算交换两个变量的值(不需要引入临时变量&#xff09…

python--获取每张切片的不同PEF区间值的百分比

在全直径数字岩心中,如何获取每张切片的不同PEF区间值的百分比? import os import datetime from PIL import Image import numpy as np import csv import easygui as gclass Table(object):def __init__(self, table_data_path):self.table_data_path…

ClickHouse中的物化视图

技术主题 技术原理 物化视图(Materialized View)是一种预先计算并缓存结果的视图,存储在磁盘上自动更新,空间换时间的思路。物化视图是一种优化技术,本质上就是为了加速查询操作,降低系统负载&#xff0c…

5、Qt:项目中包含多个子项目(.pro)/子模块(.pri)

一、说明: 在进行项目开发过程中,会涉及子项目/子模块的问题 Qt中使用TEMPLATE subdirs添加多个子项目;子项目可以单独编译生成可执行文件(exe)或者动态链接库(dll)等,供其他模块…

C#学习-9课时

P11 IF判断(上) P11 IF判断(中 ) bool→true or false; 为:变量赋值 为:等于(判断) !为:≠ 优先级:大于 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin…