数组实现信号卷积平滑即用NumPy的np.convolve对一维信号与归一化核(如均值核)卷积,mode='same'保持长度并补零;可提取峰值位置、一阶差分均值、过零点数等特征,二维则用convolve2d配合二维核,需注意边界处理、核归一化及趋势预处理。
用数组实现信号卷积平滑,核心是把原始信号看作一维数组,用一个小的权重数组(卷积核)在它上面滑动、加权求和。这个过程天然适合提取局部趋势、抑制噪声、突出变化特征——比如峰值位置、上升沿斜率、周期性强度等。
用 NumPy 数组完成标准卷积平滑
不需要写循环,直接调用
np.convolve
即可完成一维信号平滑:
准备信号数组:例如
设计平滑核:常用均值核
或高斯核
执行卷积:
(
保持输出长度与输入一致,自动补零)
注意:若用
,结果会变短,适用于只保留完全重叠区域的严格计算
从平滑结果中提取关键变量特征
平滑不是目的,而是为后续分析铺路。常见可提取的变量包括:
局部极值点坐标
:用
获取峰值位置和高度,可用于定位事件时刻或异常强度
一阶差分绝对值均值
:计算
,反映信号整体活跃度或波动剧烈程度
过零点数量
:统计
的长度,粗略表征振荡频率
平滑前后信噪比变化
:若已知原始无噪信号,可用
量化降噪效果
二维信号(如图像/格点场)的平滑与特征提取
对气象、遥感等二维数据,用
scipy.signal.convolve2d
更合适:
构造二维均值核:
执行平滑:
特征可转为标量:如计算平滑后场的方差(空间异质性)、梯度模长均值(边缘强度)、最大连通区域面积(目标尺度)等
避免常见陷阱
实际操作中容易忽略但影响特征可靠性的细节:
边界处理方式直接影响首尾特征值——
补零会压低边缘幅度,必要时改用
或先镜像延拓
卷积核必须归一化(和为1),否则会系统性放大或缩小信号幅值,干扰后续幅度类特征
若原始信号含趋势项(如缓慢上升),建议先用高通滤波或减去移动平均,再平滑,否则平滑会掩盖真实趋势
特征提取前确认平滑参数合理:核宽太小→去噪不足;太大→抹平关键细节。可通过观察残差
的频谱辅助判断
x = np.array([1, 2, 4, 3, 5, 6, 4, 2])kernel = np.array([1, 1, 1]) / 3kernel = np.array([0.25, 0.5, 0.25])y = np.convolve(x, kernel, mode='same')mode='same'mode='valid'scipy.signal.find_peaks(smoothed_signal)np.mean(np.abs(np.diff(smoothed_signal)))np.where(np.diff(np.sign(smoothed_signal)))[0]10 * np.log10(np.var(clean)/np.var(noisy - smoothed))kernel_2d = np.ones((3, 3)) / 9smoothed_2d = convolve2d(data_2d, kernel_2d, mode='same', boundary='fill', fillvalue=0)mode='same'boundary='reflect'noisy - smoothed