dvv做fft输出正常结果但地下水GW序列fft结果全为nan,应如何解决?
问题原因排查及解决方法
- 第一步:检查GW序列的异常值
你给出的5条示例GW值本身是正常的,直接做FFT不会输出nan,首先要确认完整GW序列中是否存在缺失值、空值或无穷值,执行以下代码排查:
print(np.isnan(gw_array).any()) print(np.isinf(gw_array).any())
如果返回True,说明序列中存在异常值,可删除异常值对应的行,或用线性插值、均值填充等方式补全后再运算。
- 第二步:验证归一化逻辑的正确性
归一化到[-1,1]区间时如果原始GW序列的最大值等于最小值,会出现分母为0的情况,导致归一化后全为无穷值,FFT运算后全部转为nan。可通过打印原始GW的极差验证:
print(gw_raw.max() - gw_raw.min())
如果极差为0,说明GW序列无波动,无需做FFT分析;如果极差正常,可使用以下正确的归一化代码重新处理:
gw_min = gw_raw.min() gw_max = gw_raw.max() gw_normalized = 2 * (gw_raw - gw_min) / (gw_max - gw_min) - 1
- 第三步:检查数据类型和FFT调用参数
首先确认GW序列的存储类型为数值型,而非字符串或object类型:
print(gw_normalized.dtype)
如果输出不是float32或float64,执行转换:
gw_normalized = gw_normalized.astype(np.float64)
其次确认调用FFT时的参数和dvv序列一致,你提供的结果中dvv的FFT输出长度为12,GW为36,说明两次调用的nfft参数可能不一致,或者GW序列做插值、补零操作时生成了异常值。
验证参考
你提供的5条GW测试数据执行FFT的正常结果如下,无任何nan值,说明问题完全出在你完整序列的预处理环节:
array([-0.568517+0.j , 0.070039+0.08498845j, 0.006296+0.02682016j, 0.006296-0.02682016j, 0.070039-0.08498845j])
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

