在时间信号上使用 A 加权

问题描述

我现在试图解决这个问题几个星期,但似乎我无法解决这个问题。任务非常简单:我从麦克风获得电压信号,最后我想知道那里的 dB(A) 有多大。 有很多问题我什至不知道从哪里开始。让我们从我的想法开始。

  1. 我正在将电压信号转换为以帕斯卡 [Pa] 为单位的信号。
  2. 对该信号使用 FFT,以便我知道我正在处理哪些频率。
  3. 然后我应该以某种方式实现 A 权重,但是由于我在 [Pa] 中处理我的值,我不能只是乘以或添加我的 A 权重。
  4. 使用 iFFT 并返回到我的时间信号。
  5. 从 Pa 到 dB。
  6. 计算 RMS 并完成。 (希望如此)

主要问题是 A 加权。我真的不知道如何在实时信号上实现它?而且由于 FFT 导致复数值,因此我也有点困惑。

也许你了解了想法/问题/工作流程,并帮助我至少离目标更近了一点。

一点免责声明,我对声学世界 100% 是新手,所以请务必像解释小孩子一样解释它:D 和我用 python 编程。

提前感谢您的时间!

解决方法

你好 Christian Fichtelberg,欢迎来到 StackOveflow。我相信在 DSP StackExchange 中可以更轻松地回答您的问题,但我会尝试提供一些快速而肮脏的答案。

为了避免将信号带到频域,请在那里进行乘法(我敦促您注意时域中的卷积 - 您发出信号“驻留”的地方 - 等效于频域中的乘法。如果对此不熟悉的请快速浏览 Wikipedia's convolution page) 您可以在时域中实现 A-Weighting 滤波器并在那里执行某种卷积。

我不会详细介绍每种方法(时域卷积与频域乘法)的可能优缺点。您可以搜索 DSP SE 或查看有关 DSP 的一些教科书(例如 Oppenheim's Digital Signal Processingan equivalent book by Proakis and Manolakis)。

根据IEC 61672-1:2013数字滤波器应该从模拟滤波器“转换”出来(这样做的一个好方法是使用双线性变换)。建议的滤波器是一个非常“简单”的 IIR(无限脉冲响应)滤波器。

我将跳过此处的实现,因为它已由其他人提供。请找到一个MATLAB implementation、一个Python implementation(很可能是您正在为您的应用程序寻找的)、一个相当“高级”的answer on DSP SE,带有一些链接和information on designing filters for arbitrary sample rates on DSP SE

最后,我想提一下,如果您设法创建一个(“足够平滑”)多项式近似于 A 加权滤波器的曲线,您可能会执行频率响应和多项式的频域乘法仅更改频谱的幅度,然后执行 iFFT 以返回时域。这应该最有可能提供 A 加权信号的近似值。请注意,这不是进行过滤的正确方法,因此请谨慎对待(如果您决定尝试一下),并且仅作为执行某些检查的快速解决方案。