搞通信、搞信号处理、搞量化的人,十有八九会撞上“平稳随机过程”这个词。我当年第一次接触它的时候,被一堆“严平稳、宽平稳、各态历经”的概念砸得头晕,后来在项目里真正用它处理信号和噪声数据,才慢慢明白这东西到底在说什么。这篇是“随机过程”系列的第三篇,前两篇把随机过程的基本概念和概率描述讲清楚了,这一篇集中攻平稳随机过程——它为什么重要、怎么判断、怎么用,以及在实操里容易踩的坑。如果你是学生、刚入行的工程师,或者想在时间序列分析里少走弯路的人,这篇适合你。
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 “短样本”下相关函数估计失真
如果你只有不到几百个样本点,而你要估计的自相关时间差又接近样本长度的一半,那么估计结果几乎不可信。原因很简单,时间差越大,有效的乘积样本对越少,估计方差急剧变大。更糟的是,个别极端的样本值在短样本下很容易主导估计结果,导致自相关看起来很强,实际上完全由少数离群点造成。
碰到这种情况我会想方设法增加数据量,或者在物理条件允许时重新做实验采集更长时长的数据。如果数据确实无法增加,那就把分析目标收窄,只估计短时间差范围内的自相关,或者采用带正则化的谱估计方法,才能有效控制方差。数据量的限制是很多理论公式不会告诉你的“潜台词”,实际操作才能感知到。
把一个概念用得熟练,不是记住定义就够了,而是要知道它在什么条件下成立、什么条件下失效。平稳随机过程这个框架的强大之处在于,一旦你确认过程满足平稳性和各态历经性,时域和频域的工具就能全部派上用场。反过来说,数据不平稳却硬套平稳框架,再精细的算法也会给出荒谬的结果。判断数据状态、选对处理策略、理解工具假设,这三步走扎实了,平稳随机过程就能成为你分析工具箱里一把真正趁手的工具。