我正在执行系统识别测量,并希望将测量系统的响应与测量的响应反卷积。

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

声卡的信号也直接反馈给自身,这使我能够测量pc的响应-> DAC-> ADC->个人电脑响应。

我想把这个“测量链”从整个“系统链”中解卷出来。我可以使用什么方法执行此任务?

#1 楼

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

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

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

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

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

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

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

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

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

第九:反卷积。您的传递函数可以简单地计算为$$ H(\ omega)= \ frac {\ Im \ left \ {m(t)\ right \}} {\ Im \ left \ {y(t)\ right \}} $$
其中$ \ Im \ {\} $表示傅立叶变换。这是直接频谱划分,没有任何零填充或开窗。由于我们正在进行循环相干采集,因此我们也在进行循环反卷积。

该方程式显示了在步骤8中讨论的问题。我们正在除以测得的光谱。除数频谱中任何低能量或高噪声的零或区域都将在最终的传递函数中造成垃圾。在“良好”频率下的结果仍然可以,但是您不能将其用于例如计算脉冲响应。一个简化的版本是仅除以激励信号,即
$$ H(\ omega)= \ frac {\ Im \ left \ {m(t)\ right \}}} {\ Im \ left \ {x(t)\ right \}} $$并选择激励,以使频谱中没有零。但是,这将不允许您对D / A和A / D系统响应进行反卷积,并且还将丢失任何绝对延迟信息。在许多情况下,这实际上是可以接受的,并且许多商业测量系统都可以做到这一点,因此这取决于您的应用。

第十:验证您的测量是否良好。应该执行各种测试:


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