之前一直想写一篇关于麦克风测量声压级的文章,一直没腾出时间,刚好前段时间有个项目用到了这方面的知识,趁项目结束,把这块的相关知识也总结出来。

大体构思是在一个房间,由点声源发声,然后测量在房间任何一处位置的声压,给出仿真程序。这里面肯定用到 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

这也符合常理,前段时间听到的声音,毕竟在听者脑子里,记忆里留下印象,而且越短印象越深刻。

简单房间麦克风声压级测量仿真程序相关推荐

  1. OpenCASCADE绘制测试线束:简单的向量代数和测量之测量命令

    OpenCASCADE绘制测试线束:简单的向量代数和测量之测量命令 测量命令 pnt pntc 2dpntc pntsu pntcons drseg 2ddrseg mpick mdist 测量命令 ...

  2. OpenCASCADE绘制测试线束:简单的向量代数和测量之矢量代数命令

    OpenCASCADE绘制测试线束:简单的向量代数和测量之矢量代数命令 矢量代数命令 vec 2dvec pln module 2dmodule norm 2dnorm inverse 2dinver ...

  3. 运行时间_一种简单、实用的测量程序运行时间的方法

    点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看嵌入式笔记! 前言 平时我们可能很少去关注程序运行的时间,但是在一些情况下可能需要对程序进行一个整体的复盘.优化. 那么,程序运行的时间就是一个 ...

  4. 虚拟机间延迟测量_简单的类来测量延迟

    虚拟机间延迟测量 这是我编写的用于测量延迟的非常简单的类. HDRHistogram不是劳斯莱斯解决方案,但是如果您只想在项目中添加一个类,那么效果就很好. 这是一个简单的测试程序,向您展示其用法: ...

  5. 一种简单、实用的测量程序运行时间的方法

    前言 平时我们可能很少去关注程序运行的时间,但是在一些情况下可能需要对程序进行一个整体的复盘.优化. 那么,程序运行的时间就是一个可以考虑的方面,可以测一下某些代码块.函数.算法的运行时间,然后整体考 ...

  6. 【matlabpython】飞行器简单状态空间模型微分步长仿真程序参考

    前言 转眼开始写博客已经一年了,这篇本来是寒假前就想发的,谁知一拖就是几个月. 之前老是想在网上找关于飞行器相关的仿真程序,但是一直也没有找到比较经典.合理的.给平时的工作带来了困扰,这部分的代码我也 ...

  7. c语言调用话筒的程序,c – OpenAL:如何创建简单的“麦克风回声”程序?

    一个古老的问题,但这是一个答案.如果我们真的想要简洁,它肯定可以修剪,但这有点不到100条有效线: #include // OpenAL header files #include #include ...

  8. 音视频-噪声分析,使用REW免费软件Room eq wizard做噪声频谱分析 声压级测量 NR NC曲线噪声评价 Leq等效声压级 SEL噪声暴露级 噪声记录

  9. 音频测量常见的校准原理 ADC灵敏度校准 DAC频率响应校准 麦克风校准 Soundcheck软件校准

    这部分简单解释了音频测量里常用的几种校准.这里只讲解基本原理,这本书里其他地方会有操作方法. ADC(模拟数码转换器)(声卡输入通道)灵敏度校准. 如果给声卡输入一个1vrms的正弦波,软件会显示多少 ...

最新文章

  1. H5画布不显示图片的问题解决
  2. Python:一篇文章掌握Numpy的基本用法
  3. java Stream
  4. LifseaOS 悄然来袭,一款为云原生而生的 OS
  5. python爬取考研成绩什么时候出来_用Python爬取了考研吧1000条帖子,原来他们都在讨论这些!...
  6. mysql 注入 update_利用insert,update和delete注入获取数据_MySQL
  7. 关于apppium启动微信,每次都要重新登录的解决方法
  8. HDU-1045 Fire NetFire Net 最大团
  9. 【研发设计】多人开发模式下的Git工作流介绍
  10. TurboCAD Mac Pro 12(CAD设计绘图软件)
  11. SpringBoot入门项目——holleWorld
  12. 【小疯疯】百度云不限速下载
  13. 【2022 CCPC 华为云计算挑战赛】1005 带权子集和 (NTT 优化dp)
  14. [二分][dp凸优化] Luogu P4383 林克卡特树lct
  15. 【Linux网络编程(九)】ping命令 arp工作流程
  16. STL_算法(17)_排列组合 next_permutation() perv_permutation()
  17. 反恐24小时[第1季]——我打赌这是我第一次写观后感
  18. 2021.10.20市场行情煤炭股集体跳水!
  19. 关于使用Xstream转换java对象时遇到的错误
  20. 15.说说你对slot的理解?slot使用场景有哪些?

热门文章

  1. 材料数据科学:描述符和机器学习
  2. 永久免费H5直播点播播放器SkeyeWebPlayer.js实现webrtc流播放
  3. leetcode 在本地IDE debug调试TreeNode树相关算法代码
  4. 记一次faiss安装
  5. 荣耀magicbook笔记本如何重装win10系统教程
  6. 互联网不需要新的APP,APP创业的黄金时代已经过去
  7. 壁纸小程序源码-WordPress开发暗黑系列流量主收益高清壁纸
  8. SVN错误:local unversioned, incoming file add upon update
  9. 电子电路设计基本概念100问(一)【学习目标:原理图、PCB、阻抗设计、电子设计基本原则、基本原器件等】
  10. 参数寻优问题详细解析