如何在不镜像自相关函数的情况下计算向量值过程的功率谱密度?
嘿,我懂你在处理2D奥恩斯坦-乌伦贝克过程时的纠结——用维纳-辛钦定理算PSD时,要不要给自相关函数做镜像确实是个容易搞混的点。咱们先回顾下你的思路:你已经在遵循维纳-辛钦定理,定义的速度自相关函数(VACF)是:
$$ R(\tau) = \frac{1}{T - \tau} \int_0^{T - \tau} \langle \mathbf{v}(t) \cdot \mathbf{v}(t + \tau) \rangle dt $$
接下来要做FFT得到PSD,但不想镜像自相关函数?这里有几个实用的办法:
利用FFT性质直接修正单边自相关的结果
对于平稳的实值向量过程,自相关函数是偶函数(即 ( R(-\tau) = R(\tau) )),但你现在只计算了 ( \tau \geq 0 ) 的单边自相关。不用手动复制镜像部分,直接对这段单边自相关做FFT后,只需对结果做幅度修正:- 直流分量(频率为0)的PSD值就是 ( R(0) );
- 对于0到奈奎斯特频率之间的正频率,PSD值取FFT结果实部的2倍;
- 如果采样点数是偶数,奈奎斯特频率对应的PSD值直接取FFT结果的实部即可。
这样就能得到符合物理意义的PSD,完全绕开了镜像操作。
直接对速度时间序列做FFT(跳过自相关计算)
维纳-辛钦定理只是PSD的一种计算路径,你也可以用周期图法直接从原始数据入手,全程不用碰自相关函数:- 把你的向量速度序列 ( \mathbf{v}(t) ) 拆成若干段(可以重叠也可以不重叠,重叠能降低PSD方差);
- 给每一段加窗(比如汉宁窗,减少频谱泄漏),然后对x、y分量分别做FFT;
- 对每个频率点,计算所有段FFT模值平方的平均值;
- 最后把x、y分量的PSD相加,就得到向量点积对应的总PSD了。
这种方法不仅不用处理自相关的镜像问题,实际计算效率也更高,尤其是数据量很大的时候。
拆分向量分量分别处理
因为向量点积的自相关等于各分量自相关之和(( \langle \mathbf{v}(t) \cdot \mathbf{v}(t+\tau) \rangle = \langle v_x(t)v_x(t+\tau) \rangle + \langle v_y(t)v_y(t+\tau) \rangle )),你可以分别计算x、y分量的单边自相关,各自按第一种方法修正FFT结果后再相加,这样拆分处理更不容易出错,也不用考虑向量运算带来的额外复杂度。
需要提醒的是:如果坚持从单边自相关出发做FFT,一定要记得利用平稳过程的自相关对称性修正幅度,不然得到的PSD幅度会只有正确值的一半(除了直流和奈奎斯特频率)。
内容来源于stack exchange

