本文是作者投稿到“21dB声学人”公众号的文章,现经有允许转载到自己的博客,技术交流可以联系593170280@qq.com
随着当今汽车行业“五大趋势”,即“轻量化、电气化、智能化、网络化、共享”,汽车发动机气缸的数量不断减少,甚至传统的内燃机直接被电动机取代。因此,通过优化包括进气和排气系统在内的机械系统,开发品牌特有的发动机声音更加困难。为了保持发动机声音的独特性,使用主动发声控制设计汽车引擎声是最有效的方法之一。主动发声控制是一项复杂的跨学科技术,涉及汽车声学、电子声学、音乐声学、声音信号处理等不同学科的知识。
目前,主动发声控制的方法可以分为两大类:基于样本的方法和基于程序的方法。
基于样本的方法需要对真实汽车的引擎声样本进行录制、处理、合成和重放。这类方法需要采集汽车在不同工况(例如不同发动机转数(RPM)、油门负载和档位)下的引擎声样本。在合成引擎声时,首先取出当前汽车的工况所对应的样本,再进行适当的调音处理,最后使用重叠相加法 (Overlap-and-add) 进行拼接。这种方法主要用于赛车游戏[1]和一些先进的高保真驾驶模拟器[2]。这类方法实现起来相对简单,需要进行参数调试以降低谐波不连续带来的伪影,达到最优的听觉效果,文献[3]中提出了一种谐波同步的重叠相加法,可以显著降低声音的不自然度,图1展示了该方法的实现过程。基于样本的方法由于对真实汽车进行声音录制,可以模拟特定车型的引擎声,因此可以模拟出超级跑车的引擎声。然而,这类方法需要大量的汽车声音样本,而且声音设计受到真实汽车样本音色的限制。

基于程序的合成方法将研究重心放在了引擎声的发声机理上。这类方法模拟了引擎声从发动机产生,再经过气缸及排气系统的整个物理过程。其中,用正弦波模拟激励源信号,用各类滤波器模拟气缸及排气系统。这类方法对真实汽车的引擎声进行时频分析以获取发动机声音的工作状态和谐波特性用以指导滤波器参数的设置。基于程序的合成方法较为复杂,需要对汽车引擎声的发声机理有深入的理解。这类方法的优势在于不需要大量的实录汽车声音样本,并且在音色的设计上更加灵活。文献[4]中对四冲程发动机的点火和活塞运动的物理过程进行了建模,作为引擎声的声源。接着,使用两条增益可调的延时器组成的数字波导模拟排气系统的共振过程。图2展示了一个基于程序的引擎声合成方法示意图。

在合成出想要的引擎声音色之后,需要根据不同的工况实时改变引擎声的参数。具体表现在根据不同的车速控制引擎声的频率,根据不同的油门负载控制引擎声的声压级大小。文献[5]中为了模拟动态驾驶过程中的场景,计算了一个与传统发动机转速相对应的虚拟发动机转速,建立了车速与虚拟发动机转速之间的关系。
R
P
M
V
=
43.75
×
V
+
750
RPM_V=43.75\times V+750
RPMV=43.75×V+750
公式中车速的限制为0-120公里/时。主要出于以下两点考虑(1)在车速超过120公里/时的情况下,风声将成为车内声音的主导因素。(2)大部分情况下车速都小于120公里/时。
为了模拟出加速的感觉,需要根据油门负载控制引擎声的声压级大小,即油门负载越大,引擎声的声压级也应该响应增大。文献。。中的声压级的增益系数被设计为8.5 dB(A)/100%。在实际工程应用中,增益系数和虚拟发动机转速的公式系数需要根据不同的车型进行微调,以达到最理想的听觉效果。
合成出汽车引擎之后,需要使用车内扬声器系统进行重放。由于汽车引擎声存在大量的低频成分,因此对扬声器系统的低频响应要求非常高。文献[5]中介绍了一个整车引擎声合成系统的实例,研究发现车内扬声器系统的频率响应特性在引擎声合成系统中起着重要作用。因此,需要对车内扬声器系统进行设计,使得在听众的双耳位置处获得平坦和稳定的频响曲线。此外,一些扬声器均衡以及空间均衡的数字信号处理算法也可以用于补偿车内扬声器系统带来的失真。具体的均衡算法将在以后的文章进行介绍。
评价引擎声的心理声学指标有响度(loudness)、锐度(sharpness)、粗糙程度(roughness)。当然,最后必不可少的是进行主观测听并且反复进行参数调试,达到最佳的听觉效果。通过上面的介绍,希望大家能够早日“调教”出自己喜欢的引擎声。
关键词:
汽车引擎声合成、主动发声控制
参考文献:
[1] COLLINS K. Game sound: an introduction to the history, theory, and practice of video game music and sound design[M]. Mit Press, 2008.
[2] HEITBRINK D A, CABLE S. Design of a driving simulation sound engine[C]//Driving Simulation Conference, North America 2007 (DSC-NA 2007) Ford Motor CompanyNational Highway Traffic Safety AdministrationUniversity of Iowa, Iowa CityTransportation Research Board. 2007.
[3] JAGLA J, MAILLARD J, MARTIN N. Sample-based engine noise synthesis using an enhanced pitch-synchronous overlap-and-add method[J]. The Journal of the Acoustical Society of America, 2012, 132(5): 3098-3108.
[4] BALDAN S, LACHAMBRE H, DELLE MONACHE S, 等. Physically informed car engine sound synthesis for virtual and augmented environments[C]//2015 IEEE 2nd VR Workshop on Sonic Interactions for Virtual Environments (SIVE). IEEE, 2015: 1-6.
[5] CAO Y, HOU H, LIU Y, 等. Engine Order Sound Simulation by Active Sound Generation for Electric Vehicles[J]. SAE International Journal of Vehicle Dynamics, Stability, and NVH, 2020, 4(10-04-02-0011): 151-164.
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我想为我的Rails网络应用程序提供推荐功能。特别是,我想向新注册的用户推荐他可能想要关注的其他用户。Rails中是否有用于此目的的引擎/gem?如果没有,我应该从哪里开始构建它?谢谢。 最佳答案 有Coletivogemhttps://github.com/diogenes/coletivo我试了一下。在MySQL上运行。Neo4jhttp://neo4j.org真的很容易实现一个“跟随谁”。事实上,大多数展示其能力的样本都涉及“跟随谁”。快速提示-只有在JRuby上运行时,Neo4j.rb才会很酷。如果不是-使用Neograph
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
随着ruby被引入为新的编程救世主,我想知道是否有人基于易用性、运行所需的资源、可用性和易定制性而有偏好。两者有更好的吗? 最佳答案 好吧,任何基于Rails的社交网络应用程序的比较都应该包括insoshi(http://portal.insoshi.com/)。话虽这么说,这三个都非常相似,区别在于实现细节。Lovd和Insoshi都是完整的Rails应用程序;它旨在供您将它们用作入门工具包,并使用您自己的自定义功能对其进行扩展。另一方面,CommunityEngine是一个Rails插件。这意味着您可以更轻松地向现有Rail
一般来说,我是Middleman和ruby的新手。我已经安装了Ruby我已经安装了Middleman和gem以使其运行。我需要使用slim而不是默认的模板系统。所以我安装了Slimgem。Slim的网站只说我需要'slim'才能让它工作。中间人网站说我只需要在config.rb文件中添加模板引擎,但是没有给出例子...对于没有ruby背景的人来说,这没有帮助。我在git上找了几个config.rb,它们都有:require'slim'和#Setslim-langoutputstyleSlim::Engine.set_default_options:pretty=>true#Se
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion是否有适用于这些的3d游戏引擎?
我有一个Rails3引擎。在初始化程序中,它需要来自某个文件夹的一堆文件。在这个文件中,我引擎的用户定义了代码、业务逻辑、配置引擎等。所有这些数据都静态存储在我的引擎主模块中(在应用程序属性中)moduleMyEngineclass我希望在开发模式下根据每个请求重新加载这些文件。(这样用户就不必重新加载服务器来查看他刚刚所做的更改)当然我可以做这样的事情而不是初始化config.to_preparedoMyEngine.application.clear!load('some/file')end但是这样我会遇到问题(因为这个文件中定义的常量不会真正被重新加载)。理想的解决方案是让我的整