You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Pandas相关系数计算结果偏低?求更优相关性分析方案

问题分析与解决方案

一、皮尔逊相关系数偏低的原因

  • 皮尔逊相关系数本质是衡量线性相关性,但你的数据是高斯白噪声叠加极弱的正弦调制(幅度仅为0.002倍),整体无明显线性趋势,因此无法捕捉这种周期性关联。
  • 噪声强度远高于信号幅度:高斯白噪声的方差通常远大于微弱正弦信号的能量,噪声会稀释皮尔逊系数的计算结果,导致数值偏低。

二、体现周期性高相关性的计算方法

1. 互功率谱密度(CPSD)

通过频域分析聚焦目标调制频率的相关性,若该频率处出现显著峰值,说明二者在该频率上高度关联:

import numpy as np
import scipy.signal as signal

# 替换为实际采样频率
sampling_freq = 1000  

# 计算互功率谱密度
freq, cpsd = signal.csd(
    saved_data_DAQ.iloc[2500].values,
    sine_modulation(time_measurement, modulation_frequency_axion),
    fs=sampling_freq
)

# 定位目标频率对应的CPSD值
target_freq_idx = np.argmin(np.abs(freq - modulation_frequency_axion))
target_cpsd = np.abs(cpsd[target_freq_idx])

2. 相位锁定值(PLV)

专注于信号的相位同步性,不受幅度差异影响,适合检测噪声中极弱的同频振荡:

from scipy.signal import hilbert

# 希尔伯特变换提取解析信号
data_hilbert = hilbert(saved_data_DAQ.iloc[2500].values)
sine_hilbert = hilbert(sine_modulation(time_measurement, modulation_frequency_axion))

# 计算相位差的平均余弦值(PLV)
data_phase = np.angle(data_hilbert)
sine_phase = np.angle(sine_hilbert)
phase_diff = data_phase - sine_phase
plv = np.abs(np.mean(np.exp(1j * phase_diff)))

PLV值越接近1,说明两个信号在目标频率上的相位同步性越强。

3. 时域互相关峰值检测

计算两个信号的互相关函数,零延迟处的峰值可反映同频同相信号的关联程度:

xcorr = np.correlate(
    saved_data_DAQ.iloc[2500].values,
    sine_modulation(time_measurement, modulation_frequency_axion),
    mode='full'
)
lags = np.arange(-len(xcorr)//2, len(xcorr)//2)

# 获取零延迟位置的互相关值
zero_lag_idx = np.argmin(np.abs(lags))
zero_lag_corr = xcorr[zero_lag_idx]

若零延迟处的互相关值显著高于随机噪声的互相关水平,说明目标信号存在关联。

三、检测噪声中振荡成分的指标

若0.23的皮尔逊系数是合理结果(因信号确实极弱),可通过以下指标检测振荡成分:

  • 功率谱密度(PSD):直接观察目标频率处是否存在明显峰值,峰值显著高于噪声基底则说明存在该频率的振荡。
  • 小波变换:可同时定位振荡成分的时间和频率分布,适合非平稳信号的检测。
  • 同步似然性:衡量信号间的非线性同步性,能有效检测弱耦合的振荡成分。
  • F检验(正弦模型拟合):将数据拟合为「噪声+正弦信号」模型,通过F检验判断正弦项是否具有统计显著性。

内容的提问来源于stack exchange,提问作者Juan Pablo Arcila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:15:13