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

在这个例子中,您测量发动机噪音,并使用心理声学指标来模拟其感知响度、尖锐度、波动强度、粗糙度和总体烦扰程度。然后,模拟添加隔音材料,重新计算总体噪音水平。最后,比较恼人程度,并显示应用隔音材料后的感知改善效果。

记录电平校准

心理声学测量使用校准过的麦克风输入电平能产生最准确的结果。要使用校准麦克风将录音电平与声压级计的读数相匹配,可以使用 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.rhkb.cn/news/392874.html

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

相关文章

【LabVIEW学习篇 - 12】:通知器

文章目录 通知器案例一案例二案例三(在不同VI中用同一个通知器) 通知器 同步技术:同步技术用来解决多个并行任务之间的同步或通信问题。 通知器比较适合一对多的操作,类似于广播,一点发出的通知消息, 其它…

Spring Boot 3.3 新特性介绍

1. 引言 Spring Boot 3.1.x 停止维护了,而 3.3.x 作为最新发布的版本,带来了许多新特性和改进。本篇文章将详细介绍这些新特性,并通过样例代码加以解释,帮助开发者更好地掌握和应用这些新功能。 Spring Boot 3.3现已正式发布&…

Android studio配置代码模版

一、背景: 在工作中,总是要写一些重复的代码,特别是项目有相关规范时,就会产生很多模版代码,每次要么复制一份,要么重新写一份新的,很麻烦,于是我就在想,能不能像创建一…

小程序开发入门:第一天的学习和实践指南

目录 一. 理解小程序的基本概念 1. 无需安装 2. 快速启动 3. 界面简洁 4. 独立性和封闭性 5. 数据安全 6. 框架结构 7. 生命周期 8. 全局配置 9. API支持 10. 发布和更新 二、选择合适的开发工具 1. 微信开发者工具 2. Visual Studio Code 3. Sublime Text 4. …

Tensor安装和测试

1: 打开git官方 https://github.com/NVIDIA/TensorRT 2: 下载得到:TensorRT-10.2.0.19.Linux.x86_64-gnu.cuda-11.8.tar.gz 3: 下载后配置环境变量,上面地址记得改成真实地址。 4: 如果想python使用tensorrt,那么 解压后目录&#xff0c…

【HTML入门】第二十三课 - 【实战】做一个简单的图书详情页

这一节,我们继续用纯HTML来做一个实战小案例。 我找了一个图书详情的页面,就像这样: 这一小节,我们用纯HTML标签,来实现一下这个图书详情的内容。 目录 1 布局分析 2 用到的标签 3 实战代码 1 布局分析 我们看这张…

吴恩达机器学习-C1W3L2-逻辑回归之S型函数

可选实验:逻辑回归 在这个不评分的实验中,你会 探索sigmoid函数(也称为logistic函数)探索逻辑回归;哪个用到了s型函数 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_one_addpt_onclick import plt_one_addpt_onclick from l…

Flutter 插件之http(介绍、使用、二次封装)

背景 在我们日常开发过程中,经常会使用到网络请求,而在Flutter插件中,最常用的请求插件一共两个,分别是: 1、dio 2、http 其中dio我已经做过详细介绍了(post、get等请求、文件上传、请求重试等),这里就不做过多阐述,下面附上文章链接,如有需要可前往查看。 http…

如何申请一年期IP地址SSL证书

在数字化的时代,网络安全越来越重要,SSL证书已经成为网站的标配,它承担着保护网站安全的重大作用。一般申请SSL证书都是用域名来申请的,不过当没有域名或者域名无法使用时,就需要使用IP地址来申请SSL证书了&#xff0c…

Cursor搭配cmake实现C++程序的编译、运行和调试

Cursor搭配cmake实现C程序的编译、运行和调试 Cursor是一个开源的AI编程编辑器,开源地址https://github.com/getcursor/cursor ,它其实是一个集成了Chat-GPT的VS Code。 关于VS Code和VS的对比可以参考这篇文章VS Code 和 Visual Studio 哪个更好&…

等保测评中的访问控制与用户认证:构建安全的访问管理机制

在当今数字化时代,信息安全已成为企业和组织不可忽视的关键议题。等保测评,作为我国信息安全等级保护制度的重要组成部分,对访问控制与用户认证提出了严格要求,旨在构建安全的访问管理机制,保护信息资产不受未授权访问…

怎么写进修总结汇报ppt?有这3个AI软件做PPT再也没烦恼!

在当今瞬息万变的职场环境中,持续学习和自我提升已不再是一种选择,而是生存和发展的必需。作为一种系统化的学习方式,进修为职场人士提供了宝贵的机会来更新知识储备、提升专业技能,并拓展职业视野。当然,进修的价值不…

Dreamweaver (DW)2021 下载 安装

将 Dreamweaver 2021 压缩包解压到本地: 点击蓝色字体下载压缩包 提取码 ixsu 鼠标右键 点击 Set-up 选择 以管理员身份运行: 点击 更改位置 可以自定义选择安装路径 也可以选择默认位置 点击 继续: 等待安装 正常等待5分钟左右&#xff1…

12月长沙学术会议:EI检索,机器人、自动化与智能控制方向

在春意盎然、生机勃勃的四月,全球科技界的目光聚焦于中国长沙,这里即将迎来一场科技与智慧碰撞的盛宴——第四届机器人、自动化与智能控制国际会议(ICRAIC 2024)。本次盛会由历史悠久、文化底蕴深厚的湖南第一师范学院荣耀主办&am…

电话营销机器人革新电销行业

第一,减少企业各方面的支出 企业需要各方面的支出。例如,招聘成本和管理成本、员工薪资和社保都是非常大的支出。但AI智能电销机器人,只要购买费用和电话费的一小部分,就没有更多的费用。经计算,该机器人的成本仅相当于…

vector 简单模拟实现

目录 一. vector成员变量 二. vector的构造函数和析构函数 三. vector的成员函数 1. 容量操作函数 扩容操作 (1). finish更新问题 (2). 扩容深浅拷贝问题 resize与尾插、尾删与判空 insert与erase与clear 2. 函数重载 (1). 赋值运算符重载 (2). [ ]重载进行访问 四. …

c++ - unordered_set与unordered_map模拟实现

文章目录 前言一、unordered_set模拟实现二、unordered_map模拟实现 前言 1、unordered_set与unordered_map的介绍与接口使用可参考:unordered_set 、 unordered_map。 2、unordered_set和 unordered_map 的底层实现都是基于哈希表的。哈希表是一种通过哈希函数组织…

LoRa无线通讯,让光伏机器人实现无“线”管理

光伏清洁机器人,作为光伏电站运维的新兴关键设备,已跃升为继组件、支架、光伏逆变器之后的第四大核心组件,正逐步成为光伏电站的标准配置。鉴于光伏电站普遍坐落于偏远无人区或地形复杂之地,光伏清洁机器人必须具备远程操控能力、…

深入源码P3C-PMD:rule (4)

系列文章目录 文章目录 系列文章目录rule 的应用类别 rule rule 自定义XML rule 定义Tree 漫游错误报告生命周期 designer rule相关的代码在每个子 module 的 rule 文件夹。而且也以一些 ruleset 为范围分了文件夹,如下图所示: 对每个 rule 来说&#xf…

PHP教育培训小程序系统源码

🚀【学习新纪元】解锁教育培训小程序的无限可能✨ 📚 引言:教育培训新风尚,小程序来引领! Hey小伙伴们,是不是还在为找不到合适的学习资源而烦恼?或是厌倦了传统教育模式的单调?今…