声音响度、声压级计权(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.hqwc.cn/news/221637.html

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

相关文章

C语言WFC绘制矩形

代码实现: void CCGDrawingView::Rectangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, COLORREF color,CDC* pDC) {CPen redPen(PS_SOLID, 1, color);CBrush redBursh(color);CPen* pOldPen pDC->SelectObject(&redPen);CBrush* p…

【运营思维】美团面试题:如何把梳子卖给寺庙和尚?

Hello 小米的小伙伴们~ 欢迎来到小米的微信公众号!今天小米要和大家分享一道美团运营面试题,题目可真是独特——“如何把梳子卖给寺庙和尚?”想必大家一定兴奋不已吧! 首先,让我们理清思路,挑战这个看似不…

【阿里云】图像识别 智能分类识别 增加网络控制功能点(三)

一、增加网络控制功能 实现需求TCP 心跳机制解决Soket异常断开问题 二、Linux内核提供了通过sysctl命令查看和配置TCP KeepAlive参数的方法。 查看当前系统的TCP KeepAlive参数修改TCP KeepAlive参数 三、C语言实现TCP KeepAlive功能 四、setsockopt用于设置套接字选项的系…

Python实现定时任务的方案及其比较

目录 一、引言 二、基于time模块的定时任务 三、基于schedule库的定时任务 四、基于APScheduler库的定时任务 五、基于Celery库的定时任务 七、总结与比较 一、引言 在Python中,定时任务指的是在特定的时间间隔或者特定的时间点自动执行某些操作的任务。定时…

浅谈安科瑞ASJ继电器在马尔代夫环岛水上排屋的应用

摘要:对电气线路进行接地故障保护,方式接地故障电流引起的设备和电气火灾事故越来越成为日常所需。针对用户侧主要的用能节点,设计安装剩余电流继电器,实时监控各用能回路的剩余电流状态。通过实时监控用能以及相关电力参数、提高…

Java基于springboot+vue开发服装商城小程序

演示视频: 小程序 https://www.bilibili.com/video/BV1rM411o7m4/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 管理员 https://www.bilibili.com/video/BV1fc411D7V3/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae…

ChatGPT进阶:提示工程的神秘面纱与实战指南

文章目录 一、提示工程的概念与原理二、提示工程的实践方法三、提示工程的挑战与展望四、实战案例分析总结《ChatGPT进阶:提示工程入门》内容简介作者简介陈颢鹏:李子菡: 目录获取方式 在人工智能领域,对话系统已经成为了一个热门…

深入理解 Docker 核心原理:Namespace、Cgroups 和 Rootfs

来自:探索云原生 https://www.lixueduan.com 原文:https://www.lixueduan.com/posts/docker/03-container-core/ 通过这篇文章你可以了解到 Docker 容器的核心实现原理,包括 Namespace、Cgroups、Rootfs 等三个核心功能。 后续文章会演示如…

go对rabbitmq基本操作

一、安装rabbitmq 1、直接使用docker拉取镜像 docker pull rabbitmq:3.82、启动容器 docker run \-e RABBITMQ_DEFAULT_USERadmin \-e RABBITMQ_DEFAULT_PASS123456 \-v mq-plugins:/plugins \--name rabbit01 \--hostname rabbit01 --restartalways \-p 15672:15672 \-p 5672:…

安全风险综合监测预警平台建设指南(2023 版)》正式发布,汉威科技方案领跑行业

11月24日,国务院安委会办公室印发《城市安全风险综合监测预警平台建设指南(2023版)》(以下简称“指南”),引发行业密切关注。 据悉,“指南”在总结前期18 个试点城市(区)…

工作流能实现自动化吗?应该用什么工具?

研究显示,CRM系统工作流自动化软件不仅能简化冗余的工作且不需要监控和指导就能提高员工的工作效率。企业需要工作流自动化软件吗?答案是肯定的,工作流自动化的好处有哪些? 为什么企业需要工作流自动化软件 每家企业都希望降本增…

Walrus 0.4发布:单一配置、多态运行,体验下一代应用交付模型

今天,我们高兴地宣布云原生统一应用平台 Walrus 0.4 正式发布,这是一个里程碑式的版本更新。新版本采用了全新的应用模型——仅需进行单一配置,即可在多种模态的基础设施及环境中运行包括应用服务及周边依赖资源在内的完整应用系统。“You bu…