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

Python中Whittaker–Shannon(sinc)插值是否已有现成实现?

Whittaker–Shannon插值的Scipy实现方案

Scipy的interp1d确实没有内置Whittaker–Shannon插值的选项,但你有两种可行的实现方式:

1. 手动实现(适用于均匀采样场景)

Whittaker–Shannon插值基于奈奎斯特采样定理,核心公式是采样点的sinc函数加权求和,对于均匀采样的数据,手动实现非常直接:

import numpy as np

def whittaker_shannon_interp(x, y, x_new):
    # 假设输入x是均匀间隔的采样点
    dx = x[1] - x[0]
    # 生成sinc权重矩阵
    sinc_weights = np.sinc((x_new[:, np.newaxis] - x) / dx)
    # 加权计算插值结果
    return np.dot(sinc_weights, y)

如果是非均匀采样的场景,公式需要调整为带权重的sinc求和,但这种情况Whittaker–Shannon的理论假设不成立,实际应用价值有限。

2. 利用Scipy的信号处理工具

如果你处理的是时域信号,Scipy的scipy.signal.resample本质上就是基于Whittaker–Shannon插值实现的,它可以直接将采样信号重采样到指定点数,等价于完成插值操作。

关于为什么interp1d不包含该算法

虽然Whittaker–Shannon在理论上很重要,但实际应用中存在明显局限性:

  • 严格依赖奈奎斯特采样准则,对非均匀采样数据效果很差
  • 计算量随采样点数量线性增长,大样本场景下效率远低于样条、线性插值
  • sinc函数的旁瓣会引发吉布斯现象,导致插值结果出现不必要的振荡

这些原因使得它没有成为interp1d的常规选项,更多用于信号处理领域的重采样场景。

内容的提问来源于stack exchange,提问作者user171780

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:50:33