交叉频谱和幅值平方相干性
此示例说明如何使用交叉频谱来获得二元时间序列中正弦分量之间的相位滞后。此示例还使用幅值平方相干性在各个正弦波频率处识别显著频域相关性。
创建二元时间序列。每个序列都由频率分别为 100 和 200 Hz 的两个正弦波组成。这些序列带有加性高斯白噪声,采样频率为 1 kHz。x 序列中的正弦波振幅都等于 1。y 序列中的 100 Hz 正弦波振幅为 0.5,y 序列中的 200 Hz 正弦波振幅为 0.35。y 序列中的 100 Hz 和 200 Hz 正弦波的相位滞后分别为 弧度和 弧度。您可以将 y 序列视为输入为 x 的线性系统被噪声损坏的输出。采用随机数生成器的默认设置,以获得可重现的结果。
rng default
Fs = 1000;
t = 0:1/Fs:1-1/Fs;
x = cos(2*pi*100*t) + sin(2*pi*200*t) + 0.5*randn(size(t));
y = 0.5*cos(2*pi*100*t - pi/4) + 0.35*sin(2*pi*200*t - pi/2) + 0.5*randn(size(t));
获得二元时间序列的幅值平方相干性估计。幅值平方相干性使您能够识别两个时间序列之间的显著频域相关性。交叉频谱中的相位估计仅在存在显著频域相关性的情况下有用。
为了防止在所有频率处获得的幅值平方相干性估计都等于 1,必须使用平均相干性估算器。韦尔奇交叠分段平均法 (WOSA) 和多窗谱法均适用。mscohere
可实现 WOSA 估算器。
将窗长度设置为 100 个采样点。此窗长度包含 10 个周期的 100 Hz 正弦波和 20 个周期的 200 Hz 正弦波。使用默认的汉明窗,重叠长度为 80 个采样点。显式输入采样率以获得单位为 Hz 的输出频率。绘制幅值平方相干性。在 100 和 200 Hz 处,幅值平方相干性大于 0.8。
[Cxy,F] = mscohere(x,y,hamming(100),80,100,Fs); plot(F,Cxy) title('Magnitude-Squared Coherence') xlabel('Frequency (Hz)') grid
使用 cpsd
获得 x 和 y 的交叉频谱。使用相同的参数获得您在相干性估计中使用的交叉频谱。当相干性很小时,忽略交叉频谱。绘制交叉频谱的相位,并指出在两个时间点间具有显著相干性的频率。标记已知的正弦分量间相位滞后。在 100 Hz 和 200 Hz 时,根据交叉频谱估计的相位滞后接近真实值。
[Pxy,F] = cpsd(x,y,hamming(100),80,100,Fs); Pxy(Cxy < 0.2) = 0; plot(F,angle(Pxy)/pi) title('Cross Spectrum Phase') xlabel('Frequency (Hz)') ylabel('Lag (\times\pi rad)') grid