随机过程与平稳随机过程:从概念到工程判断实战

发布时间:2026/9/18 5:24:21
随机过程与平稳随机过程:从概念到工程判断实战
做信号处理这几年我越来越觉得“随机过程”和“平稳随机过程”这两个概念被讲得太玄了。前阵子帮一个硬件团队排查传感器零漂采集到的电压信号白天稳定、夜里漂噪声特性还随温度变化。你试着用均值、方差去描述它结果上午算一套参数下午又变了——这恰恰说明一个随机变量根本不够用你面对的是一个随时间演化的随机过程。很多教材一上来就是集合、测度、分布族把不少初学者挡在门外。我自己当年学的时候也很懵直到后来做通信信号分析和数据处理才发现这些概念本质上都在回答同一个问题一个在时间上连续变化的随机现象到底该用什么方式去看清它、描述它、预测它。这篇文章按我认为最实用的顺序把随机过程的基本概念和平稳随机过程重新过一遍。适合刚学这门课的学生也适合工作中遇到波形数据、噪声数据、但不知道怎么建模的工程师。后面不会只有定义我会结合一个“传感器电压信号”的案例把怎么判断一个过程是不是平稳、判断完又能做什么串起来讲清楚。1. 从随机变量到随机过程到底引入了什么新东西1.1 一个随机变量只能回答“某个时刻的不确定性”如果要描述抛一枚硬币一个随机变量就够了正面记为1反面记为0它有一个概率分布。但如果要描述一台设备连续十天的故障次数、一个信道连续一小时的信噪比、一个传感器从开机到热稳定这一整段的读数一个随机变量就不够用了。每个瞬间都有自己的随机变量X(1)、X(2)……一直到X(t)这一整串随机变量合在一起才算描述了一个随机现象在时间上的演化。这就是随机过程的基本思想把“一个随机变量”升级成“一族按时间参数索引的随机变量”。写成数学符号就是{X(t), t∈T}其中T是参数集。T可以是离散的时间点比如每秒钟采样一次也可以是连续的区间比如任意时刻t都有定义。这一步看起来只是把单个数变成一串数但后面所有复杂的定义都从这里长出来。打个比方随机变量像一张照片定格了某个时刻的随机性随机过程像一部电影每一帧都是一张照片并且帧与帧之间还有剧情关联。只看单帧永远无法理解剧情走向必须把整部影片的帧序列当成一个整体去研究。1.2 两个入门过程白噪声与随机游走理解随机过程最快的方式是看两个极端例子白噪声和随机游走。白噪声大概是“最没记忆”的随机过程。每个时刻的值都独立地从一个分布里抽出来t时刻和t1时刻之间没有任何关联。真实系统里很难有理想白噪声但量化噪声、热噪声在工程带宽内经常被近似成白噪声。随机游走则是“最有记忆”的典型每一步都在前一步的基础上加一个随机增量所以它的当前位置包含了此前所有步骤的累积效果。股票价格的随机游走模型、粒子在液体中的布朗运动本质上都是这种结构。数学上写出来就是S(t)S(t-1)ε(t)其中ε(t)是独立同分布的噪声。我在实际项目里常用一段简单的Python模拟来体会两者的区别。代码不长import numpy as np import matplotlib.pyplot as plt np.random.seed(42) n 200 noise np.random.randn(n) # 白噪声每个点独立 walk np.cumsum(np.random.randn(n)) # 随机游走累积增量 plt.figure(figsize(10, 4)) plt.subplot(1, 2, 1) plt.plot(noise) plt.title(White Noise) plt.subplot(1, 2, 2) plt.plot(walk) plt.title(Random Walk) plt.show()跑完之后你会看到白噪声那条曲线在零附近无规律地抖动而随机游走会长时间朝一个方向漂移、偶尔掉头看着就不“稳”。这种视觉差异其实就是后面要讲的“平稳性”差异在第一印象上的体现。真正把它量化靠的是均值、方差、自相关这些统计量而不是肉眼看曲线。2. 基本概念四件套样本函数、状态空间、参数集、有限维分布族2.1 用“平行世界”理解样本函数与状态空间教材里定义随机过程时通常会说它是一个定义在概率空间上的、取值于某个状态空间的函数族。听着绕实际上可以这样想同样一个传感器在完全相同的条件下重复开机一百次每次记录到的电压曲线都不完全一样。每一条记录下来的曲线就是一个样本函数也叫一条轨道、一次实现。所有可能的实现合在一起才是随机过程本身。状态空间是什么就是每一个时刻上可能取到的所有值的集合。比如电压值被限制在0到5V之间状态空间就可以视为[0,5]某产品每个月的故障次数是自然数状态空间就是{0,1,2,…}。参数集则回答“这个随机过程定义在哪个时间范围上”是离散时刻、连续区间还是从负无穷到正无穷都行。这四个要素——概率空间、参数集、状态空间、样本函数——共同决定了一个随机过程的“硬件配置”。我见过不少同学把“随机过程”和“样本函数”混为一谈。其实随机过程是“所有平行世界里可能曲线的整体”而样本函数只是其中被抛出来的那一条。对一个实际系统来说你能观测到的通常只有一条样本函数但理论分析时必须想象它背后还有无穷多条没被观测到的曲线。2.2 有限维分布族过程的“完整身份证”光知道状态空间和参数集还不够一个随机过程真正“完整”的数字描述是它所有有限维联合分布组成的集合。对任意有限个时间点t1,t2,…,tn这n个时刻的随机变量X(t1),X(t2),…,X(tn)的联合分布就是过程的一个有限维分布。为什么非要把“所有”有限维分布都拿出来因为随机过程刻画的是“一族随机变量之间的关系”。只看单个时刻的边缘分布根本看不出t1和t2是正相关还是负相关、是独立还是强耦合。只有当任意有限组合的联合分布都已知过程才算被完整刻画。这个说法初看抽象但它其实是“一个随机变量用分布函数描述”的自然推广一维随机变量需要分布函数n维随机向量需要联合分布函数随机过程就需要整个有限维分布族。举个再直白点的例子。一个人各科考试成绩的平均分是80如果只知道平均分你无法判断他是每科都稳定在80附近还是数学满分、英语不及格。有限维分布族就相当于把每科成绩、每两科之间的相关性、甚至任意组合的联合信息全部记录下来这才算“完整认识”了这个随机过程。2.3 四种常见分类先记住一张表根据参数集和状态空间离散还是连续可以画一个2×2的分类初学阶段先记住这张表后面学具体模型时就不会迷路。参数集状态空间典型例子离散时间离散状态每天的天气状态序列、服务台每小时的顾客数离散时间连续状态每天收盘的股价、每帧图像的噪声电平连续时间离散状态电话交换机的呼叫次数、电子设备故障事件点过程连续时间连续状态传感器电压波形、无线信道的衰落过程这几类在后续建模中差别很大。离散时间离散状态适合用马尔可夫链那套工具连续时间连续状态则更常碰到平稳性、功率谱密度这些概念。本文聊的平稳随机过程主要就是在连续时间连续状态、以及离散时间连续状态这两个区间上展开。3. 严格平稳与宽平稳差在哪、怎么选3.1 严格平稳所有统计量都和时间原点无关“平稳”的直觉很简单把时间轴平移一段过程的统计特性不变。也就是说拿到一段序列无论你从第100个点开始看还是从第1000个点开始看均值、方差、高阶矩、自相关、任意有限维联合分布全都一样。这种定义叫严格平稳strict-sense stationarySSS它要求非常强所有阶的统计性质都不随时间原点改变。严格平稳在实际中很难验证。因为你手里只有一条或有限的几条样本数据能可靠估计到二阶矩就已经不错了三阶四阶矩的估计方差大得吓人。更别提“所有有限维分布”这种无法从有限数据里完全证实的东西。所以工程上几乎不会去验证严格平稳只会在一些已知的理论模型里使用它比如平稳白噪声通过线性时不变系统到达稳态之后的输出在特定条件下可以是严格平稳的。3.2 宽平稳一阶矩、二阶矩稳住就够了宽平稳wide-sense stationaryWSS把条件放宽到只要求三件事均值是常数E[X(t)]μ不随时间t变化方差有限E[X²(t)]∞自相关函数只和时间差有关E[X(t)X(tτ)]只依赖于τ不依赖t。这三个条件满足就说过程是宽平稳的。宽平稳不要求三阶以上矩稳定也不要求任意有限维联合分布平移不变所以验证起来现实得多。只要我对一段数据估计均值、方差、自相关如果它们不随时间窗口明显变化就有理由把它当宽平稳过程处理。宽平稳之所以在通信、控制、信号处理里被频繁使用有一个很实际的原因很多线性系统理论都是基于一阶和二阶统计量建立的比如最小均方误差估计、维纳滤波、卡尔曼滤波很多基础假设都只用到均值、方差和相关函数。你不需要完整知道过程的全部统计特性只靠一阶二阶矩就能推出一套很能打的算法。3.3 高斯过程一个能把两种定义画上等号的特例有一个重要的特例高斯过程。如果一个随机过程的任意有限维联合分布都是高斯分布那它就是高斯过程。高斯分布完全由均值和协方差矩阵决定而协方差矩阵本身又由自协方差函数决定。所以一旦一个高斯过程满足宽平稳的条件它的均值和协方差结构就都和时间原点无关于是所有有限维联合分布都和时间平移无关——宽平稳自然升级成严格平稳。这个结论在实践里特别值钱。比如噪声建模时只要我确认观测噪声近似高斯并且实测的均值和自相关函数稳定就可以更放心地把它当作严格平稳过程来处理很多理论推导都可以直接借用。反过来如果过程明显不是高斯宽平稳和严格平稳之间就没这么亲密宽平稳成立也保证不了高阶矩稳定。测量一个偏态很强的非高斯过程时数据前半段和后半段的均值、方差可能完全一致但三阶矩有明显差异这种情况只有在坚持严格平稳的眼光下才会暴露。3.4 为什么工程上几乎都用宽平稳我见过不少初学者纠结“既然严格平稳更准确为什么不直接用严格平稳”答案很简单验证成本。宽平稳是你能从有限数据集里“测量”出来的严格平稳更多是理论假设。实际项目里一般先检验宽平稳条件再根据数据是否服从高斯分布、是否有线性系统的先验知识去判断能不能更进一步地说它是严格平稳。这个“够用就好”的思路贯穿整个信号处理领域。顺带说一句很多教材里默认说的“平稳过程”如果不特别注明指的通常就是宽平稳。这不是偷懒而是工程实践里真正可落地、可验证的定义。学习的时候先把宽平稳的条件刻在脑子里严格平稳当作一个理论目标去理解就不会被各种概念绕晕。4. 自相关函数与功率谱密度平稳过程的工程身份证4.1 自相关函数画出了“记忆长度”对一个宽平稳过程自相关函数R_X(τ)E[X(t)X(tτ)]是关于时间差τ的函数。它描述的是相隔τ的两个时刻过程值和自身有多大程度地线性相关。τ0时R_X(0)E[X²(t)]就是均方值当均值是零时R_X(0)就是方差。两个极端例子能帮你看懂它。理想白噪声的自相关函数只有在τ0处不为零其他地方都是0说明它“一秒记忆都没有”。而正弦波加上随机相位的经典过程自相关函数是一条余弦曲线永不平息说明它拥有无限长的周期记忆。绝大多数真实过程的R_X(τ)会随τ增大而衰减衰减的快慢就代表过程“忘掉过去”的速度。这个性质在工程上非常有用。比如我判断一个传感器噪声是否适合用白噪声模型近似就去看实测自相关函数如果除了零点外几乎都是零白噪声假设就说得过去如果在某个时延附近还有明显的相关峰说明噪声源里有结构和记忆白噪声模型会低估系统风险。有一次我做一个微弱信号检测的预研就是靠画自相关函数发现所谓“随机噪声”里藏着一个周期成分的尾巴最后顺藤摸瓜找到了一台附近设备的开关电源辐射耦合。4.2 维纳-辛钦定理时域和频域的一座桥宽平稳条件下自相关函数和功率谱密度PSD是一对傅里叶变换这就是维纳-辛钦定理。写成公式就是S_X(f) ∫ R_X(τ) e^(-j2πfτ) dτ也就是说平稳随机过程的频率构成信息全部藏在自相关函数里。这个定理的工程价值怎么强调都不过分。我拿到一段随机信号想分析它的功率在哪些频率上集中可以用自相关函数做傅里叶变换得到功率谱也可以直接用周期图法从原始数据估计功率谱两种做法在理论上指向同一个东西。实际计算时FFT是主流实现方案Python里直接用scipy.signal.welch可以很快得到功率谱估计。第一次做谱分析时我犯过一个错直接对整段非平稳数据做FFT结果频谱里冒出一大堆低频伪峰。后来把数据按时间段切分、确认每段平稳后再做谱估计才把问题定位清楚。这段经历让我对“先判断平稳性再算频谱”这句话有了切身体会。功率谱密度不是随便一段数据就能算的平稳性是它成立的隐含前提。4.3 遍历性为什么敢用一条样本函数算统计量平稳已经够用了但工程上还有更“奢侈”的一步做集合平均还是时间平均理论定义里的均值E[X(t)]是对整个概率空间里所有可能实现取平均这叫集合平均。可我手里通常只有一条或有限几条样本函数。想拿这一条数据的时间平均去估计集合平均就需要过程具备遍历性ergodicity。遍历性可以粗略理解为一条足够长的时间序列已经经历了这个随机过程所有可能的取值状态所以时间平均约等于集合平均。对于平稳且遍历的过程用一段足够长的历史数据估计出来的均值、方差、自相关函数就可以当作整个过程的统计量来用。这是所有基于历史数据做系统识别、滤波器设计的第一步合理性依据。需要强调一点平稳不一定遍历。比如一个过程由两个不同均值的高斯分布按固定比例混合而成整体可以是宽平稳的但你沿着一条样本走到底很可能只看到其中一个均值附近的波动时间平均和集合平均对不上。这类“看起来平稳其实是多个模式混合”的现象在工程数据里真不少见。处理多模态数据时我会额外检查样本直方图是不是单峰或者把不同时间段的分段均值画出来对比防止把混合分布误认为简单平稳过程。5. 判断一个过程是否平稳实操路线与常见误区5.1 拿到数据先做的四件事理论聊完接下来是操作层面的东西。拿到一段数据我一般按这个顺序快速过一遍。第一步永远是画时序图。不是看一眼就下结论而是看有没有明显趋势、周期性、方差突变。第二步算滚动统计量把数据切成若干窗口分别算每段的均值和方差看是否大体稳定这比肉眼靠谱得多。第三步做ADF单位根检验用来检验序列是否具有单位根如果存在单位根说明过程非平稳。Python的statsmodels库有现成实现from statsmodels.tsa.stattools import adfuller。要注意ADF检验的原假设是“存在单位根”p值小于显著性水平才能拒绝原假设、认为序列平稳。很多人把p值大小方向搞反这算是最典型的误用之一。第四步看自相关图平稳序列的自相关函数一般随滞后阶数快速衰减如果衰减很慢甚至拖尾很长往往意味着数据非平稳或接近非平稳。这四种方法各有利弊不冲突搭配起来用才稳。方法看什么主要局限时序图趋势、周期、方差突变主观性强容易误判滚动统计量分段均值/方差是否稳定窗口长度选择影响结论ADF检验是否存在单位根p值方向容易搞反滞后阶数敏感自相关图自相关函数衰减速度周期过程可能被误读5.2 四个容易踩的坑第一个坑是“看着平稳就觉得真平稳”。有些周期性信号比如每天固定的工频干扰时序图在均值附近来回波动方差也稳定看起来人畜无害。但确定性周期信号的自相关函数是周期函数不是只依赖于时间差的平稳结构如果拿整段数据当平稳噪声建模后续估计出的频谱会多出明显谱线。判断这类数据时一定要看自相关函数在长滞后处是否还在周期性波动。第二个坑是均值漂移被误判为宽平稳。数据整体看起来围绕某个常数波动但因为环境缓慢变化前半段均值是1.0后半段均值变成1.2。分段估计单看某一段都“平稳”合起来却不满足宽平稳。滚动统计量就是专门抓这种问题的。我自己做长时间监测数据时会把“均值漂移”作为第一嫌疑对象凡是估计均值前都要先看一眼全时段的滚动均值曲线。第三个坑是忽略数据的相关性强度。白噪声自相关很快衰减但许多真实序列存在波动聚集效应自相关在某些滞后上会有显著值。如果你用太短的窗口估计自相关可能因为样本太少把真实的相关性估计成噪声或者反过来把噪声当成相关。经验法则是样本量至少要有被估计最大滞后阶数的5到10倍否则谱密度和自相关的估计都不可靠。第四个坑是过度依赖单位根检验。ADF检验有它的局限样本长度、滞后阶数选择、是否包含趋势项都会影响结论。它适合做辅助判断但不应替代对物理背景的理解。我看到过有人拿着一百个点就上ADF不同滞后阶数下得到完全相反的结论最后统计检验成了“橡皮图章”。正确的做法是先搞清楚数据是怎么产生的——是传感器采集的物理量是业务系统里的指标还是某个算法的输出——把检验当工具而不是当裁判。5.3 数据确实不平稳怎么办如果数据就是不平稳也不用慌有几种常见思路。如果趋势项明显可以先做差分一阶差分通常能把随机游走变成类似白噪声的序列。如果趋势更复杂可以用回归或者滤波把确定性趋势和随机波动分离。如果数据不是全局平稳但可以分成几段、每段各自平稳就用分段平稳模型这在带有时变性故障数据的工程场景里非常常见。更高阶的做法是引入时变参数模型或状态空间模型保留物理含义的同时也能建模缓慢变化的统计特性。我个人的习惯是先画出滚动均值和滚动方差再跑一次ADF最后决定要不要差分。三步都做完了才敢把一个模型放到数据上。大二那会儿我觉得这些步骤繁琐后来被一堆假模型坑过才明白这套“仪式感”其实是在给自己省时间。随机过程里最贵的不是公式推导而是对一个假设的盲目信任。你愿意花十分钟验证一下平稳性假设后面就能少走一整天的弯路。最后再分享一个小技巧。我在处理任何随机信号数据前都会抽十分钟做一次平稳性“体检”把时序图、滚动统计量、自相关图打出来贴在分析文档最前面。这个习惯救过我很多次不少看起来复杂的建模问题最后都只是早期把非平稳数据错当成了平稳数据。随机过程的概念并不难难的是养成“下结论前先验证假设”的肌肉记忆。希望这篇文章能帮你省下一些不必要的弯路至少下一次拿到波形数据时你会先问一句这个过程平稳吗我拿什么证明它平稳