第三节 传感器模型基础

做仿真脚本这么多年,我越来越觉得——传感器模型是整个仿真体系的基石。你想想看,模型建得不对,后面跑出来的数据全是垃圾。今天咱们就聊聊传感器模型的几个核心概念:数学模型、传递函数、噪声模型,还有线性与非线性特性。

一、传感器数学模型

说白了,数学模型就是用数学公式来描述传感器的行为。我习惯把传感器看作一个黑盒子,输入是物理量,输出是电信号。

最基本的传感器数学模型长这样:

y(t) = f(x(t)) + n(t)

其中:

  • y(t) — 传感器输出信号
  • x(t) — 被测物理量输入
  • f(·) — 传感器的转换函数
  • n(t) — 噪声项

我在项目中遇到过一种情况:温度传感器的输出明明是线性的,但实际采集到的数据却飘得厉害。后来一查,是数学模型里没考虑温度漂移补偿项。嗯,这里要注意——实际建模时,千万别忽略环境因素的影响。

二、传递函数

传递函数是描述传感器动态特性的利器。它反映了传感器对输入信号的响应能力。

对于线性时不变系统,传递函数定义为:

H(s) = Y(s) / X(s)

其中 s = jω 是复频率。

举个例子,一阶低通传感器的传递函数:

H(s) = K / (τs + 1)

这里 K 是静态增益,τ 是时间常数。

我的小技巧: 在仿真脚本里,我习惯用 scipy.signal 库来构建传递函数。比如:
from scipy import signal
num = [K]
den = [tau, 1]
sys = signal.TransferFunction(num, den)
这样后面做时域响应分析就方便多了。

为什么会这样?因为传递函数能帮你预测传感器在不同频率下的表现。低频信号能顺利通过,高频信号会被衰减——这就是传感器的带宽限制。

三、噪声模型

做仿真的人都知道,没有噪声的传感器是不存在的。我刚开始做仿真时,总把传感器当成理想器件,结果仿真数据和实测数据对不上,被领导批了一顿。

常见的传感器噪声模型包括:

噪声类型 特性 仿真模型
白噪声 功率谱密度恒定 np.random.normal(0, σ)
1/f 噪声 低频段功率大 粉红噪声生成算法
量化噪声 ADC量化误差 round(y / Δ) * Δ
突发噪声 随机脉冲干扰 泊松过程模拟
避坑指南: 我曾经在仿真一个压力传感器时,只加了白噪声,结果实际测试时发现低频漂移特别严重。后来才意识到,真实传感器的1/f噪声才是低频段的主要干扰源。所以,噪声模型一定要根据实际应用场景来选,别偷懒。

四、线性与非线性特性

线性传感器,输入输出关系是一条直线。数学上表示为:

y = Kx + b

但现实世界哪有那么多理想情况?非线性才是常态。

常见的非线性类型:

  • 饱和特性 — 输入超过一定范围后,输出不再变化
  • 死区特性 — 小信号输入时,传感器没反应
  • 迟滞特性 — 上升和下降路径不一致
  • 非线性曲线 — 比如热电偶的平方关系

我个人习惯在仿真脚本里用分段线性函数来近似非线性特性。举个例子:

def sensor_model(x):
    if x < 0.1:
        return 0  # 死区
    elif x > 5.0:
        return 5.0  # 饱和
    else:
        return 0.95 * x + 0.05  # 线性区

你想想看,如果仿真时不考虑这些非线性,那你的控制算法在真实系统上很可能直接崩掉。

核心要点: 传感器建模时,先确定线性工作区,再在边界处加上非线性修正。这样既保证了仿真精度,又不会让模型过于复杂。

知识体系总览

下面这张图是我自己整理的传感器模型知识结构,方便你快速把握本章内容:

传感器模型基础 数学模型 y(t) = f(x(t)) + n(t) 输入-输出映射关系 传递函数 H(s) = Y(s) / X(s) 动态响应特性 噪声模型 白噪声 / 1/f / 量化 真实环境模拟 线性与非线性 饱和 / 死区 / 迟滞 非线性修正策略 仿真脚本实现 Python / MATLAB 参数标定与验证

这张图把传感器模型分成了五个模块。我个人建议你从数学模型入手,先搞清楚输入输出关系,再逐步加入传递函数和噪声模型,最后处理非线性问题。这样循序渐进,不容易乱。

好了,传感器模型基础就聊到这儿。记住一句话:模型是仿真的灵魂,建好模型,后面的路就好走了。

可可精品资料库