从系统响应中解卷积测量系统

信息处理 系统识别 测量
2022-01-10 05:41:25

我正在执行系统识别测量,并希望从测量响应中解卷积测量系统的响应。

系统设置如下;信号在 PC 上生成,然后将信号发送到声卡,声卡又将信号转发到功率放大器,从而驱动扬声器。扬声器传播由麦克风捕获的声能,然后返回声卡。记录的信号然后由计算机处理。

来自声卡的信号也直接反馈给自己,这让我可以测量 pc -> DAC -> ADC -> pc 响应的响应。

我想把这个“测量链”从整个“系统链”中解卷积出来。我可以使用哪些方法来完成这项任务?

1个回答

很抱歉回答冗长,但是很难进行良好的声学测量。以下是涉及的一些步骤(在某些时候,我们实际上会直接回答您的问题)。

首先,您必须确保您正在测量的系统是实际的线性和时间不变的(否则您无法反卷积)。如果您使用常规声卡驱动程序,这在 PC 上可能会很棘手。这些将通过 Windows Kernel Mixer 路由任何信号,Windows Kernel Mixer 经常应用采样率转换并以不确定的方式及时拉动缓冲区。我强烈建议绕过内核混合器。

其次,您需要确定系统脉冲的长度。一个好的估计是您正在测量的房间的混响时间。选择2的幂最方便;对于大多数房间,这将是 16384 或 32768,采样率为 44.1kHz 或 48kHz。

第三,创建该长度的周期性激励。这可以是对数扫描或(更好)伪随机噪声。应选择噪声频谱,以便您在感兴趣的频率范围内获得大致恒定的信噪比。这取决于传递函数和背景噪声频谱。如果您还不知道其中任何一个,粉红色是一个好的开始。我们称这个信号的一个周期为 x[n]。

第四,连接系统,使 D/A 的左声道进入扬声器和 A/D 的左声道。将麦克风连接到 A/D 的右声道。

第五,开始激发(循环它或创建一个包含许多重复噪声信号的波形文件)。仔细监控所有电平:确保 A/D 位于削波以下约 10 dB。确保麦克风前置放大器低于削波约 10 dB。确保功率放大器没有削波并且扬声器没有过度驱动。

第六,确保房间尽可能安静。关闭门窗。用风扇关闭大多数东西,包括任何 HVAC 系统。将所有其他人逐出场所。如果有任何接地回路,请根据需要使用隔离变压器和接地升降机。检查噪音的一个好方法是将耳机放大器连接到麦克风输出并通过耳机收听。您可以听到的任何噪音、嗡嗡声或其他伪影也会出现在测量中。

第七,做实际采集。在激励信号运行的情况下采集 12 个周期。目视检查结果是否有异常(间隙、缺少零件、丢失等)。把前两个时期扔掉。计算其他 10 个的平均值。让我们称左声道 y[n](声卡)和右声道 m[n](麦克风)。

第八,计算y[n]的傅里叶变换。这应该是相当平坦的,没有零点或能量非常低的区域。这可能不是这种情况,因为大多数声卡都有交流耦合输入,即有一些高通滤波器并且直流值可能非常低。同样,也可能有一个抗混叠滤波器,因此您可能再次在非常高的频率下具有低能量或只有噪声。如果你能手动解决这个问题(通过添加少量宽带能量),那就去做吧。如果频谱在感兴趣的频率区域非常平坦,您可以简单地用适当延迟的单位脉冲替换它。如果这些都不起作用,事情就会变得更加复杂。

第九:去卷积。您的传递函数可以简单地计算为 其中表示傅里叶变换。这是没有任何零填充或加窗的直接频谱划分。由于我们正在进行循环相干采集,因此我们也在进行循环反卷积。

H(ω)={m(t)}{y(t)}
{}

该等式显示了第 8 步中讨论的问题。我们除以测量的光谱。除数频谱中的任何零点或低能量或高噪声区域都将导致生成的传递函数中出现垃圾。“好”频率的结果仍然可以,但您不能使用它来计算脉冲响应等。一个简化的版本是只除以激励信号,即

H(ω)={m(t)}{x(t)}
并选择激发,使光谱中没有零点。但是,这将不允许您对 D/A 和 A/D 系统响应进行反卷积,并且还会丢失任何绝对延迟信息。在许多情况下,这实际上是可以接受的,许多商业测量系统就是这样做的,所以这取决于您的应用程序。

第十:验证你的测量是否良好。应进行各种测试:

  1. 测量几次并确保结果相同。
  2. 在扬声器静音的情况下进行测量。这将为您提供对背景噪声频谱的良好估计。根据经验,您需要在所有感兴趣的频率上至少有 10 dB 的信噪比。
  3. 线性测试:用一半的激励增益进行测量,并确认得到的传递函数是相同的。
  4. 一个有用的内联噪声测试如下:取 10 个周期并在每个周期 2 个周期内平均 5 次,然后对 2*N 个样本进行傅里叶变换。如果您的信号没有噪声,那么所有奇数箱都应该为零。您可以直接将任意频率的信噪比估计为 X{2*N+1}/X{2*N}