简单房间麦克风声压级测量仿真程序
之前一直想写一篇关于麦克风测量声压级的文章,一直没腾出时间,刚好前段时间有个项目用到了这方面的知识,趁项目结束,把这块的相关知识也总结出来。
大体构思是在一个房间,由点声源发声,然后测量在房间任何一处位置的声压,给出仿真程序。这里面肯定用到 RIR(房间冲击响应),模拟声传输路径、声压级的计算这三大部分。
1、房间冲激响应和T60
房间冲击响应函数还是使用德国老牌的方法,镜面法
https://www.audiolabs-erlangen.de/fau/professor/habets/software/rir-generator
c = 340; % Sound velocity (m/s)
fs = 16000; % Sample frequency (samples/s)
r = MicPos; % Receiver position [x y z] (m)
s = SpeakerPos; % Source position [x y z] (m)
Rdim = [L W H]; % Room dimensions [x y z] (m)
%吸声系数
alpha = 0.3;
rc = 1 - alpha;
beta = rc *ones(1,6);
h = rir_generator(c, fs, r, s, Rdim, beta, n);
其中beta是 两种输入方式,单个数据,就是混响时间,如果是 1行6列向量,就可以单独设定 房间六个面的 反射系数
clean_signal = audioread('test.wav');
reverb_signal = fftfilt(h,clean_signal);
audiowrite('test_reverb.wav',reverb,fs);
一段声音经过声传输路径衰减且增加了混响,效果如下:
注意,这还只是1个点声源结果,另外也没有任何附加噪声
T60时间简单,直接借助工具计算即可
%计算体积
V = L*W*H;
%计算表面积
S = 2*(L*W + W*H + H*L);
T60 = 0.161*V/(alpha*S);
2、Matlab绘图模拟声传输路径
借助Matlab中的shape,可以很方便的画出房间,电声源和mic的模拟位置
这是直达声,反射声比较麻烦,尤其是多次反射,我这里为了方便只处理单次反射
首先找到speaker声源点对某个墙面镜像
MirrorPos = [2*L - SpeakerPos(1),SpeakerPos(2),SpeakerPos(3)];
下图绿点是speaker关于右侧墙面的对称点
借助下列程序,求空间直线和平面的交叉点
交叉点记为黄色
https://www.mathworks.com/matlabcentral/fileexchange/17751-straight-line-and-plane-intersection
连线,画出箭头,隐藏掉虚镜像点
由此画出6个(单次)反射情况:
各反射路径和衰减情况,可能有所不同,再加上直达声,合并造成了混响场的效果
3、声压级计算
假设speaker电声源的声压是80dBSPL,求麦克风处的声压,这个我们根据信号的rms值,直接可以算出来了
首先根据相关标准,需要产生A-weighting滤波器,由下面的程序产生
https://www.mathworks.com/matlabcentral/fileexchange/64231-calibratevoicespl?s_tid=srchtitle
%产生 A-weighting filter
[b,a] = adsgn(fs);
[h,w] = freqz(b,a,1024);
semilogx(w/pi,20*log10(abs(h)));
和真实的曲线比较:
http://www.larsondavis.com/support/sound-measurement-terminology
简单的相加和就能算出 mic位置点的声压
4、一些扩展说明
真正的声压的计算方法,应该在标准 iec_61672 中,专门对声压的描述 Sound level meters - Part 1: Specifications
根据Matlab参考的一些资料,https://www.mathworks.com/help/audio/ref/splmeter-system-object.html
以及github 中的py相关资料 https://github.com/python-acoustics/python-acoustics/blob/master/acoustics/standards/iec_61672_1_2013.py
大概有以下几种声压级:
frequency-weighted sound levels Lf ?
fast or slow time-weighted sound levels Lt
equivalent-continuous sound levels(等效连续声压级) Leq
peak sound levels Lp
maximum sound levels Lmax
重点说两个:
a、等效连续声压级,感觉是积分且平均
b、time-weighted sound levels 感觉曲线会实时变化,是声压级设备使用的?【待考证】,分成fast和slow两种
定义为 y(经过权重) 和冲击响应的 卷积,涉及到 指数函数求积分
真实用到声级计上有三种:
http://www.intecconinc.com/index.php/productos?format=raw&task=download&fid=24
35ms 125ms,还有1s对应下面的 τ (tao)
py给出的常数:
上面 的指数函数
负无穷,t一般从0开始,所以负半轴不用考虑,exp函数,在 tx =0 时最小,在tx = t的时候接近1,那么也就是对时间的一种加权
越远离时间,权重越低,越近越高
类似于遗忘曲线,https://zhuanlan.zhihu.com/p/274352214
https://zhuanlan.zhihu.com/p/274352214
这也符合常理,前段时间听到的声音,毕竟在听者脑子里,记忆里留下印象,而且越短印象越深刻。
简单房间麦克风声压级测量仿真程序相关推荐
- OpenCASCADE绘制测试线束:简单的向量代数和测量之测量命令
OpenCASCADE绘制测试线束:简单的向量代数和测量之测量命令 测量命令 pnt pntc 2dpntc pntsu pntcons drseg 2ddrseg mpick mdist 测量命令 ...
- OpenCASCADE绘制测试线束:简单的向量代数和测量之矢量代数命令
OpenCASCADE绘制测试线束:简单的向量代数和测量之矢量代数命令 矢量代数命令 vec 2dvec pln module 2dmodule norm 2dnorm inverse 2dinver ...
- 运行时间_一种简单、实用的测量程序运行时间的方法
点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看嵌入式笔记! 前言 平时我们可能很少去关注程序运行的时间,但是在一些情况下可能需要对程序进行一个整体的复盘.优化. 那么,程序运行的时间就是一个 ...
- 虚拟机间延迟测量_简单的类来测量延迟
虚拟机间延迟测量 这是我编写的用于测量延迟的非常简单的类. HDRHistogram不是劳斯莱斯解决方案,但是如果您只想在项目中添加一个类,那么效果就很好. 这是一个简单的测试程序,向您展示其用法: ...
- 一种简单、实用的测量程序运行时间的方法
前言 平时我们可能很少去关注程序运行的时间,但是在一些情况下可能需要对程序进行一个整体的复盘.优化. 那么,程序运行的时间就是一个可以考虑的方面,可以测一下某些代码块.函数.算法的运行时间,然后整体考 ...
- 【matlabpython】飞行器简单状态空间模型微分步长仿真程序参考
前言 转眼开始写博客已经一年了,这篇本来是寒假前就想发的,谁知一拖就是几个月. 之前老是想在网上找关于飞行器相关的仿真程序,但是一直也没有找到比较经典.合理的.给平时的工作带来了困扰,这部分的代码我也 ...
- c语言调用话筒的程序,c – OpenAL:如何创建简单的“麦克风回声”程序?
一个古老的问题,但这是一个答案.如果我们真的想要简洁,它肯定可以修剪,但这有点不到100条有效线: #include // OpenAL header files #include #include ...
- 音视频-噪声分析,使用REW免费软件Room eq wizard做噪声频谱分析 声压级测量 NR NC曲线噪声评价 Leq等效声压级 SEL噪声暴露级 噪声记录
- 音频测量常见的校准原理 ADC灵敏度校准 DAC频率响应校准 麦克风校准 Soundcheck软件校准
这部分简单解释了音频测量里常用的几种校准.这里只讲解基本原理,这本书里其他地方会有操作方法. ADC(模拟数码转换器)(声卡输入通道)灵敏度校准. 如果给声卡输入一个1vrms的正弦波,软件会显示多少 ...
最新文章
- H5画布不显示图片的问题解决
- Python:一篇文章掌握Numpy的基本用法
- java Stream
- LifseaOS 悄然来袭,一款为云原生而生的 OS
- python爬取考研成绩什么时候出来_用Python爬取了考研吧1000条帖子,原来他们都在讨论这些!...
- mysql 注入 update_利用insert,update和delete注入获取数据_MySQL
- 关于apppium启动微信,每次都要重新登录的解决方法
- HDU-1045 Fire NetFire Net 最大团
- 【研发设计】多人开发模式下的Git工作流介绍
- TurboCAD Mac Pro 12(CAD设计绘图软件)
- SpringBoot入门项目——holleWorld
- 【小疯疯】百度云不限速下载
- 【2022 CCPC 华为云计算挑战赛】1005 带权子集和 (NTT 优化dp)
- [二分][dp凸优化] Luogu P4383 林克卡特树lct
- 【Linux网络编程(九)】ping命令 arp工作流程
- STL_算法(17)_排列组合 next_permutation() perv_permutation()
- 反恐24小时[第1季]——我打赌这是我第一次写观后感
- 2021.10.20市场行情煤炭股集体跳水!
- 关于使用Xstream转换java对象时遇到的错误
- 15.说说你对slot的理解?slot使用场景有哪些?
热门文章
- 材料数据科学:描述符和机器学习
- 永久免费H5直播点播播放器SkeyeWebPlayer.js实现webrtc流播放
- leetcode 在本地IDE debug调试TreeNode树相关算法代码
- 记一次faiss安装
- 荣耀magicbook笔记本如何重装win10系统教程
- 互联网不需要新的APP,APP创业的黄金时代已经过去
- 壁纸小程序源码-WordPress开发暗黑系列流量主收益高清壁纸
- SVN错误:local unversioned, incoming file add upon update
- 电子电路设计基本概念100问(一)【学习目标:原理图、PCB、阻抗设计、电子设计基本原则、基本原器件等】
- 参数寻优问题详细解析