搞通信、搞信号处理、搞量化的人十有八九会撞上“平稳随机过程”这个词。我当年第一次接触它的时候被一堆“严平稳、宽平稳、各态历经”的概念砸得头晕后来在项目里真正用它处理信号和噪声数据才慢慢明白这东西到底在说什么。这篇是“随机过程”系列的第三篇前两篇把随机过程的基本概念和概率描述讲清楚了这一篇集中攻平稳随机过程——它为什么重要、怎么判断、怎么用以及在实操里容易踩的坑。如果你是学生、刚入行的工程师或者想在时间序列分析里少走弯路的人这篇适合你。1. 先搞清楚平稳随机过程解决了什么问题1.1 从一个“反复测量电压”的实例说起想象一个场景你在实验室里测一个电阻两端的噪声电压每秒采样一次连续采了一个小时。你把数据画出来曲线起起伏伏完全看不出规律。但如果把这一小时的样本放到一边第二天再测一次你发现两次数据的整体形态差不多均值都在某个值附近上下波动的幅度也接近波形图案虽然不一样但“统计上的感觉”几乎一致。这个“统计上的感觉一致”恰恰就是平稳随机过程的核心直觉。我见过不少人把“平稳”理解成“不变化”这是最大的误会。平稳不是指过程本身不变化而是指它的“统计规律”不随时间推移而变化。也就是说你取一段时间的观测和另外一段时间的观测虽然具体的数值不同但它们的均值、方差、相关程度这些统计特征应当是一样的。如果一个随机过程的统计特性会随时间变化判断它就是非平稳的。这种区分在实际工程里非常重要。比如做噪声测量时如果放大器热漂移导致均值缓慢上升那么测出来的数据统计特性就会随时间变化你再拿这些数据去估计噪声功率谱结果必然失真。平稳性就是把“能不能用一段数据代表整个过程”这个问题的理论基础。1.2 平稳性的深意统计特性不随时间平移而改变严格一点说如果一个随机过程它的任意有限维概率分布在时间平移下保持不变那么它就是严平稳的。所谓“时间平移不变”就是把整条时间轴往前或往后挪一段统计规律完全相同。这个条件非常强它要求所有高阶矩都保持不变包括三阶矩、四阶矩乃至更高阶的矩。举个例子若过程是严平稳的那么不仅均值、方差是常数连“偏度和峰度”这类描述分布形状的参数也必须是常数。这在理论上看着漂亮但在实际应用中很难验证因为你不可能拿到过程的所有概率分布信息。日常数据里我能看到的往往只有一条或几条样本路径要从这些有限样本里去验证“任意有限维分布平移不变”几乎不可能。所以工程上通常会退一步只要求一阶矩和二阶矩不随时间变化。具体来说要求均值是一个常数方差是一个常数而且任意两个不同时刻的协方差只依赖于这两个时刻的时间差而不是依赖于绝对时刻。满足这种条件的随机过程被称作宽平稳过程也叫广义平稳过程。现实项目中大多数谈论平稳随机过程默认都是在说这种宽平稳。1.3 严平稳与宽平稳大部分时候用宽平稳就够了为了讲清楚这两者的差别我列个表对比项严平稳宽平稳定义范围任意有限维概率分布平移不变均值常数、方差常数、自相关只依赖时间差验证难度极难需要完整概率分布相对容易只需估计一二阶矩适用范围理论研究与建模分析工程应用与数据处理关系严平稳蕴含宽平稳若二阶矩存在宽平稳不一定是严平稳常见场景随机过程理论推导信号处理、时间序列、通信系统这里有个容易混淆的点就是“高斯过程”这个特例。如果一个宽平稳过程是高斯过程那它同时也是严平稳的因为高斯分布完全由均值和协方差决定一二阶矩不变意味着整个分布不变。除此之外宽平稳和严平稳就不能互相推导了。我个人的经验是在绝大多数工程问题里盯住宽平稳就够了。你计算功率谱、设计滤波器、做时间序列预测基本都在一阶二阶矩的框架之内。真正需要严平稳的场景通常出现在理论研究和对模型性质做严格证明时。所以先吃透宽平稳是性价比最高的路线。2. 核心概念与识别怎么看懂一个平稳过程的“身份证”2.1 自相关函数平稳过程的内禀指纹平稳随机过程的均值是个常数通常可以处理为零均值这个“去均值”操作几乎成了标准动作。去掉均值之后最能反映过程内部结构的就是自相关函数。它衡量的是同一个过程在两个不同时刻的取值之间的线性相关程度记作R(τ)其中τ是两个时刻的时间差。自相关函数有几个特别重要的性质。首先R(0)等于过程的方差也就是平均功率。其次自相关函数是偶函数即R(τ)R(-τ)这是因为相关性与τ的正负无关。再次自相关函数的绝对值不会超过R(0)数学上对应一个简单的不等式,这个性质可以直观理解为“两个时刻相隔越远相关性通常越弱”。不过要注意这个“通常”并不是必然的周期信号的自相关函数就会出现周期性即使τ很大也可能维持较高的相关值。拿一个实际例子来看。一个独立同分布的白噪声序列任意两个不同时刻的取值都不相关所以它的自相关函数在τ0处是一个尖锐的冲激在其他τ处都等于零。而一个平滑的随机游走或者带有惯性系统的信号相邻时刻的取值高度相关自相关函数会衰减得比较慢。看自相关函数衰减快慢是判断随机过程内在特性的快捷方式。2.2 功率谱密度从频域看平稳过程平稳随机过程的自相关函数描述的是时域上的统计特性而它的傅里叶变换则描述了频域上的统计特性这个变换结果就是功率谱密度。功率谱密度告诉你在不同频率上过程的平均功率是怎么分布的。比如一个窄带噪声系统功率集中在某个中心频率附近它的功率谱就会出现一个明显的尖峰。这里要强调一个工程上常见的误区很多人把随机过程的一段样本直接做傅里叶变换得到的结果叫“周期图”却误以为这就是功率谱密度。严格来说随机过程的样本路径通常不满足绝对可积条件直接做傅里叶变换在数学上并不成立。正确的做法是先计算自相关函数的估计再对自相关函数做傅里叶变换或者采用其他谱估计方法。这一点在后面的实操部分我会详细说。功率谱密度还有个非常实用的物理意义它在所有频率上的积分等于过程的总平均功率这个结果正好和自相关函数在零点的值对应上。这给了我们一个桥梁既能从时域理解过程也能从频域理解过程具体哪个域更方便取决于你手头的问题。2.3 自相关与功率谱的对应关系维纳-辛钦定理维纳-辛钦定理是连接时域和频域的关键桥梁。它指出对于一个宽平稳随机过程功率谱密度和自相关函数互为傅里叶变换对。用公式表达就是功率谱密度等于自相关函数对τ做傅里叶变换自相关函数则是功率谱密度的逆傅里叶变换。这个定理的伟大之处在于它让平稳随机过程真正拥有了频谱分析的基础。我在做滤波算法设计时这一定理几乎是“万能钥匙”。比如我想判断一个低通滤波器的输出噪声功率就可以先在频域把输入信号的功率谱密度和滤波器的幅频特性相乘再积分得到输出总功率。这种方法比在时域里做卷积再去算统计特征要简洁得多。不少参考资料把维纳-辛钦定理表述为功率谱密度是“自相关函数的傅里叶变换”但实操中要注意连续时间、离散时间、单边谱、双边谱这些版本之间存在系数差异。离散情形下功率谱密度常常以周期形式出现周期是采样率。这些细节如果处理错计算结果会差一个系数定位问题时会非常痛苦。2.4 各态历经性用一条样本路径推断整体平稳随机过程的理论总让我觉得有点“悬”它定义的是整个随机过程的统计特性但现实中我手里往往只有一条有限长的样本路径。凭什么能用一条路径去估计整个过程的均值、方差、自相关函数这个问题的答案就是各态历经性。通俗地讲各态历经性就是指“时间平均等于统计平均”。如果一个平稳随机过程是各态历经的那么我只要把一条样本路径在时间上求平均就可以代替对整个过程做统计平均。也就是说用长时间的单个样本能等价于用大量样本在同一时刻做平均。这条性质是信号处理和数据分析里的隐形基础。举个例子你要估一个噪声电压的直流分量实际上就是把一段采样数据求算术平均。如果这个过程是各态历经的那么随着采样时间不断延长这个时间平均会收敛到真实的统计均值。不少人在做数据采集时可能没想过这个问题但如果过程本身不满足各态历经性你用有限样本估计出来的“均值”就没有稳定的收敛意义。判断各态历经性有若干充分条件核心要求是自相关函数在时间差很大时趋于零物理意义就是“过去很久的样本对未来已经没有任何影响”。3. 实操演练从“看起来平稳”到“定量判断平稳”3.1 先用眼睛看趋势、周期和分段平稳量化判断之前先得学会用眼睛看数据。拿一段时序数据画出来如果它呈现出明显的上升或下降趋势那大概率不是平稳的。如果它表现出季节性波动比如说夏天高、冬天低那也不是平稳的因为不同季节的均值不同统计特性随时间变化了。还有一种情况是分段平稳比如某时段系统运行正常数据平稳某时段设备故障幅度剧烈波动整段拼在一起看就是不平稳的。看数据这个环节不能省。统计检验是有滞后性的形状异常一眼就能发现但检验可能要攒够一定样本量才能给出可靠结论。而且检验方法各有适用前提你如果上来就套ADF检验可能因为模型设定不对得到错误结论。我的习惯是先画出时间序列图再做自相关图最后才上检验。这里还要注意“平稳性”和“周期性”并不矛盾。一个纯正弦信号是周期性的但同时也是宽平稳的因为它的均值为零自相关函数只取决于时间差。真正破坏平稳性的是“非周期的趋势变化”而不是周期性本身。这一点很多初学者会搞混看到数据有周期就认为不平稳这其实是一种误判。3.2 统计检验ADF检验与KPSS检验的配合使用视觉判断之后常用的统计检验有两个一个是ADF检验一个是KPSS检验。两者方向正好相反。ADF检验的原假设是序列存在单位根也就是不平稳如果检验统计量足够小拒绝了原假设就认为序列平稳。KPSS检验的原假设则是序列平稳如果统计量太大拒绝了原假设就认为序列不平稳。我把两个检验的配合使用整理成了下面的对照思路检验方法原假设拒绝原假设意味着适用判断ADF存在单位根不平稳序列平稳用于确认序列是否平稳KPSS序列平稳序列不平稳用于确认序列是否不平稳两个检验结果一致时结论很清晰。不一致时就头疼了最常见的情况是ADF说平稳KPSS说不平稳。这往往说明序列介于平稳和非平稳之间比如有缓慢变化的趋势或者存在长记忆效应。遇到这种情况我不会急着下结论而是多从业务和物理背景上去分析这个信号由什么机制产生的理论模型是平稳的吗样本量够不够有时多取一段数据就能改变结论。这些检验方法在主流统计软件里都能直接用。但一定要留意两个细节第一检验的滞后阶数选择会影响结果通常要根据信息准则选择不要随手用默认值第二检验之前要不要去除均值、要不要加趋势项都对应不同的模型设定。初学者最容易犯的错误就是在没有趋势的数据上强行加了趋势项导致检验功效下降。3.3 数据不平稳怎么办差分与变换稳化如果判断出数据不平稳最常见的处理手段是差分。一阶差分就是把相邻两个时刻的差值当作新序列公式极其简单。很多带有线性趋势的数据差分一次后趋势就被去掉了。如果一阶差分之后还有趋势可能要做二阶差分。但千万不要过度差分差分的次数越多数据的信噪比往往越低本来要保留的信号特征可能被消磨掉。除了差分对数变换也可以帮助平稳化。对具有指数增长趋势的数据比如某些经济指标或生物信号取对数能把增长趋势转成近似线性趋势之后再差分往往就一次成功。另外如果数据存在条件异方差性也就是波动幅度随时间在变那么即便均值平稳方差也不平稳这种情况需要考虑更复杂的ARCH/GARCH类模型来处理。纯度更高的做法则是从模型层面入手。比如卡尔曼滤波这种状态空间方法建模时可以直接把趋势项放进状态向量里而不是先去差分。差分是一个简单有效的预处理手段但也会改变噪声结构让原本不相关的噪声变成相关的这一点后面分析时会带来麻烦。所以预处理策略要和你后续用的模型匹配才能真正提高分析质量。4. 平稳性在工程里的典型应用4.1 通信接收机中的噪声建模通信系统里的热噪声通常被建模为零均值、功率谱平坦的高斯白噪声这是最典型的平稳随机过程。接收机前端收到的信号就是发射的有用信号叠加了平稳噪声。在设计接收机时计算误码率往往需要知道噪声功率而噪声功率正是功率谱密度在接收带宽内的积分。如果噪声不具备平稳性比如有突发干扰造成方差随时间变化这种简单计算立刻失效必须引入更复杂的干扰模型。我在调试射频接收链路时遇到过一个问题系统底噪的均值基本稳定但方差会随着温度变化缓慢漂移。说它完全平稳它不是说它剧烈不平稳又没有那么夸张。后来处理方式是先测一条温度校准曲线把温度变化对应的噪声方差修正掉再按平稳过程去建模实际效果提升了一个多数量级。这个经验告诉我判断平稳与否不能只看统计指标还要结合物理机理综合判断。还有一点值得提醒通信系统里常假设噪声是“各态历经的”所以可以用一次采集的长数据来估计噪声统计特性。这个假设在绝大多数硬件场景下成立但遇到频谱很窄的干扰时就要小心。窄带干扰的自相关函数衰减很慢各态历经性条件可能被破坏此时一次采集的数据就未必能代表整体统计特征了。4.2 信号滤波与维纳滤波器维纳滤波器是平稳随机过程理论最优雅的应用之一。它的目标是从含噪观测中恢复有用信号前提是有用信号和噪声都是平稳随机过程并且功率谱密度已知。维纳滤波的关键推导简单来说就是在频域中按照信号和噪声功率谱密度的比值对观测信号进行加权。信号强的地方权重高噪声强的地方权重低最终得到最小均方误差的估计。实际实现时不会真的去求信号的完整功率谱而是假设已知信号和噪声的谱模型然后设计滤波器系数。设计完成后用无穷长或有限长的观测数据来做滤波前者可以直接用频域传递函数后者则需要分解成有限脉冲响应滤波器用维纳-霍夫方程求解。这个求解过程本质上是求解一组线性方程相关矩阵的结构正好由信号和噪声的自相关函数决定。有一点在实践中特别容易踩坑维纳滤波器处理的是平稳信号如果输入信号是非平稳的比如语音信号直接使用维纳滤波效果会很差。工程上常用的做法是分帧处理把长信号切成一个个短帧在每个短帧内部近似看成平稳的逐帧设计滤波器参数。这就是语音增强算法里常见的“短时平稳假设”的来源。由此可见理解平稳性不仅是为了理论推导更是为了知道什么时候能用这个理论、什么时候不能用。4.3 金融时间序列收益率与波动率金融数据是检验平稳性概念的绝佳战场。股票价格本身几乎都是非平稳的因为它有随机游走特性均值会随时间漂移方差也会不断变化。但如果把价格转换成熟收益率很多资产的对数日收益率会表现出近似平稳的性质均值和方差在较长一段时间内相对稳定。这就是为什么量化分析从来不对价格建模而是对收益率建模。可“收益率近似平稳”不代表万事大吉。金融时间序列的最大问题在于波动率聚类现象大涨之后往往伴随剧烈波动大跌之后同样如此。这意味着收益率序列的二阶矩也就是方差并不是常数严格的宽平稳条件并不满足。普通的线性时间序列模型很难刻画这种特征所以才催生了ARCH和GARCH模型它们把“方差”本身建模成一个随时间变化的随机过程。我做过一段时间的量化回测对“平稳”这个词感受很深。如果你直接用非平稳的价格序列去估计相关系数或者做回归很容易得到虚假的高相关性这在量化里叫“伪回归”。正确做法是先检验平稳性非平稳序列先差分或取对数处理确保你分析的是真正的相关关系而不是共同趋势带来的幻觉。这一条对冲策略研究新手尤其要重视。5. 常用工具箱估计相关函数的算法与参数5.1 样本自相关函数怎么算工程实现中我们面对的是有限长的离散样本序列假设长度为N。要估计时间差为k的自相关函数常见估计式是对样本序列中相隔k的两个点做乘积再求和取平均。这个公式实现了对真实自相关函数R(k)的估计。看似简单但这里有两个明显不同的版本区别在于分母除以N还是除以N-k。除以N-k的版本是无偏估计但它当k接近N时参与平均的样本对就很少估计方差很大。除以N的版本是有偏的但在k较小时方差特性更稳定且能保证估计出的相关矩阵是正定的。实际做谱估计时我常常更倾向于使用有偏估计式因为它的统计特性整体更稳定尤其在样本量不算大的时候。而且“正定性”对后续求解维纳-霍夫方程等操作来说非常重要用无偏估计式在k偏大时很容易得到不合理的非正定矩阵。这是理论公式和工程实现之间一个典型的差异书上没明说处理数据时才会发现。5.2 估计偏差和泄漏问题对有限长数据估计自相关函数相当于把真实无限长自相关函数乘上了一个矩形窗这在频域上对应的是卷积一个sinc形状的频谱窗。结果是功率谱被抹平频率分辨能力下降还会产生频谱泄漏也就是能量从真实的频率位置“漏”到附近的频率上去。这个现象在谱分析里非常经典处理不好会让窄带信号看起来像个“山包”。减轻泄漏的标准做法是加窗比如汉宁窗、汉明窗、布莱克曼窗等。加窗的本质是在估计自相关函数时对不同的时间差施加不同的权重让截断处的突变变得平滑。代价是主瓣变宽频率分辨率下降。所以这里有个经典的权衡想要分辨率就选矩形窗想要减小泄漏就选旁瓣更低的窗。不同窗函数适合不同的场景没有“永远最优”的窗函数。我自己的习惯是如果目标是检测两个频率很近的谱峰必须用矩形窗或主瓣窄的窗如果目标是估计宽带噪声的功率谱形状优先用汉宁窗来平滑结果。这个选择要在动手写代码前就想清楚不要等谱图出来之后才调。5.3 我用过的三种实现方式对比在具体实现谱估计时我实践过三种主要方式各有适应场景。第一种是直接法先估计样本自相关函数再做傅里叶变换。这种方法最贴近维纳-辛钦定理代码逻辑简单但受窗函数和估计方差的影响较大。第二种是周期图法直接把样本数据的模平方作为功率谱的粗略估计。这种方法的实现最简单单个周期图的方差却很大也就是说谱的起伏剧烈看起来不光滑。第三种是Welch方法把样本数据分成多段分别计算各段周期图再取平均。这种平均操作能显著降低估计方差是实测中我用得最多的一种。Welch方法里有两个参数很关键一是分段长度二是段与段之间的重叠比例。分段长度越长频率分辨率越高但段数变少平均次数变少方差变大。重叠比例增加可以增加段数但段与段之间不再独立降方差的效率会打折扣。实践中的折中方案是段之间重叠50%这个参数在工程界被广泛采用。谱的平滑程度不够时我会尝试调整分段长度而不是一门心思加窗。这三种方法的选择逻辑可以用一个简单场景概括如果只是要大概确认噪声底是什么样的周期图就够了如果要定量估计某个频带内的功率Welch方法更稳如果手头的数据非常短直接法反而更好控制偏差。理解它们各自的方差和偏差特性才能灵活应对不同数据条件。6. 我踩过的一些坑常见问题速查6.1 误把“不相关”当“独立”白噪声序列的自相关函数在所有非零时间差上都是零所以白噪声在各时刻的取值两两不相关。但“不相关”不等于“独立”只有高斯分布下的不相关才等价于独立。如果白噪声的分布不是高斯的比如是一个具有厚尾分布的序列虽然它不相关却可能存在高阶非线性相关结构。你在做概率模型时如果把这两者混为一谈后续对风险或尾部的估计会产生偏差。这个问题在金融数据分析中尤其致命。有些策略回测时假设收益率为高斯白噪声但实际收益率分布有明显的厚尾估值模型给出的风险数字会系统性偏低。所以每当我看到有人把“不相关”三个字当作“没问题”的证据时都会问一句你的高阶矩呢6.2 把非平稳信号直接做傅里叶变换这是信号处理新手最容易犯的错误。把一段语音信号直接整体做傅里叶变换得到的频谱图毫无意义因为语音是典型的非平稳信号它的频谱特性随时间剧烈变化。正确的做法是分帧加窗在短时间范围内用平稳假设做谱分析也就是“短时傅里叶变换”的思路。语音识别里的频谱特征、音频处理里的时频谱图背后都是这个思想。放到更一般的场景中非平稳信号的傅里叶变换结果可以认为是“平均谱”它隐藏了频谱随时间演化的信息。若要保留时变特征就必须引入时频分析方法或者用分段平稳近似。每当我看到一个没有做任何预处理就直接画全序列频谱图时就能猜到后面的分析会有问题时间分辨率完全丢失了。6.3 零均值假设带来的坑很多平稳过程的公式推导默认均值是零要不就是先减掉均值再做后续分析。可如果数据的真实均值本身随时间缓慢变化而你强行减掉一个固定的样本均值就会把低频分量以扭曲的方式保留下来造成伪相关的现象。另一方面即使均值真的是常数用有限样本估计出的均值也有误差这个误差会传导到自相关的估计上去。一个相对稳妥的操作是在估计自相关之前先用分段均值来观察均值稳定的程度。如果分段均值的抖动明显超出统计误差范围那可能要先处理非平稳趋势而不是简单减一个全局均值了事。这个检查和估计本身同样重要但很多人会忽略。6.4 “短样本”下相关函数估计失真如果你只有不到几百个样本点而你要估计的自相关时间差又接近样本长度的一半那么估计结果几乎不可信。原因很简单时间差越大有效的乘积样本对越少估计方差急剧变大。更糟的是个别极端的样本值在短样本下很容易主导估计结果导致自相关看起来很强实际上完全由少数离群点造成。碰到这种情况我会想方设法增加数据量或者在物理条件允许时重新做实验采集更长时长的数据。如果数据确实无法增加那就把分析目标收窄只估计短时间差范围内的自相关或者采用带正则化的谱估计方法才能有效控制方差。数据量的限制是很多理论公式不会告诉你的“潜台词”实际操作才能感知到。把一个概念用得熟练不是记住定义就够了而是要知道它在什么条件下成立、什么条件下失效。平稳随机过程这个框架的强大之处在于一旦你确认过程满足平稳性和各态历经性时域和频域的工具就能全部派上用场。反过来说数据不平稳却硬套平稳框架再精细的算法也会给出荒谬的结果。判断数据状态、选对处理策略、理解工具假设这三步走扎实了平稳随机过程就能成为你分析工具箱里一把真正趁手的工具。