利用Python实现SG平滑滤波。
SG滤波的原理和理解过程见:

https://blog.csdn.net/schuffel/article/details/85239770
https://zhuanlan.zhihu.com/p/78848809
https://blog.csdn.net/qq_43790749/article/details/104970482

感谢各位大佬,理解半天才明白。

整个过程其实就是最小二乘法解多项式拟合
假设有一组数据,如下表所示:xi表示样本点的位置,yi表示样本点在xi这个位置对应的值,一共2m+1个样本点。
利用下面这个k-1阶多项式进行拟合数据。

python代码:

# -*- coding: utf-8 -*-
# @Time    : 2022/3/19 9:59
# @Author  : Zhang Min
# @FileName: SG滤波.py
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import savgol_filterSize = 100
x = np.linspace(0, 2 * np.pi, 100)
data = np.sin(x) + np.random.random(100) * 2# 利用SG滤波库savgol_filter
plt.plot(x, data, color = 'y', label = 'pre_filter data')
y = savgol_filter(data, 59, 3, mode = "nearest")
plt.plot(x, y, "b--", label = "sg")# 自我实现代码 并比SG滤波代码库进行比较
# 3阶多项式
k = 3
# 滑动窗口大小
window_size = 59
# 前后各m个数据,共2m+1个数据,作为滑动窗口内滤波的值
m = int((window_size - 1) / 2)  # (59-1)  /2 = 29# 计算 矩阵X 的值 ,就是将自变量x带进去的值算 0次方,1次方,2次方.....k-1次方,一共window_size行,k列
# 大小为(2m+1,k)
X_array = []
for i in range(window_size):  #arr = []for j in range(3):X0 = np.power(-m + i, j)arr.append(X0)X_array.append(arr)X_array = np.mat(X_array)
# B = X*(X.T*X)^-1*X.T
B = X_array * (X_array.T * X_array).I * X_array.T
print(B.shape)data = np.insert(data, 0, [data[0] for i in range(m)])  # 首位插入m-1个data[0]
data = np.append(data, [data[-1] for i in range(m)])  # 末尾插入m-1个data[-1]# 取B中的第m行 进行拟合  因为是对滑动窗口中的最中间那个值进行滤波,所以只要获取那个值对应的参数就行, 固定不变
B_m = B[m]  # (1,59):(1,2m+1)
print(data.shape)
# 存储滤波值
y_array = []
# 对扩充的data 从第m个数据开始遍历一直到(data.shape[0] - m)  :(第m个数据就是原始data的第1个,(data.shape[0] - m)为原始数据的最后一个
for n in range(m, data.shape[0] - m):y_true = data[n - m: n + m + 1]  # 取出真实y值的前后各m个,一共2m+1个就是滑动窗口的大小y_filter = np.dot(B_m, y_true)  # 根据公式 y_filter = B * X 算的  X就是y_true  (1,59) * (59,1) = (1,1)y_array.append(float(y_filter)) # float(y_filter) 从矩阵转为数值型print(y_array)
plt.plot(x, y_array,"g", "o")
plt.legend()
plt.show()

python实现SG滤波相关推荐

  1. python中值滤波去除椒盐噪声_python 中值滤波,椒盐去噪,图片增强实例

    受光照.气候.成像设备等因素的影响,灰度化后的图像存在噪声和模糊干扰,直接影响到下一步的文字识别,因此,需要对图像进行增强处理.图片预处理中重要一环就是椒盐去澡,通常用到中值滤波器进行处理,效果很好. ...

  2. python均值滤波_opencv+python实现均值滤波

    本文实例为大家分享了opencv+python实现均值滤波的具体代码,供大家参考,具体内容如下 原理 均值滤波其实就是对目标像素及周边像素取平均值后再填回目标像素来实现滤波目的的方法,当滤波核的大小是 ...

  3. python 点云配准,python点云滤波 点云配准用python怎

    点云配准用python怎么样 点云配准过程,就是分享一个两个点云之间的旋转平移矩阵(rigid transform or euclidean transform 刚性变换或欧式变换),将源点云(sou ...

  4. 高斯滤波详解 python实现高斯滤波

    一. 高斯滤波 高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用.在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声. ...

  5. python实现均值滤波_opencv+python实现均值滤波

    本文实例为大家分享了opencv+python实现均值滤波的具体代码,供大家参考,具体内容如下 原理 均值滤波其实就是对目标像素及周边像素取平均值后再填回目标像素来实现滤波目的的方法,当滤波核的大小是 ...

  6. python 曲线平滑滤波

    python 曲线平滑滤波 Savitzky-Golay滤波器 import numpy as np import matplotlib.pyplot as plt import scipy.sign ...

  7. python实现均值滤波_python如何实现均值滤波?

    均值滤波:典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代 ...

  8. python中值滤波去除反光_Python 实现中值滤波、均值滤波的方法

    红包: Lena椒盐噪声图片: # -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 @auth ...

  9. python一维平滑滤波_高斯滤波器的原理及其实现过程(附模板代码)

    本文主要介绍了高斯滤波器的原理及其实现过程高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像.其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出.其窗口模板的系数和均值滤波器不同 ...

  10. python中值滤波介绍_Python 实现中值滤波、均值滤波的方法

    红包: Lena椒盐噪声图片: # -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 @auth ...

最新文章

  1. 【浸入式英文学习方式】山姆莱萌帮助孩子建立扎实语言功底
  2. ThinkPHP采用模块和操作
  3. 学习笔记(07):Python网络编程并发编程-客户端与服务端代码bug修复
  4. hive中实现行转列_Hive之行转列lateral view用法
  5. [aaronyang原创] Mssql 一张表3列的sql面试题,看你sql学的怎么样
  6. 语音识别实验报告.docx
  7. hadoop相关问题
  8. 关于样本量的快速证明
  9. Android Studio - xml布局文件不显示代码怎么办?
  10. 解决办法:对avcodec_parameters_from_context未定义的引用
  11. 入选《PHP领域内容榜》,感谢CSDN,感谢各位浏览过我的朋友
  12. mysql foxpro_|DBSync for FoxPro and MySQL(数据库同步工具)下载v4.7.1免费版 - 欧普软件下载...
  13. utm坐标和经纬度转换_【技术】经纬度WGS84地理坐标系转换成CGCS2000坐标系步骤...
  14. 记录金盾专用播放器加密视频提取工具逆向分析过程二
  15. word文档打破折号
  16. 说话人识别VAD算法概述
  17. 二叉树Ⅰ · 树型结构 · 二叉树 · 满二叉树 · 完全二叉树 · 二叉树的性质 · 二叉树的存储
  18. 电力窃漏电用户自动识别(SPSS Modeler)
  19. linux中convert用法
  20. MySql Workbench数据库导出和导入

热门文章

  1. java间接调用_无法解析类型 java.util.Map$Entry。从必需的 .class 文件间接引用了它...
  2. kkrieger(100k的3DFPS游戏)+机器码游戏+97年编程第一名作品以及新的最牛的GAE云计算
  3. win10查看所有的wifi密码。
  4. 《赖氏经典英语语法》第四集
  5. 抖音头像有钩什么意思,抖音上有黄勾和蓝勾什么意思
  6. el-checkbox-group 的坑
  7. Excel如何批量删除工作表中的所有空列
  8. 如何将Matlab中命令窗口中的数据保存到一个文档中
  9. win7安装打印机 计算机,Win7如何安装网络打印机丨Win7安装网络打印机解决方法...
  10. mysql etimedout_ETIMEDOUT