MATLAB计算心理声学烦恼度例子

news2024/11/13 21:22:17

本例中,通过检测发动机噪音,并结合心理声学参数,评估了其响度、尖锐度、波动强度、粗糙度及整体心理声学烦恼度。接着,模拟了隔音材料的添加,并对噪音水平进行了重新评估。比较分析后,展示了隔音材料对降低噪音感知烦恼度的效果。(详情Effect of Soundproofing on Perceived Noise Levels)

记录电平校准

心理声学测量使用校准过的麦克风输入电平能产生最准确的结果。要使用校准麦克风将录音电平与声压级计的读数相匹配,可以使用 1 kHz 音源(如在线音源或手机应用程序)和校准的声压级计。1 kHz 校准音的声压级应足够响亮,足以盖过任何背景噪声。有关使用 MATLAB 作为 1 kHz 音源的校准示例,请参阅校准麦克风。

模拟音调录音并加入一些背景噪音。假设声压计读数为 83.1 dB(C 加权)。

FS = 48e3;
t = (1:2*FS)/FS;
s = rng("default");
testTone = 0.46*sin(2*pi*t*1000).' + .1*pinknoise(2*FS);
rng(s)
splMeterReading = 83.1;

要计算录音链的校准电平,请调用 calibrateMicrophone 并指定测试音、采样率、声压级读数和声压级计的频率加权。为了补偿可能的背景噪声并产生精确的校准电平,请匹配声压级计的频率加权设置。

calib = calibrateMicrophone(testTone,FS,splMeterReading,FrequencyWeighting="C-weighting");

声压级 (SPL)

有了录音链的校准因子后,就可以进行声学测量了。使用物理测量仪时,您只能使用测量时选择的设置。使用 splMeter 对象,您可以在录音完成后更改设置。这样就可以轻松尝试不同的时间和频率加权选项。

加载引擎记录并创建相应的时间矢量。

[x,FS] = audioread("Engine-16-44p1-stereo-20sec.wav");
x = x(1:8*FS,1); % use only channel 1 and keep only 8 seconds.
t = (1:size(x,1))/FS;

创建一个 splMeter 对象,选择 C 计权、快速时间计权和 0.2 秒间隔峰值声压级测量。

spl = splMeter(CalibrationFactor=calib, ...
               FrequencyWeighting="C-weighting", ...
               TimeWeighting="Fast", ...
               TimeInterval=0.2, ...
               SampleRate=FS);

绘制声压级和峰值声压级图。

[LCF,~,LCpeak] = spl(x);
plot(t,LCpeak,t,LCF)
legend("LCpeak","LCF",Location="southeast")
title("SPL Measurement of Engine Noise")
xlabel("Time (seconds)")
ylabel("SPL (dB)")
ylim([70 95])
grid on

心理声学指标

响度级别

监测声压级对于遵守职业安全规定非常重要。声压级测量的是听力正常(无听力障碍)的人所感知的响度。声学响度功能还能显示哪些频段对响度的感知贡献最大。

使用与之前相同的校准电平,并假设是自由声场录音(默认值),绘制静态响度图。

acousticLoudness(x,FS,calib)

响度为 23.8 sone,大部分噪音低于 3.3(bark)。使用 bark2hz 将 3.3 Bark 转换为 Hz

fprintf("Loudness frequency of 3.3 Bark: %d Hz\n",round(bark2hz(3.3),-1));

3.3 Bark 的响度频率:330 赫兹

acousticLoudness 函数以音调为单位返回感知响度。要理解音调测量值,可将其与声压级(dB)读数进行比较。响度为 60 音的信号被认为与以 60 dB SPL 测量的 1 kHz 音一样响亮。使用 sone2phon 将 23.8  sones 转换为 phons 表明,发动机噪音的响度感知与在 86 dB SPL 下测量的 1 kHz 音调一样响亮。

fprintf("Equivalent 1 kHz SPL: %d phons\n",round(sone2phon(23.8)));

等效 1 kHz 声压级:86 phons

在对数刻度上用单位phons和频率Hz绘制自己的曲线图。

[sone,spec] = acousticLoudness(x,FS,calib);
barks = 0.1:0.1:24; % Bark scale for ISO 532-1 loudness
hz = bark2hz(barks);
specPhon = sone2phon(spec);
semilogx(hz,specPhon)
title("Specific Loudness")
subtitle(sprintf("Loudness = %.1f phons",sone2phon(sone)))
xlabel("Frequency (Hz)")
ylabel("Loudness (phons/Bark)")
xlim(hz([1,end]))
grid on

您还可以绘制随时间变化的响度和特定响度,以分析发动机声音是否随时间变化。这可以与其他相关的时变数据一起显示,例如发动机每分钟转速 (RPM)。在这种情况下,噪声是静止的,但您可以观察到噪声的脉冲性质。

acousticLoudness(x,FS,calib,TimeVarying=true,TimeResolution="high")

绘制特定响度与频率(赫兹)的关系图(对数刻度)。

[tvsoneHD,tvspecHD,perc] = acousticLoudness(x,FS,calib,TimeVarying=true,TimeResolution="high");
tvspec = tvspecHD(1:4:end,:,:); % for standard resolution measurements
spectimeHD = 0:5e-4:5e-4*(size(tvspecHD,1)-1); % time axis for loudness output
clf; % do not reuse the previous subplot
surf(spectimeHD,hz,sone2phon(tvspecHD).',EdgeColor="interp");
set(gca,View=[0 90],YScale="log",YLim=hz([1,end]));
title("Specific Loudness (HD)")
zlabel("Specific Loudness (phons/Bark)")
ylabel("Frequency (Hz)")
xlabel("Time (seconds)")
colorbar

尖锐度级别

声音的尖锐感会极大地影响声音的整体烦扰程度。使用 acousticSharpness 函数可以估算出声音信号的尖锐程度。

sharp = acousticSharpness(spec)
sharp = 1.1512

粉红噪声的尖锐度为 2 acums。这意味着发动机噪音偏向低频。

绘制随时间变化的尖锐度。

acousticSharpness(x,FS,calib,TimeVarying=true);

波动度

在发动机噪音的情况下,低频调制会导致感知到的恼人程度。首先,查看信号中存在哪些调制频率。

N = 2^nextpow2(size(x,1));
xa = abs(x); % Use the rectified signal
pspectrum(xa-mean(xa),FS,FrequencyLimits=[0 80],FrequencyResolution=1)
title("Modulation Frequencies")

调制频率的峰值为 24.9 赫兹。低于 30 赫兹时,调制主要表现为波动。在 49.7 赫兹处有第二个峰值,处于粗糙度范围内。

使用 acousticFluctuation 计算可感知的波动强度。在这段录音中,发动机噪音相对恒定,因此我们让算法自动检测最易听到的波动频率 (fMod)。

acousticFluctuation(x,FS,calib)

用赫兹而不是bark来解释结果。为减少计算量,可重复使用之前计算的随时间变化的特定响度。或者,您也可以指定您感兴趣的调制频率。

[vacil,spec,fMod] = acousticFluctuation(tvspec,ModulationFrequency=24.9);
clf; % do not reuse previous subplot
flucHz = bark2hz(0.5:0.5:23.5);
spectime = 0:2e-3:2e-3*(size(spec,1)-1);
surf(spectime,flucHz,spec.',EdgeColor="interp");
set(gca,View=[0 90],YScale="log",YLim=flucHz([1,end]));
title("Specific Fluctuation Strength")
zlabel("Specific Fluctuation Strength (vacils/Bark)")
ylabel("Frequency (Hz)")
xlabel("Time (seconds)")
colorbar
Roughness

使用 acousticRoughness 函数计算信号的可感知粗糙度。让算法自动检测最易听到的调制频率 (fMod)。

acousticRoughness(x,FS,calib)

用赫兹而不是bark来解释结果。为减少计算量,可重复使用之前计算的随时间变化的特定响度。指定调制频率。

[asper,specR,fModR] = acousticRoughness(tvspecHD,ModulationFrequency=49.7);
clf; % do not reuse previous subplot
rougHz = bark2hz(0.5:0.5:23.5);
surf(spectimeHD,rougHz,specR.',EdgeColor="interp");
set(gca,View=[0 90],YScale="log",YLim=rougHz([1,end]));
title("Specific Roughness")
zlabel("Specific Roughness (aspers/Bark)")
ylabel("Frequency (Hz)")
xlabel("Time (seconds)")
colorbar

音调

发动机噪声的另一个可感知属性是音调,包括音调与其他噪声之间的比率。绘制信号的音调噪声比,其中包括带有突出指示器等信息的数据点。音调指标不需要校准因子。

acousticToneToNoiseRatio(x,FS)

此外,还显示随时间变化的突出比。点击曲线图可获得该时间和频率的详细信息。

acousticProminenceRatio(x,FS,TimeVarying=true)

sound quality

对于整体音质评价,将前面的指标结合起来,就能得出心理声学烦扰指标。其关系如下 :

PA=N(1+\sqrt{|g1(S)|^2+|g2(F,R)|^2})

利用心理声学实验的结果进行了量化描述:

PA=N_{5}(1+\sqrt{\omega _{S}^2+\omega _{FR}^2})

N 5 :百分位数响度(仅有 5%的时间超过该水平)

\omega _{S}=(S-1.75)*(0.25*log_{10}(N_{5}+10))

其中S>1.75,S 为尖锐度,单位为 acum

\omega _{FR}=\frac{2.18}{N_{5}^{0.4}}(0.4*F+0.6*R)

其中,F 是以 vacil 为单位的波动强度,R 是以 asper 为单位的粗糙度

在本例中,尖锐度小于 1.75,因此不是影响因素,因此可以将\omega _{S}设置为零

当 TimeVarying(时间变化)设置为 true 时,acousticLoudness(声学响度)的第三个输出将返回第二个值 N5。

N5 = perc(2);

计算忽略信号第一秒的平均波动强度。

f = mean(vacil(501:end,1));

计算忽略第一秒信号的平均粗糙度。

r = mean(asper(2001:end,1));

计算 Zwicker 的心理声学烦扰度量。

pa = N5 * (1 + abs(2.18/(N5^.4)*(.4*f+.6*r)))
pa = 26.3402

对于飞机或发动机等带有音调成分的噪声,S. R. More 对这一指标进行了改进,将音调也包括在内 :

PAT=N_{5}*(1+\sqrt{\gamma_{0}+\gamma_{1}\omega _{S}^{2}+\gamma_{2}\omega _{FR}^{2}+\gamma_{3}\omega _{T}^{2}})

其中:

\omega_{T}^{2}=(1-e^{\gamma_{4}N_{5}})*(1-e^{\gamma_{5}K_{5}})

\gamma_{0}=-0.16,\gamma_{1}=11.48,\gamma_{2}=0.84,\gamma_{3}=1.25,\gamma_{4}=0.29,\gamma_{5}=5.49

在这种情况下,在标准规定的范围内(89.1 至 11200 Hz),没有任何音调被标记为 "突出",因此可以使用 PA 的等式(无音调)。

改善隔音效果

测量改进隔音后对测量声压级和感知噪声的影响

使用图形均衡器滤波器组进行模拟

设计一个 graphicEQ 对象来模拟拟议隔音设备的衰减。低频较难衰减,因此我们创建的模型最好在 200 赫兹以上。

geq = graphicEQ(Bandwidth="1 octave",SampleRate=FS,Gains=[-0.5 -1.25 -3.4 -7 -8.25 -8.4 -8 -7 -6.4 -5.6]);
cf = getCenterFrequencies(splMeter(Bandwidth="1 octave"));

显示 graphicEQ 对象的频率响应。

[B,A] = coeffs(geq);
sos = [B;A].';
[H,w] = freqz(sos,2^16,FS);
semilogx(w,db(abs(H)))
title("Frequency Response of Soundproofing Simulation Filter")
ylabel("Relative SPL (dB)")
xlabel("Frequency (Hz)")
xlim(cf([1,end]))
grid on

使用图形均衡器对发动机录音进行滤波,以模拟隔音效果。

x2 = geq(x);

比较使用和不使用隔音材料时的声压级。重复使用相同的声压级计设置,但使用经过过滤的录音。

reset(spl)
[LCFnew,~,LCpeaknew] = spl(x2);
plot(t,LCpeak,t,LCF,t,LCpeaknew,t,LCFnew)
legend("LCpeak (original)", ...
       "LCF (original)", ...
       "LCpeak (with soundproofing)", ...
       "LCF (with soundproofing)", ...
       Location="southeast")
title("SPL Measurement of Engine Noise")
xlabel("Time (seconds)")
ylabel("SPL (dB)")
ylim([70 95])
grid on

比较隔音前后的感知响度测量结果。

acousticLoudness(x2,FS,calib)

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

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

相关文章

【学习笔记】Matlab和python双语言的学习(动态规划)

文章目录 前言一、动态规划动态规划的基本步骤示例1示例2 三、代码实现----Matlab1.示例12.示例2 四、代码实现----python1.示例12.示例2 总结 前言 通过模型算法,熟练对Matlab和python的应用。 学习视频链接: https://www.bilibili.com/video/BV1EK411…

Spring AOP 原理——代理模式

目录 一、代理模式 1.1 静态代理 1.2 动态代理 1.2.1 JDK动态代理 1.2.2 CGLIB动态代理 Spring AOP 是基于动态代理来实现AOP的。 一、代理模式 代理模式, 也叫委托模式。该模式是为其他对象提供⼀种代理以控制对这个对象的访问。它的作用就是通过提供一个代理类&#…

50 mysql 的 “where 1 = 1“ 的优化处理

前言 问题是来自于 chinaunix 问题 ”mysql查询后面加 where 1 1 影响效率吗?” mysql 中在 java 代码中我们经常会使用到 ”where 1 1 and username ‘jerry’ ” 之类的条件 然后 我们这里 来看一下 “where 1 1” 的相关处理 where 条件在 select_lex, QUP_shared…

RPC Dubbo面试题汇总

文章目录 RPCRPC 是什么?RPC的原理是什么?有哪些常见的 RPC 框架?RPC和HTTP的区别 Dubbo什么是Dubbo?为什么要用Dubbo?Dubbo 的核心组件?Dubbo 支持哪些序列化方式呢?Dubbo 集群提供了哪些负载均衡策略?D…

Java中等题-交错字符串(力扣)

给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串 &#xff1a; s s1 s2 ... snt t1 t2 ... tm|n - m| < 1交错 是…

批发行业进销存-手持打单机办理会员 源码CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、手持终端办理会员必备条件 1.手持机的有点可以打印单据开单 2.手持通过接口将数据传到进销存 3.需要支持刷卡&#xff0c;感应身份证&#xff0c;各种卡 4.考虑到网络和工厂&#xff0c;向下无网络环境&#xff0c;数据需要放本地 二、会员办理界面代码 <form id&…

集合练习专题

第一题 public static void main(String[] args) {ArrayList arrayList new ArrayList<>();arrayList.add(new News(" 新冠确诊病例超千万&#xff0c;数百万印度教信徒赴恒河\"圣浴\"引民众担忧"));arrayList.add(new News("男子突然想起2个…

EasyExcel-读Excel-不创建对象的读-合并单元格的处理

EasyExcel官方文档 这几天需要读取excel的内容&#xff0c;但是excel中存在多个sheet页&#xff0c;每个sheet页的标题不同&#xff0c;数据不同&#xff0c;而且多个excel文件。决定使用easyexcel处理&#xff0c;但是感觉无法使用对象接收exceld的数据&#xff0c;所以决定使…

使用 Node.js 模拟执行 JavaScript

准备工作 正确安装好 Node.js ,安装好之后&#xff0c;能正常使用 node 和 npm 两个命令 模拟执行 关于案例分析 写文章-CSDN创作中心 这里就不做分析了&#xff0c;直接使用 我们的目的是&#xff1a; 使用 node.js 加载 Crypto 库&#xff0c; 并执行 getToken 方法 …

Linux驱动开发基础(LED驱动)

所学来自百问网 目录 1. LED原理 2. 普适的GPIO引脚操作方法 2.1 GPIO模块的一般结构 2.2 GPIO框图 2.3 寄存器的操作 2.3.1 一般的操作方式 2.3.2 高效的操作方式 3. 基于IMX6UL_6ULL的GPIO操作方法 3.1 GPIO框图 3.2 CCM 3.3 IOMUXC 3.4 GPIO模块内部 3.5 读写…

软件评审-需求评审、设计评审、编码评审、测试评审(原件)

1.需求规格说明评审报告 2.系统设计评审报告 3.编码与测试评审报告 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0…

工业大数据来自哪里?大数据技术如何助力制造企业数字化转型?

信息技术的迅猛发展正在重塑我们的世界&#xff0c;不仅改变了技术本身&#xff0c;也深刻影响了全球市场和人们的工作与生活方式。在工业生产这一关键领域&#xff0c;高性价比、长续航的微型传感器的诞生&#xff0c;以及物联网等新一代网络技术的兴起&#xff0c;正赋予无数…

【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)

文章目录 字符函数字符输入输出函数字符输入函数字符输出函数 字符分类函数字符转换函数 字符串函数字符串输入输出函数字符串输入函数字符串输出函数 strlen函数的使用和模拟实现strcpy函数的使用和模拟实现strcat函数的使用和模拟实现strcmp函数的使用和模拟实现strncpy函数的…

Python基于TensorFlow实现卷积神经网络-双向长短时记忆循环神经网络分类模型(CNN-BiLSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着人工智能技术的快速发展&#xff0c;深度学习已经成为处理复杂数据集的关键工具之一。其中&#x…

【Kubernetes】k8s集群资源调度

目录 一、k8s的List-Watch机制 二、scheduler的调度过程 三、指定节点调度Pod 1.通过nodeName调度Pod 2.通过节点标签选择器调度Pod 3.通过亲和性调度Pod 1&#xff09;节点亲和性 2&#xff09;Pod 亲和性 四、污点(Taint) 和 容忍(Tolerations) 1.污点(Taint) 2.…

靶机:DC-2

一、信息收集 1、主机发现 nmap 192.168.236.0/24 2、端口扫描 nmap 192.168.236.130 -p- -A 二、漏洞探测 访问192.168.236.130&#xff0c;URL重定向&#xff0c;在本地hosts文件中添加192.168.236.130 dc-2 在flag1中提示cewl工具&#xff0c;kali自带&#xff0c;把密码…

进阶SpringBoot之 Web 静态资源导入

idea 创建一个 web 项目 新建 controller 包下 Java 类&#xff0c;用来查验地址是否能成功运行 package com.demo.web.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;RestControl…

如何在linux系统上部署nginx

1&#xff09;首先去 nginx.org/download 官网下载你所需要的版本 我这里是下载的 nginx-1-23-3.tar.gz 2&#xff09;然后执行 yum -y install lrzsz 安装文件上传软件 执行 rz 选择你下载nginx的位置进行上传 yum -y install lrzsz 3&#xff09;执行 tar -zxvf nginx-1.23…

《RT-DETR》论文笔记

原文出处 [2304.08069] DETRs Beat YOLOs on Real-time Object Detection (arxiv.org)https://arxiv.org/abs/2304.08069 原文笔记 What DETRs Beat YOLOs on Real-time Object Detection 1、设计了一种高效的混合编码器&#xff0c;通过解耦尺度内交互和跨尺度融合来提高…

保障速度与安全合规的前提下,如何传文件到国外?

伴随着经济全球化&#xff0c;数据跨境活动日益频繁&#xff0c;数据出境场景越来越多&#xff0c;防范数据出境安全风险&#xff0c;保障数据依法有序自由流动成为我国关注的重要方面。涉及数据出海的行业多种多样&#xff0c;像跨国运营、全球研发、金融服务等领域的企业都涉…