ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

随机信号处理基础:从随机过程到功率谱密度

随机信号处理基础:从随机过程到功率谱密度 做信号处理这几年我最大的感悟是课本上的信号和现实里的信号是两种东西。教科书里写sin(2πft)、阶跃函数、冲激函数每一个都能写出精确的数学表达式你甚至能算出它在任意一个未来时刻的值。可一旦走进实验室接上传感器打开示波器看到的却是完全另一副面孔——一条毛刺丛生的曲线每一次采集都不一样别说预测下一个值连“重测一遍得到相同波形”都是奢望。随机性不是噪声的附属品它本身就是信息的一部分。传统信号处理里那套确定性分析工具遇到这种波形会直接失灵。而概率论与随机过程恰恰是描述这种不确定性的语言。这也是为什么现代信号处理课程的第一讲几乎总是落在概率论与随机过程的回顾上——不是想复习本科数学而是后面的参数估计、谱分析、维纳滤波、卡尔曼滤波、自适应算法全都建立在这套“概率语言”的地基上。这篇笔记就是把这个地基重新夯一遍帮你完成从确定性思维到随机思维的切换。无论你是在校学生准备进入现代信号处理还是工程师想补一补理论短板这一篇都值得认真看。1. 确定性信号与随机信号的思维鸿沟——为什么第一课是概率论1.1 确定性分析的“天花板”我最早学信号处理的时候心里其实有个没说出来疑惑既然傅里叶变换这么强大能把信号拆成一堆正弦分量那是不是随便什么信号拿来一顿变换就能分析得明明白白这个想法支撑我顺利学完了第一门信号与系统直到第一次处理实测振动数据。那段数据来自一个旋转机械理论上应该是一个转速对应的周期振动叠加几个谐波。但真实采样出来信号像一碗粥——主频确实在但整条曲线糊成了一片频域里除了几条谱线底噪铺满了整个坐标轴。我用课本上的方法反复分析总感觉像隔着毛玻璃看东西。折腾了一个多星期才明白问题的关键不在处理工具而在对信号的认识。那段振动信号里除了确定性周期成分还有大量的随机成分——轴承摩擦、气流扰动、传感器热噪声这些叠在一起决定了信号本质上不是一个确定性函数而是“一个随机过程的一次实现”。这个认识上的转变是信号处理思维的分水岭。确定性信号处理研究的是“这个信号是什么”随机信号处理研究的是“这个信号是怎么产生的、它的统计规律是什么”。前者用幅值、相位、频率描述后者用概率分布、均值、方差、相关函数描述。1.2 工程实践中的随机性都从哪来很多初学者会问现实世界的物理规律不是确定的吗为什么信号会随机答案很简单——随机性的来源无处不在而且往往是物理本质决定的。热噪声导体内部电子的热运动产生随机电压温度越高涨落越剧烈。它在极宽的频带内功率谱近似平坦这就是“白噪声”最典型的物理来源也是所有电子系统噪声底的基本构成。量化噪声ADC把连续幅值映射到有限个量化电平必然产生误差。当信号变化足够复杂时这个误差近似服从均匀分布统计特性稳定在很多系统里可以当作独立的随机噪声处理。信道衰落无线通信中电磁波经过多条路径到达接收机每条路径的幅度、相位都在变叠加之后接收信号幅度出现随机起伏。经典模型下接收幅度服从瑞利分布——这不是数学家的想象而是实测统计出来的规律。测量误差传感器本身的漂移、机械振动、环境温湿度变化都会让测量结果带上随机成分。你会发现“随机”不是某个领域的特例而是工程系统的底色。语音信号里的背景噪声、雷达回波里的杂波、心电信号里的肌电干扰全部是随机成分的处理问题。如果没有概率论这套工具你连描述这些信号都做不到更别提从中提取有用信息。1.3 这篇回顾真正要解决的三件事我把这次回顾的重点提炼成三件事这也是后面整个系列会用到的核心底盘第一搞清楚随机信号用什么描述。单个随机变量用概率密度函数描述多个随机变量用联合分布而随机过程则是一族随时间变化的随机变量需要用均值函数、自相关函数这类“统计量”来刻画。第二搞清楚随机信号分析的两大前提。平稳性和各态历经性决定了你能不能拿一次观测的数据去推断整个随机过程的统计特性。这个前提不成立后面所有的功率谱估计、参数辨识全都站不住。第三搞清楚随机信号怎么上频域。确定性信号用傅里叶变换看频谱随机信号不能直接这么做要通过自相关函数和功率谱密度这一对傅里叶变换对来描述。这是维纳-辛钦定理的内容也是整个现代谱分析的基石。这三件事每一件都是后面算法的“使用说明书”。先把说明书读通再拧螺丝事半功倍。2. 从随机变量到随机过程——先搞清你手里那堆数据到底算什么2.1 随机变量不确定性如何变成可计算的数字随机变量 X 本质上是一个从样本空间到实数的映射。掷骰子六个面映射到1到6的整数测量噪声电压每一次测量值就是一个实数。连续型随机变量的统计行为由概率密度函数PDFf_X(x) 完全描述曲线下的面积是概率比如 P(a ≤ X ≤ b) ∫_a^b f_X(x) dx。实际工程中我们更常和两个数字打交道。一个是期望 E[X]也就是一阶矩描述随机变量取值的“中心位置”另一个是方差 Var(X) E[(X - E[X])²]描述取值围绕中心的离散程度。这两个指标虽然只用了分布的一部分信息却足够快速把握一个噪声的基本形态。比如ADC量化噪声在量化间隔Δ内近似均匀分布均值是0无偏量化时方差是 Δ²/12。很多系统设计拿这个公式估算量化噪底够用且实用。2.2 多维随机变量相关性这个概念从这里生根现实里很少有真正独立的随机量。麦克风阵列的多个通道之间有关联一条复数信号的实部和虚部之间有关联同一信号相邻两个采样点之间也有关联。这种关联性是随机信号分析里最值钱的信息之一。描述多个随机变量的整体行为需要联合分布。为了衡量两个随机变量之间的线性关联强度我们定义协方差 Cov(X, Y) E[(X - E[X])(Y - E[Y])]再归一化得到相关系数 ρ取值在[-1, 1]。ρ接近1说明正线性相关接近-1说明负线性相关接近0说明线性无关。“相关性”这个概念非常重要因为推广到随机过程身上它就成了自相关函数。自相关函数本质上就是同一个过程不同时刻的两个随机变量之间的相关程度。这个从普通随机变量身上长出来的小概念日后会成为谱分析、参数估计、滤波器设计这些领域里出镜率最高的核心工具。2.3 随机过程的定义一簇样本函数的集合随机过程 X(t) 可以这样理解在每一条观测记录里它是一条时间函数但在数学上它是“一族由时间参数t索引的随机变量”。这里有两个视角一定要分清楚固定时刻视角取 t t₀X(t₀) 是一个普通的随机变量。比如在t₀时刻观测噪声电压你得到的是一个随机数它有自己的概率分布。固定样本视角做一次完整观测得到一条确定的波形 x₁(t)。再做第二次得到另一条不同的波形 x₂(t)。所有可能波形的全体构成了这个随机过程。拿示波器观察同一个直流电源的输出电压你会发现每次开机后的波形细节都不同。这一堆波形的“总集合”就是一个随机过程而你抓到的任何一条具体采样曲线只是它的一次样本实现。很多刚接触这个概念的人会犯迷糊一条曲线明明是确定的怎么能说它是随机的关键在于视角——单条曲线当然确定但“下一次你会抓到哪条曲线”这件事是随机的。处理随机过程时我们要研究的对象是整个集合的统计规律而不是某一条具体的实现。2.4 均值函数与自相关函数二阶统计量的价值既然随机过程的完整描述需要所有有限维联合分布这在工程上几乎不可能实践中我们退而求其次只用一阶和二阶统计量来描述。对于一个随机过程 X(t)定义均值函数m_X(t) E[X(t)]描述每个时刻的集合平均。自相关函数R_XX(t₁, t₂) E[X(t₁)X(t₂)]描述两个不同时刻取值之间的线性关联。自协方差函数C_XX(t₁, t₂) E[(X(t₁) - m_X(t₁))(X(t₂) - m_X(t₂))]即去均值后的自相关。有人问只用均值和自相关信息够吗答案是对高斯过程来说够了。高斯过程的任意有限维分布都是高斯分布而高斯分布完全由均值向量和协方差矩阵决定。所以只要过程是高斯的二阶统计量就包含了它的全部统计信息。这解释了为什么现代信号处理的理论推导如此偏爱“高斯噪声假设”——它不是懒惰的妥协而是能在“保留足够信息”和“数学可处理”之间取得平衡的最优选择。很多非高斯过程的场合我们也会主动加一个高斯近似因为中心极限定理告诉我们大量独立随机源叠加之后总体分布就会趋向高斯。3. 平稳性与各态历经性——用一条样本描述整个随机过程的前提3.1 严格平稳和广义平稳差一个“有限维分布”随机过程的统计特性可能随时间变化也可能不随时间变化。如果一个过程的所有有限维联合分布对时间平移具有不变性——也就是说无论你把观察窗口平移到哪个时间起点统计规律都一样——那它就是严格平稳的。严格平稳在理论上很漂亮但实际操作中几乎无法验证。因为你要检验“所有有限维分布”的平移不变性这需要海量数据而且现实中很难保证数据采集的条件完全一致。所以工程上几乎都采用一个宽松得多的版本广义平稳Wide-Sense Stationary, WSS。3.2 广义平稳为什么是工程默认配置广义平稳只需要满足三个条件条件数学表达直观含义均值恒定m_X(t) m_X统计中心不随时间漂移自相关只依赖时间差R_XX(t₁, t₂) R_XX(τ)τ t₁ - t₂两个时刻的关联只取决于它们的间隔平均功率有限E[X²(t)] ∞信号能量不会无限增长这三条一旦成立自相关函数就从两个变量的函数简化成了一个变量的函数 R_XX(τ)后面所有频域分析——维纳-辛钦定理、功率谱密度——才有立足点。功率谱密度本质上就是 R_XX(τ) 的傅里叶变换如果自相关还依赖两个绝对时刻这个变换根本定义不出来。我见过不止一个初学者拿着非平稳的数据硬套平稳假设算出来的功率谱都是“漂移”的——分段一变化谱的形状就跟着变。先用3.4节里说的体检方法判断平稳性再决定要不要做去趋势、分帧或差分这才是正确姿势。3.3 各态历经性用时间平均代替集合平均的“胆子”前面定义均值函数 m_X(t) 时用的是“集合平均”——在某个固定时刻 t把所有样本函数在该时刻的值全部取出来做平均。理论上没问题但现实中你往往只有一条样本函数。一台故障诊断设备你只能采集那一次振动的波形一个通信接收机你只能处理那一段收到的信号。用一条样本怎么估计集合平均各态历经性Ergodicity就是解决这个问题的如果随机过程是各态历经的那么“时间平均”等于“集合平均”。换句话说拿一条足够长的样本函数沿着时间轴做平均得到的结果和理论上对全体样本做平均的结果一致。对自相关也是如此——一条长样本的时间平均自相关可以代替集合自相关。各态历经性的成立条件比平稳性更严苛。它要求过程的随机波动充分“充分”——单条样本在时间轴上的演变能充分经历整个集合的所有可能状态。工程中许多平稳过程被默认是各态历经的但这个默认并不总是安全。如果一个信号由两个均值不同的平稳段拼接而成它可以是广义平稳的吗不行均值不恒定。但如果两段均值相同、只是方差不同均值平稳成立各态历经可能被破坏——时间平均和集合平均在某些统计量上会分道扬镳。3.4 实测数据平稳性的快速体检法我拿到一段实测数据很少直接上谱分析。先做三件事成本低又能避开大坑分段看均值把数据切成几段每段单独算均值。如果某段明显偏离说明有趋势项或者分段不平稳先做去趋势或者重新截取。分段看方差能量同样分段计算方差观察是否大致稳定。语音信号的能量会随时间剧烈波动所以在做语音频域分析时要先分帧每一帧内才近似平稳——这个处理本身就是平稳性假设的工程妥协。分段估计自相关把各段的自相关函数画在一起看它们是否大致重合。如果差异很大说明相关结构在变不能当作平稳过程处理。这些做法不是严格的假设检验但能快速暴露明显的非平稳性。我最早做雷达杂波分析时没有做这一步直接对整个观测窗口做功率谱估计结果谱形状乱得没法解释。后来分帧一看某些时段杂波强度发生了阶跃变化整段数据根本不是一个平稳过程——这个教训非常深刻。4. 自相关函数与功率谱密度——贯穿整个信号处理生涯的黄金搭档4.1 自相关函数信号里的“记忆”与“周期痕迹”先看自相关函数的定义在平稳条件下变成什么样子R_XX(τ) E[X(t)X(t τ)]它衡量的是“相隔τ的两个时刻的取值有多像”。几个直观性质可以帮助你建立图像τ 0 时R_XX(0) E[X²(t)]正好是信号的平均功率。这是自相关函数能直接告诉你的一条信息——信号有多“强”。自相关函数是偶函数R_XX(-τ) R_XX(τ)关于纵轴对称。极大值出现在 τ 0任何信号和自己“零延迟”时最相似。如果信号含有周期成分自相关函数会体现出周期性并且这种周期性在 τ 很大时仍然存在。相比之下不相关的随机成分会让自相关迅速衰减到零。最后这一点在实践中特别重要。假设一个正弦信号淹没在强噪声里你在时域波形里根本看不出正弦的痕迹但自相关函数能把它“捞”出来——噪声成分的自相关在τ稍大后趋近于零而正弦成分的自相关则保持着周期性振荡。我做过一个微弱信号检测的小实验20dB的噪声背景下时域上完全看不出周期性自相关函数却明明白白显示了正弦的周期结构。这就是从数据里提取“记忆性”的典型案例。4.2 维纳-辛钦定理时域相关与频域功率之间的桥维纳-辛钦定理是随机信号分析的定海神针内容极其简洁对于广义平稳随机过程其功率谱密度与自相关函数是一对傅里叶变换对S_XX(ω) ∫_{-∞}^{∞} R_XX(τ) e^{-jωτ} dτR_XX(τ) (1 / 2π) ∫_{-∞}^{∞} S_XX(ω) e^{jωτ} dω这个定理的工程意义怎么强调都不过分。它告诉你随机信号在频域上的能量分布完全由它在时域上的相关结构决定。如果一个信号在时间上关联弱自相关衰减快它在频域上就会铺得很宽如果一个信号在时间上关联强自相关拖得很长它在频域上就会集中在低频区域。这条关系是后续无数技术的理论出发点匹配滤波器设计、维纳滤波器、线性预测、现代谱估计全部站在这个傅里叶变换对上。理解了这一对关系你再去看那些看起来高深的算法会发现它们很多时候都在做同一件事——通过某种手段估计自相关函数然后变换到频域或者直接在频域操作等效地完成相关结构的建模。4.3 为什么随机信号不能直接做傅里叶变换这是初学阶段最容易困惑、又极少被讲透的问题。确定性信号的傅里叶变换要求信号满足绝对可积或至少能量有限的条件。而随机过程的一条样本函数本质上是在无限长时间上持续起伏的总能量趋向无穷。直接对它做傅里叶变换积分根本不收敛——你得不到一个有意义的频谱。就算退一步只截取一段有限长样本做FFT问题依然存在你得到的频谱会随截取段的不同而剧烈变化它是随机的。你想用这个随机的结果来代表整个过程的频域特性方差大到难以接受。功率谱密度就是绕开这个困境的工具。它不直接变换样本函数本身而是先求自相关函数——一个统计平均量——再对它做傅里叶变换。因为自相关函数在平稳条件下只依赖于延迟τ而且在大多数情况下随|τ|增大而衰减衰减够快就能满足傅里叶变换的条件。这样一来“随机”被平均抵消了“频域特征”保留了下来。4.4 功率谱密度到底在描述什么功率谱密度 S_XX(ω) 的物理含义可以这样理解它是信号平均功率在频率轴上的密度。S_XX(ω) 在某个窄频带 (ω, ωdω) 上的积分近似等于该频带内信号贡献的功率。所有频率上的功率加起来就是信号的总平均功率E[X²(t)] R_XX(0) (1 / 2π) ∫ S_XX(ω) dω注意功率谱密度和确定性信号“幅度谱”的本质区别。幅度谱保留每个频率分量的幅度和相位信息而功率谱只保留功率的分布相位信息完全丢失。这也是为什么两个相位结构完全不同的信号可以拥有相同的功率谱——它们的二阶统计特性相同。当信号是高斯的这种“信息丢失”无关紧要因为二阶统计已经决定了全部统计行为但当信号的非高斯性很重要时比如某些通信调制样式识别只靠功率谱就远远不够了。5. 白噪声、高斯过程与随机游走——信号处理里最常见的几种随机模型5.1 白噪声理想化的“纯随机”白噪声是信号处理里使用频率最高的噪声模型。它的功率谱密度在所有频率上等于常数S_XX(ω) N₀ / 2。这要求自相关函数为R_XX(τ) (N₀ / 2) δ(τ)也就是说白噪声任意两个不同时刻的取值完全不相关。只要τ ≠ 0R_XX(τ) 0——这个性质让数学推导极度简化也是它在理论分析中如此重要的原因。但现实中不存在真正的白噪声因为功率谱如果真的是全频率常数总功率会无穷大。实际工程里只要噪声的功率谱在我们关注的频带内近似平坦就可以当作白噪声处理。前面提到的热噪声在几百GHz范围内功率谱都相当平坦远远超过了大多数电子系统的工作带宽所以拿白噪声模型来描述它既方便又准确。5.2 高斯过程与高斯白噪声为什么处处是它高斯过程是“性质最好”的随机过程之一因为它的任意有限维联合分布都是高斯分布。它的完整统计特性完全由均值和自相关函数决定不需要更高阶的统计量。这意味着你只要能估计出均值和相关函数就掌握了这个过程的全部信息。高斯白噪声就是把白噪声的“不相关”性质和高斯分布的“概率分布”性质结合起来。零均值高斯白噪声 W(t) 满足E[W(t)] 0R_WW(τ) σ² δ(τ)它覆盖了几乎所有现代信号处理教科书里的噪声模型。为什么高斯假设这么普遍除了数学上方便之外一个深刻的物理原因是中心极限定理——当大量独立同分布的随机因素叠加时它们的总和趋向于高斯分布。实际系统中的噪声往往来源于许多微小独立的随机扰动之和所以高斯噪声不是人为的假设而是自然界的统计规律在工程上的体现。5.3 随机游走一个典型的非平稳过程随机游走模型用递推关系定义X[n] X[n-1] W[n]其中 W[n] 是零均值独立同分布的随机扰动通常假设为高斯白噪声。把这个递推展开X[n] 是过去所有扰动之和X[n] Σ_{k1}^{n} W[k]它的均值为0但方差随时间线性增长Var(X[n]) nσ²。均值恒定满足平稳条件的第一条方差却一直在变大所以这个随机游走是非平稳的。不过它的差分信号 X[n] - X[n-1] W[n] 是平稳的白噪声。这个模型在工程里经常“潜伏”出现比如某些惯性传感器的漂移、时钟的相位抖动、市场价格等累积型过程。处理这类信号时直接分析原始序列会很麻烦标准的做法是先做一阶差分把累积项消掉再对差分后的平稳序列做谱分析或参数估计。这就是所谓的“差分平稳化”在时间序列分析里是基础中的基础。5.4 马尔可夫过程卡尔曼滤波的概率论地基马尔可夫过程描述了一类带有“一层记忆”的随机过程满足马尔可夫性给定当前状态未来与过去条件独立。用条件概率写就是P(X[n1] | X[n], X[n-1], …, X[0]) P(X[n1] | X[n])这意味着系统的状态每走一步只携带了“最近一步”的信息。就像排队时你只用知道自己现在站在哪儿、要往哪儿走不需要记得自己排了多久的队。这个性质在卡尔曼滤波里是核心假设。状态方程 xₖ Fxₖ₋₁ wₖ 本身就暗含了马尔可夫性——当前状态由上一时刻状态和过程噪声决定更早的历史信息全部被吸收在 xₖ₋₁ 里。正是这个假设让卡尔曼滤波可以采用递推方式处理数据每一步只需要结合当前时刻的观测和上一时刻的状态估计而不用存储和重算全部历史数据。理解了马尔可夫性再看卡尔曼滤波的“预测-更新”结构就完全顺理成章了。6. 理论落地用Python把随机信号分析完整跑一遍6.1 用正弦加噪声造一个典型观测信号理论讲再多不落到代码上总觉得隔了一层。我习惯用一个经典场景来演示50Hz正弦信号被宽带高斯白噪声污染信噪比很低从波形上根本看不出周期成分。import numpy as np import matplotlib.pyplot as plt fs 1000 # 采样率 1000 Hz T 2 # 时长 2 秒 N fs * T # 总采样点数 t np.arange(N) / fs f0 50 # 正弦频率 50 Hz x np.sin(2 * np.pi * f0 * t) # 确定性信号 noise 0.5 * np.random.randn(N) # 高斯白噪声 y x noise # 观测信号 plt.figure(figsize(10, 4)) plt.plot(t[:500], y[:500], lw0.8) plt.xlabel(t / s) plt.ylabel(amplitude) plt.title(Observed signal: sine wave Gaussian white noise) plt.tight_layout() plt.show()画出来的波形是一团毛刺肉眼完全看不出50Hz的周期。这正是实际工程中经常遭遇的局面——信号被淹没在噪声里必须用统计工具才能把特征提取出来。6.2 自相关估计实操先减均值再谈相关用一条有限长样本估计自相关函数有一个细节最容易被忽略先去均值。如果不去均值零延迟处会有一个由直流分量造成的巨大峰值它会把其他延迟处的相关结构全部掩盖掉你什么都看不出来。def estimate_autocorr(x, max_lagNone): if max_lag is None: max_lag len(x) // 2 x x - np.mean(x) # 关键去均值 n len(x) # np.correlate(x, x, modefull) 得到完整互相关取后半部分对应非负延迟 result np.correlate(x, x, modefull)[n-1 : n max_lag] / n return result tau np.arange(0, 300) rxx estimate_autocorr(y, max_lag300) plt.figure(figsize(10, 4)) plt.plot(tau / fs, rxx, lw1.2) plt.xlabel(lag / s) plt.ylabel(Rxx(lag)) plt.title(Autocorrelation estimate) plt.tight_layout() plt.show()注意一个细节上面的估计是对 n 做除法而不是对 (n - |τ|) 做除法。前者得到的是有偏估计后者是无偏估计。有偏估计在延迟τ较大时偏差更明显但它保证了估计结果对应的功率谱是非负的半正定性这一点在后续谱分析中非常重要。实际处理中只要延迟τ远小于数据长度n两者差别不大用有偏估计也没有问题。从自相关函数图像上你能看到一个非常有意思的现象虽然原波形看不出周期性自相关函数却呈现出明显的衰减振荡振荡周期恰好对应50Hz正弦的周期20ms。这就是自相关“提取周期痕迹”的能力——不相关噪声的贡献在τ增大后迅速衰减正弦的贡献保留了下来。6.3 功率谱估计从周期图到Welch方法估计功率谱最直接的方法是周期图法把样本信号的FFT结果取模平方再除以采样率和长度得到功率谱密度的粗糙估计nfft len(y) Y np.fft.fft(y - np.mean(y), nfft) psd (np.abs(Y) ** 2) / (fs * nfft) # 单边功率谱密度 freqs np.fft.fftfreq(nfft, 1 / fs)[:nfft // 2] plt.figure(figsize(12, 4)) plt.subplot(1, 2, 1) plt.plot(freqs, psd[:nfft // 2] * 2, lw0.8) plt.xlabel(freq / Hz) plt.ylabel(PSD) plt.title(Periodogram (raw FFT)) plt.yscale(log)周期图法原理上没问题但有一个致命弱点方差太大。它等效于用一个窗口去截取样本可用的数据量就那么多估计结果起伏剧烈谱峰周围的毛刺甚至会遮挡真实结构。实际操作里我更推荐Welch方法——把长样本分成多段每段加窗、做FFT、取模平方然后把所有段的功率谱做平均。方差能显著压下来代价是频率分辨率变差。scipy里已经封装好了from scipy.signal import welch f_w, psd_w welch(y, fsfs, nperseg1024, noverlap512, return_onesidedTrue) plt.subplot(1, 2, 2) plt.plot(f_w, psd_w, lw1.2) plt.xlabel(freq / Hz) plt.ylabel(PSD) plt.title(Welch PSD estimate) plt.yscale(log) plt.tight_layout() plt.show()Welch结果的光滑程度明显好很多50Hz处的谱峰清晰可见噪声底平坦稳定。参数上nperseg越大频率分辨率越好但参与平均的段数越少方差越大noverlap通常取nperseg的50%比较平衡。工程中可以根据需要的分辨率和可接受的方差来调这两个参数。6.4 三个能帮你少走弯路的实操提醒第一频率分辨率和数据长度绑定。分辨率的理论上限大约等于 fs / N其中N是数据点数。如果你用10kHz采样率采了0.1秒数据最多只有1000个点FFT频率分辨率也就10Hz。想分辨更细的谱结构加长观测时间才是根本光靠补零是“画”不出真实分辨率以外的细节的。第二周期图法方差大是正常现象。我第一次看到周期图结果的巨大起伏时以为代码写错了。后来才知道周期图是功率谱的“一致估计”吗不是它是渐近无偏但方差不减的估计量——数据再多方差也不降。所以看到一个毛刺横生的周期图不要怀疑算法直接用Welch或分段平均来压方差这才是正道。第三去均值是一切频域分析的前置动作。即使信号本身没有直流分量样本均值也可能因为截断而偏离零。留在数据里的直流分量经过FFT后会泄漏到整个频带在谱图上表现为一条从零频开始衰落的“斜坡”遮盖低频信息。所以我在所有频谱估计前都会无条件做一次去均值成本极低收益极大。我最早做噪声分析时就是在原始数据上直接FFT谱图上出现一条怎么也解释不了的大斜线调了半天参数都没用。最后把均值一减世界瞬间清净了。这种小坑掉一次就长记性了——希望你能直接绕过去。
返回列表