资讯动态

从脉冲响应求解看系统辨识:三种方法、关键细节与实测校验

发布时间:2026/10/13 23:53:10 来源:尧图企业网站定制
做系统调试这些年我有个越来越深的体会与其盯着幅频曲线猜问题不如直接把脉冲响应拉出来看看。幅频特性只告诉你系统哪些频率被放大、哪些被衰减但脉冲响应能告诉你信号经过系统后在时间轴上到底发生了什么——回声从哪来、延迟有多长、振荡什么时候起、衰减是快是慢。有次排查某台设备输出异常频域曲线怎么看都像正常的低通数据也圆滑得挑不出毛病结果把脉冲响应一测主峰后面隔了大约 0.3 秒又冒出一个次峰问题立刻清楚了传输链路里存在反射叠加。这篇文章就接着聊求解系统脉冲响应这件事。我准备把几条确认有效的路线都摊开讲从定义和物理意义说起对比时域直接测、频域反变换、相关法估算这三类做法然后重点讲计算机上离散化求解时容易踩的坑最后给一套从实测数据里抠可靠结果的思路。做信号处理、控制系统调试、设备故障诊断、测量系统标定的朋友应该都能从这里拿到直接能用的东西。1. 脉冲响应到底是什么一个系统的时域指纹1.1 单位冲激信号与系统心电图脉冲响应全称是单位冲激响应记作 h(t)。定义本身很简单系统输入一个单位冲激信号 δ(t)输出端量到的波形就是脉冲响应。这里的关键是理解 δ(t) 到底是个什么东西。它不是一个真实的、能量无限的物理信号而是一个数学上的理想化极限宽度趋近于零、幅度趋近于无穷大、但总面积始终等于 1。实际上没有任何函数发生器能发出真正的 δ(t)工程上能做的就是发出一个足够窄、足够高的脉冲让这个脉冲的持续时间远小于系统的时间尺度。比如我要测一个带宽 100 Hz 的系统那激励脉冲的宽度至少得小于系统最短时间常数的十分之一也就是小于 1 ms否则打进去的不是一个点而是一段宽条测出来的响应会被激励本身的宽度抹平得到的是展宽后的假脉冲响应。把脉冲响应看成系统的心电图是很贴切的类比。就好比医生判断心脏健康不会只看每分钟平均心率而是要看心电图上每个波形的形态、时序、幅度脉冲响应就是系统在时间轴上的完整心电图而频率响应只是这张心电图的某种统计压缩。测量系统时如果只看频响曲线很多时域问题会被平均掉只有把波形拉直了看才能发现异常。1.2 脉冲响应与系统函数的一体两面对线性时不变系统脉冲响应和频率响应互为傅里叶变换对。脉冲响应 h(t) 做傅里叶变换得到传递函数 H(ω)频率响应做逆变换也能还原出 h(t)。这个关系看着简单但工程上的含义很重系统在时域里干净利落还是在拖泥带水取决于它的频谱形状反过来频谱里的隆起和凹陷也一定对应时域里的某些动态过程。我认识的不少同行习惯从传递函数出发做分析模型里一堆零极点画出来很漂亮。但要说诊断问题我更喜欢把 h(t) 求出来看时域波形。零极点只能告诉你系统大概有几个储能环节、特征频率在哪而脉冲响应能直接告诉你系统对瞬态信号的响应速度、过冲幅度、振荡次数、稳定时间这些都是真实产品指标——比如伺服系统的超调量、力传感器的振铃次数、音频设备的多径反射延迟。1.3 为什么脉冲响应特别适合排查瞬态与链路问题一个系统如果只有一个储能环节一阶惯性它的脉冲响应是一条单边衰减指数曲线干净无振荡。一旦出现两个以上的储能环节脉冲响应就可能出现超调和振荡。这种振荡在频域里对应的是谐振峰但频域的峰值高度对阻尼的敏感度远不如时域波形直观。阻尼从 0.7 降到 0.2幅频曲线峰值只抬高约 3 dB看起来还行但脉冲响应的振荡尾巴会从几乎没有变成持续抖动一眼就看得出来。另一个非常有用的场景是链路反射排查。通信链路、射频前端、传感器信号线里阻抗不连续会导致信号反射反射回来再叠加到主信号上。在频域里这种反射表现为波纹状的幅频起伏和周期性的相频弯曲很容易被误判成稍微有点不平坦在时域脉冲响应里它会变成一个清晰的、延迟出现的次峰次峰出现的时间直接对应反射路径的往返时延幅度对应反射系数。我排查某采集卡内部信号串扰问题时就是靠脉冲响应次峰的位置反推出问题点大约在距离主控芯片 60 厘米的走线末端后来检查发现确实是一处无端接的排线导致的。2. 从频率响应跑不通的坑说起三种求解路线的适用边界2.1 时域直接法怎么制造一个足够窄的激励脉冲最朴素的办法是直接给系统注入脉冲激励在输出端记录响应。但工程上做这个直接法时最大的难题就是真实激励脉冲不是理想的 δ(t)它总是有一定宽度。根据我的经验关键判断标准不是脉冲宽度的绝对值而是它和系统响应速度的比值。如果系统的最高关注频率是 f_max那么激励脉冲的宽度应当小于 1/(5 * f_max) 到 1/(10 * f_max)。这样激励的频谱在系统关注的频带内近似平坦才能认为输入是白激励。激励脉冲的形态也有讲究。工程上常用三种形状方波脉冲、高斯脉冲、窄带啁啾脉冲。方波最简单但频谱有严重的零点在零点附近输入能量为零这些频段的反卷积结果会很不稳定高斯脉冲频谱光滑但要注意高斯参数决定了有效带宽窄带啁啾脉冲频谱更平坦适合宽带系统。如果对精度要求高我一般先记录激励信号本身而不是默认它是个理想冲激这样后续数据处理还能做已知输入的反卷积比假设输入为冲激要稳得多。时域直接法的另一个坑是信噪比。脉冲激励的能量全部集中在极短时间窗口内峰值功率受限时总能量反而不如一个持续时间为 T 的扫频信号。所以直接法适合实验室里激励源功率充裕的场景不适合现场在线辨识。一旦现场环境噪声大用纯脉冲激励测出来的响应尾部通常会泡在噪声里基本没法用。2.2 频域法从传递函数逆变换回时域如果系统模型已经建立——比如知道传递函数的解析式、零极点参数或者实测了频响数据——就可以走频域路线对 H(ω) 做傅里叶逆变换得到 h(t)。这里最容易犯的错是直接对一个有限频段的离散频响采样做 IFFT却没做任何频域预处理。实际做的时候要注意频响数据的点数、频段覆盖范围、尾部是否会截断这些都直接影响 IFFT 结果的真实性。如果频响只在 0 到 Fs/2 之间给了一半做 IFFT 前必须先按共轭对称补齐负频率部分否则会得到复数时域序列虚部还不为零让人一头雾水。另外一个容易被忽略的点是频响高频段的斜率。很多系统的频响在测量范围的上限附近还没衰减干净直接截断做 IFFT会得到一个带振铃的脉冲响应——看上去像系统本身有振荡其实只是矩形截断窗在时域里引入的高频旁瓣。改进的办法是对频响加窗最常见的做法是用 Hamming 窗或二阶余弦窗对频响进行平滑截断代价是脉冲响应的时域分辨率略微变差但换来了振荡尾部的干净。我自己在实验室验证一个二阶系统模型时就碰到过这种截断伪影一度以为模型少了个零点后来把频响尾部加窗再反变换振荡立刻消失问题才搞明白。2.3 相关法用伪随机噪声当探针的在线辨识思路第三种思路和前述两种完全不同不需要刻意制造窄脉冲而是用一段持续激励信号——比如伪随机二进制序列PRBS或白噪声——灌进系统然后计算输入输出信号的互相关。核心原理是如果输入 x(t) 的自相关接近 δ(t)那么输入输出互相关 R_{xy}(τ) 就近似等于系统脉冲响应 h(τ) 与输入自相关函数的卷积当输入近似白噪声时R_{xy} ≈ h(τ)。这一招表面上是曲线救国实测里其实非常实用。PRBS 信号在工程上特别好生成只需要移位寄存器反馈电路或直接查表幅度恒定不会超出 DAC 线性范围自相关函数又是理想的三角形脉冲旁瓣极小。用 PRBS 做激励既可以让系统在正常工作点附近被激励而不是被一个大脉冲打到饱和又能获得比单脉冲高得多的信噪比。这一点在现场辨识中特别宝贵实测时系统往往有背景噪声和负载扰动单脉冲能量太弱PRBS 却能持续注入能量让相关峰从噪声里凸显出来。我在某次现场测试中用 500 Hz 采样率、127 位长度的 PRBS 序列激励一台工业过程对象总记录时间约 10 秒。做完互相关后脉冲响应曲线和实验室里用直接法测到的结果形状一致但尾部明显平滑得多这在有工频和机械振动的现场环境里非常有价值。2.4 三种方法的横向对比这里把三条路线放在一张表里方便选型时对照。方法适用场景计算复杂度抗噪能力主要风险时域直接法实验室、激励源功率充裕低弱脉冲宽度不够窄、信噪比差频域逆变换法已有模型或频响实测数据中中频域截断、共轭对称补齐错误相关法PRBS现场在线辨识、有背景噪声中高强PRBS 参数选择不当、记录时间不足选型不是按先进程度而是按手头条件和要解决什么问题。如果只是想快速看一个系统有没有反射次峰直接法 5 分钟就够了如果要在线监控系统状态相关法几乎是唯一现实选择如果有一堆频响数据但没存时域波形那只能走频域逆变换。很多初学者习惯性地认为有模型就一切都好但实测系统的真实模型往往带未知延迟和高阶动态直接拿教材公式反变换很容易翻车。3. 计算机上离散化求解我踩过的四个致命细节3.1 采样率不够混叠会把高频信号伪装成低频一个很常见的场景拿到系统频响数据采样率 Fs 定在 1 kHz系统里面却有个 600 Hz 的谐振峰。如果直接用这个数据做 IFFT600 Hz 的信号会混叠到 400 Hz 的位置时域脉冲响应里凭空多出一个 400 Hz 的振荡成分完全就是假信号。应对办法很直接要么提高采样率要么先对模拟信号做抗混叠滤波。脉冲响应测量对采样率的要求比一般频谱分析更苛刻因为时域分辨率直接由带宽决定而混叠会把带外噪声折回带内。我个人的习惯是把采样率设为系统关注带宽的 5 到 10 倍留出足够余量。如果采集卡的硬件滤波做不到就先确认关注频段在哪再决定要不要加数字滤波。还有一点要注意采样率的名义值和实际值可能不一致。有次我用某采集卡标称 100 kHz 采样结果发现晶振漂移实际采样率偏了 0.3%做脉冲响应时相位随着时间累积偏掉了很大一截。后来做任何准确测量前我都用已知频率的信号先校准采样率这个习惯一直保留到现在。3.2 数据长度与截断泄漏补零并不能算出缺失的信息脉冲响应测量里数据长度 N 决定了两个东西频率分辨率和最大可观测时延。如果系统有较长的时间常数或传输延迟记录时间不够脉冲响应的尾部会被截断FFT 里对应的高频成分就会被泄漏到其他频点造成时域波形的伪振荡。更隐蔽的问题出现在补零操作上。很多资料说 IFFT 前先补零可以提高频率分辨率这个说法不严谨。补零只能让频谱曲线看起来更平滑相当于插值并不能真正增加系统的信息量。如果一个系统有两个靠得很近的极点在频响里有表现为很窄的凹陷补零再怎么做也分辨不出这两个极点——除非真实数据里就已经有足够的信息。我见过有同事为了把曲线画好看把 1024 点数据补到 8192 点结果峰值位置被插值弄得微微偏移而真实的分辨率一点都没提升。正确做法是数据采集时加大 N而不是事后再补零。3.3 FFT 反变换的虚部问题与负频率对称性用实测频响做 IFFT 时最常见的错误是只给了一半频谱数据0 到 Fs/2就强行 IFFT得到一个复数序列时域虚部非零脉冲响应看起来像是复数信号很多初学者在这里卡住。离散傅里叶变换的隐含前提是离散频谱在 0 到 Fs 内是周期重复的实数时域信号对应频谱必须满足共轭对称性——负频率部分是正频率部分的镜像共轭。实测仪器通常只输出 0 到 Fs/2 的正频率数据做 IFFT 前必须手动补齐另一半第 N/21 到第 N-1 个点应该等于第 1 到第 N/2-1 个点的共轭镜像。补齐之后再 IFFT虚部才会小到可以忽略实际由于浮点误差会有一丁点残留正常来说虚部应该在所有样本的 1e-12 量级或更小。如果补齐共轭对称之后虚部仍然很大那就要怀疑输入频响数据的相位是否可靠。相位噪声和通道延迟都可能导致虚部变大。有一个工程技巧检查脉冲响应在 t0 处的能量占总能量的比例。真实物理系统是因果的t0 处应该几乎没有能量如果 t0 处有一大片值说明频响的相位没校准好或者系统本身存在非因果预处理比如某些双零相位滤波器需要先把相位问题解决了再谈脉冲响应。3.4 输入输出同步对齐一个采样点的错位后果脉冲响应测量里时间对齐是最容易被低估的问题。数据采集时激励信号发生器和采集卡如果用的是不同的触发时钟或者模型仿真里输入输出数组没有对齐哪怕只有一个采样点的时序错位脉冲响应的相位也会出现线性失真导致整个波形被扭得不像样子。一个采样点的错位听起来不多但在 Fs1 MHz 的测量里就相当于 1 微秒的时延误差。对于带宽几百 kHz 的系统这个误差足以让本来该是单边衰减的响应出现明显的非因果前驱波。我在某次多通道采集系统联调时就遇到类似现象四个通道同一励信号结果四路脉冲响应形状各异后来一查是其中一路 ADC 的采样时钟启动延迟比别的通道多了 0.8 个采样周期重新配置时钟同步后波形全部重合。工程上怎么避免首先尽量用同一个时钟源驱动激励发生器和采集卡其次记录数据时同时记录激励信号和触发标志处理前先做一次互相关求时延把两路信号对齐实在不行在激励路径上设计一个已知的参考脉冲用它的上升沿作为对齐锚点。4. 实测数据里的脏活儿噪声、激励带宽不足与反卷积病态4.1 多次激励平均与相关累积对付随机噪声的硬办法噪声功率是随机的信号是有规律的。对付随机噪声最好的办法就是重复测量然后平均测 M 次、取平均信噪比提高约 10*log10(M) dB。这个提升虽然朴素但在脉冲响应测量里非常有效因为窄脉冲激励本身信噪比通常差重复激励 64 次就能把噪声压掉 18 dB曲线立刻平滑下来。相关法本质上也是多次累积的思路PRBS 激励期间系统的输出被噪声污染但通过输入输出互相关计算随机噪声和已知 PRBS 序列不相关在长时间累积中会被极大地压制。我在实测中曾经只做了 8 个周期的 PRBS 累积脉冲响应就已经相当干净而同样条件下单脉冲激励的响应尾部几乎完全淹没在 1 V 峰峰值的工频干扰里。另一个参数是激励周期数再增加时计算量线性增长而信噪比提升只按平方根增长所以到 16 个周期以后收益递减现场不必追求无限长的平均。4.2 输入激励带宽不足带外信息永远无法被算出来做频域反卷积或者直接法求解时有一个信息论层面的事实输入的激励在哪段频率没有能量输出就带不来那部分的信息。比如用 50 Hz 到 500 Hz 的扫频信号去激励一个系统那你最多只能可靠地得到 50 Hz 到 500 Hz 之间的脉冲响应500 Hz 以上的信息不是算不出来而是一开始就没被激发。有人试图用外推法从带内的响应猜测带外响应这本质上是在用先验知识做插值。如果系统已知是低阶模型而且带外响应可以外推这种做法勉强可行但工程系统经常有未知的高频谐振或延迟细节外推往往带来错误。正确做法是要么使用带宽足够宽的激励信号要么明确告诉读者本次测量结果有效带宽是多少。我处理过一个电机伺服系统客户只给了 10 Hz 到 100 Hz 的激励数据想让我估算 200 Hz 处的谐振特性我直接告诉对方需要补测高频激励否则只能基于模型假设外推误差没法预估。后来补测了 10 Hz 到 1 kHz 的扫频果然在 230 Hz 附近出现了一个此前从未见过的谐振峰。4.3 反卷积的病态放大当分母接近零时噪声会被放大上千倍频域求解脉冲响应有一个常见操作Y(ω) / X(ω) 得到 H(ω)再反变换时域。理论上没问题工程上却是灾难。原因是实测的 X(ω) 在激励能量较弱的频率处会趋近于零但这里的噪声却不是零。分母趋近于零时除法会把噪声放大到离谱的程度。比如扫频信号在 0 到 50 Hz 内能量很高在 500 Hz 以上几乎为零那么在 600 Hz 处 Y 里的纯噪声除以一个极小的 X得到的 H(600Hz) 可能是真实值的几百倍这个巨大的伪值在 IFFT 后会在时域里表现为高频振荡污染整个脉冲响应。解决病态问题的常规手段是加正则化。工程上最常用的是维纳滤波形式的修正H_est(f) conj(X(f)) * Y(f) / (|X(f)|^2 λ)其中 λ 是一个小的正数作用是防止分母为 0。λ 选太大导致谱被过度平滑脉冲响应变钝选太小噪声放大问题又回来了。我通常先计算输入谱的平均能量取它的 1% 到 5% 作为 λ 的初值然后观察脉冲响应输出的形状如果高频振荡还是明显就逐步加大 λ直到振荡被压掉且主峰宽度没有明显展宽为止。这种正则化方法看起来多了一步但实际效果非常显著。我在处理某加速度传感器校准数据时直接除法得到的脉冲响应尾部全是毛刺脉宽展宽得离谱加了 2% 平均谱能量的正则化后毛刺消失主峰形状和标准值吻合得很好。注意正则化不是万能的它只能压制噪声放大不能恢复没有测到的信息如果输入谱真的在某些频段完全为零那这些频段在结果里就该是缺失状态而不是硬猜。5. 结果校验三板斧如何确定求出来的脉冲响应是可信的5.1 第一板斧卷积还原检验回到时域对账求出一个 h(t) 后最直接的检验方式是把输入信号与 h(t) 做卷积再和实测输出比一比。如果 h(t) 可靠卷积结果应该和实测输出高度吻合如果不吻合问题一定出在求解环节。具体的操作是取一段独立的验证数据注意不能是用于估计的那段把激励信号通过 h(t) 做卷积得到预测输出和实测输出逐点对比计算残差。残差应该落在系统的噪声水平附近。如果残差很大但不能简单地通过多平均解决那就说明模型假设本身有问题——比如系统存在非线性、时变性或者脉冲响应没有覆盖足够的频带。我在某次测试一个带滞回特性的执行器时第一次求出的 h(t) 在卷积还原检验中残差高达 20%刚开始以为是噪声后来发现激励信号幅度不同时响应形状会变化这才意识到系统根本不是线性时不变的用 LTI 工具强行求脉冲响应本来就是错配。5.2 第二板斧频域一致性校验确认没有引入额外失真另一种检验方式是把求出的脉冲响应做 FFT和直接实测的频率响应并排画在一起。理想情况下两者应该完全重合。重点检查三个位置低频段的斜率、谐振峰的幅值和频率、高频段的衰减趋势。如果谐振峰的频率偏移超过一个频率分辨率单元或者幅值差超过 0.5 dB说明反变换或正则化过程对频响引入了扭曲需要回头调整参数。这一步特别适合检查正则化 λ 选得是否合适。λ 过大时脉冲响应变钝FFT 后谐振峰会变矮变宽频响和实测对比一眼就能看出来λ 过小时高频段会翘起也是明显的异常。我通常把这个对比图作为每次脉冲响应测量的标准附件贴在工作记录里方便后续复盘。5.3 第三板斧物理直觉校验排除数学上合理、物理上荒谬的结果最后一道校验也是容易被算法规避的一道用物理直觉审视结果。具体检查三件事因果性对于物理可实现的系统t0 处的响应应该接近零。如果 t0 处有较大能量检查对齐问题和相位校准。峰值时序脉冲响应的主峰位置应该跟系统的信号传播延迟吻合。如果一个测量距离只有 1 米的链路主峰出现在 2 毫秒说明时间基准有问题或同步没做好。能量与衰减脉冲响应的能量应该逐渐衰减不会无限振荡。如果尾部呈现等幅振荡说明系统确实存在极低阻尼的谐振或者你的数据处理引入了虚假振荡。我在做某型滤波器评估时求出的 h(t) 数学上完全自洽卷积还原检验完美、FFT 对比也一致但脉冲响应尾部有一条迟迟不衰减的细微波纹。怎么看怎么别扭后来检查输入信号发现激励信号本身带了一个微小的直流偏置在脉冲响应里表现为一个极低频的尾巴。去掉偏置后尾部立刻变干净。像这样的情况任何数学检验都发现不了只有对物理系统足够熟悉的人才能凭直觉抓出来。把这几板斧都过完脉冲响应才算真正求出来了。我个人做实测的习惯是先快速出一版粗略结果用卷积还原和物理直觉筛掉明显的低级错误再回头调参数精修最后用频域对比做最终确认。这个流程看起来多花了一些时间但能省下更多后来才发现结果错了的返工时间。你在后续遇到具体问题时也不妨从这三步开始卡大概率能少走一半弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑