模拟水声信号失真的数字滤波器

信息处理 过滤器 过滤器设计 声学
2022-02-06 03:22:25

序言:
我正在为我的小型潜艇游戏设计一个声音模型。模型在服务器上运行,我想向客户展示来自他的水听器的单通道 wav 流(20kHz 离散化就足够了,我的目标是 20Hz-10kHz 频段)。我希望这个信号是相对现实的。具体来说,我需要考虑到水消散高频的速度要快得多这一事实。

声音模型:
我计划从它的强度谱中预生成(在一些 RNG 和 IFFT 的帮助下)原始螺旋桨时域声音样本。然后我计划用换档轴转速 x 螺旋桨叶片计数正弦波对其进行幅度调制,以获得螺旋桨节拍。此时我需要在玩家的传感器上实现该信号。它可能涉及两个过滤器:

  • 一些过滤器(即有问题的过滤器)将考虑水耗散信号能量。
  • 带通滤波器,对应于这个特定传感器的灵敏度带。
  • 简单的幅度乘法以考虑范围、传感器方向性等。

根据 RJ Urik“水下声音原理”,在距目标r米的距离上,这种声音的频率 bin f中的频带电平 (dB)可以使用以下公式近似:

[1]:ResultBL = SourceBL - 10 * log10(r * r) - r * F(f)
或没有波前扩展项(这是微不足道的):
[2]:ResultBL = SourceBL - r * F(f)

其中 F(f) 是频率的一些平滑单调函数(具有多个平方频率和常数的大自由基)。

问题(所有关于这个过滤器,或缺乏):

  1. 是否可以为给定范围r设计一个时域数字滤波器,实现\近似信号失真 [2]?
  2. 你会推荐什么类型的过滤器?问题不是实时的,但计算应该很快。我不限于因果过滤器,所以我感觉到非因果 IIR 之类的东西?
  3. 什么算法适用于这个问题。
  4. 如果这种算法涉及传递函数,我应该如何在其中转换\近似 F(f) 项?
  5. 会很快吗?哪些因素会影响它的速度?
  6. 这种滤波器在整个频段(20Hz-10kHz)都能正常工作吗?
  7. 这种滤波器在强度水平变化较大的情况下是否能很好地工作,例如非常弱和非常强的信号?
  8. 这种合成计算成本高吗?

谢谢你。

2个回答

我不会太在意滤波器的精确形状,因为任何真正的无源声纳都会提高接收器的更高频率,并且任何现实的声源水平都将达到 70 年左右,而且很可能是双螺旋,并且取决于方面。空化取决于深度。一个拐角在 10 Hz 左右的单极低通滤波器可能没问题。

保真度是可以成为痴迷的事物之一。存在与水声流动相关的环境噪声和自噪声。较高的频率表现出船体阴影。没有一个频段涵盖所有感兴趣的信号类型。

如果您想变得痴迷,请查看 Mike Porter 的 Ocean Acoustics 网站。

http://oalib.hlsresearch.com/

我偏爱 RAM PE,至少有一个适用于 MATLAB 版本的宽带(窄带分解)演示。

大约 20 年前,有一款视频游戏与一家名为 SONOLYST 的公司合作。他们实际上因《寻找红色十月》电影的音效获得了奥斯卡奖。

我喜欢尤里克。我实际上见过他几次,并从他那里上了一个星期的课,但你可能会发现罗斯更有帮助。

水下噪声力学,Ross, D. isbn={9781483160467},url={ https://books.google.com/books?id=sdwgBQAAQBAJ,2013年,Elsevier Science

除了 Stanley Pawlukiewicz 提出的非常好的观点之外,这确实是一个详细程度的问题,您可能正在寻找“足够好”的近似值。

但是,您可以为您所追求的声音类型设置生成模型,并使用一组参数,您可以改变这些参数来模拟不同的条件。

一般来说,发动机声音是综合脉冲。如果您在怠速时获得摩托车(或汽车)排气的高采样频率(未失真)记录,您将观察到您实际上可以从录音中计算每分钟转数 (RPM)。事实上,即使您将发动机节流到中等转速,您仍然可以获得相当准确的 RPM 计数(对于摩托车),您仍然可以观察到活塞发动机的脉动输出。如果您继续将自行车节流到高转速,脉冲将开始合并,并且转速的确定将非常敏感。如果您正在记录汽车,则此限制将处于较低的 RPM,因为它具有更多的气缸并且每单位时间产生更多的脉冲。

从摩托车或汽车传到你耳朵里的声音是被排气过滤的发动机的脉冲噪音。

喷气发动机吸入空气,将其点燃并通过气体的突然膨胀获得“推动”。这种情况发生得很快,但本质上,你听到的声音被涡轮机周围的“长笛管”过滤掉了。这在脉冲喷气机中非常明显,在仍然具有点火室的早期喷气机中不太明显,在本质上是大“凹槽”的轴向喷气机中更不明显。

水下声音,到达水听器的声音将是通过船体耦合到水的发动机噪音加上螺旋在水中发出的声音的总和。

水中的螺旋桨与空气中的螺旋桨不同,因为水(几乎)是不可压缩的。因此,螺旋桨不会“发出声音”,直到它开始出现气蚀

因此,对于一般的“航运”,您在一定范围内在水中听到的r, 主要是发动机噪声,通过适应平方反比定律降低幅度并过滤

滤波器是发动机与水(通过船体)耦合方式和海水对声音传播“通道”的频率响应的综合效应。

因此,在橡胶缓冲器上装有舷内发动机的木制渔船听起来与休闲舷外发动机工艺不同。舷内发动机“敲击”与水相连的较大表面。它的低频内容将比高频强得多。

现在,海水中的声音传播取决于许多因素,但有些模型可以根据这些因素返回“频率响应”(有关更多信息,请参阅此链接)。

因此,将所有这些放在一起:

  1. 设置脉冲发生器。为您的发动机的每个活塞腔提供一个脉冲。脉冲的幅度与发动机的大小成正比,脉冲的频率与发动机的转速成正比。

  2. 应用“发动机-船体”脉冲响应。这就是一个单一的脉冲在水中的声音。您也许可以从现有录音中分离出一个。

  3. 应用“船体-海”脉冲响应。当单个脉冲通过“水通道”从源头到达水听器时,这就是它的声音。在浅水中,您会得到大量反射,并且根据周围环境,您甚至可能会在直接声音之前听到反射。在深水中,声音可能被困在“通道”中,这意味着在声源和水听器之间的某些位置,您甚至可能无法“听到”声源。它消失了。

  4. 考虑到降低幅度r.

您可以使用有限脉冲响应滤波器或更复杂的数字波导模型。

最好离线执行此操作并在文件之间混合(例如,取决于距离和测深),而不是实时操作生成模型。

希望这可以帮助。