系统辨识时,我们需要给系统一输入激励,观测系统的输出。一般而言,同步采集输入激励和系统的观测输出为一必要条件。
但是某些场景下,输入激励信号可能不便于同步采集。在这种场景下,由于硬件系统的采样频率与设定采样频率存在一定的误差,非同步采集的输入激励与系统输出信号的相关性大大降低。
下图为非同步采集输入激励与系统输出的相关函数:相关函数峰值不明显,使用这样的输入和输出激励无法辨识出来系统的传递函数
解决这一问题需要对非同步输入激励信号的采样频率进行补偿。其中一种有效方法为对输入激励进行重采样,重采样频率与系统输出信号的采样频率一致。但是系统输出信号的准确采样频率是未知的,我们如何才能做到重采样输入激励与系统输出的采样频率尽量一致呢?一种比较简单的方法是,以最大化重采样输入激励和输出信号相关函数峰值为目标函数,不断尝试各种重采样频率。
例如,假设输入激励的原始采样频率为fs0,系统输出的真实采样频率为fs1,且已知fs0与fs1的误差不大于A(A>0)。为了重采样输入激励至fs1,我们可以重采样输入激励至fs0',fs0'处于【fs0-A ,fs0+A】的范围内。以较为精细的步长不断的重采样输入激励,并计算相关函数峰值。最后选择相关函数峰值最大的fs0'作为输入激励的重采样频率即可。
以下为最优重采样后的输入激励与输出信号的相关函数。相关函数具有明显的峰值。
上述的输入激励为一白噪声,该白噪声使用扬声器播放,输出为麦克风采集到的信号, 扬声器到麦克风的房间脉冲响应(RIR)对应待辨识的系统。使用FIR滤波器描述该系统,使用维纳求解滤波器系数,得到RIR如下图:
上图的估计出来的RIR具有真实RIR的典型特性。
以下为上述方法的matlab 代码链接:
https://github.com/GuochangZhang/system-identify