数据平滑处理-均值|中值|Savitzky-Golay滤波器
均值滤波器
# 1. 均值滤波函数
def moving_average(data, window=5):
size = window - 1
arr_value = list(data.values)
fill_left = arr_value[0]
for i in range(size):
arr_value.insert(0, fill_left)
dat = pd.Series(arr_value)
dat_roll = dat.rolling(window).mean()
return dat_roll.dropna().reset_index(drop=True)
具体应用到数据上:高频数据未完全拟合,其他数据也与源数据拟合程度一般

中值滤波器
具体的python实现代码如下:
# 2. 中值滤波函数
def median_filter(data: pd.Series, window=5):
return pd.Series(scipy.signal.medfilt(data, window))
应用到数据上:中值滤波将高频拟合,其他数据也与源数据拟合程度一般

SG滤波器

对曲线进行平滑处理,通过Savitzky-Golay 滤波器,可以在scipy库里直接调用,不需要再定义函数。
python代码实现:
from scipy.signal import savgol_filter
# 3. Savitzky-Golay滤波函数
newans = savgol_filter(data, 5, 3, mode= 'nearest') plt.plot(index,data,label='源网络流量',color='r',linestyle='-',marker='*')
plt.plot(index,newans,label='SG滤波网络流量',color='b')#添加linestyle设置线条类型
plt.legend()
plt.show()
# 备注:
data:代表曲线点坐标(x,y)中的y值数组
window_length:窗口长度,该值需为正奇整数。例如:此处取值5
k值:polyorder为对窗口内的数据点进行k阶多项式拟合,k的值需要小于window_length。例如:此处取值3
mode:确定了要应用滤波器的填充信号的扩展类型。(This determines the type of extension to use for the padded signal to which the filter is applied. )

python原理手写代码实现:
# 3. Savitzky-Golay滤波函数
"""
data - list格式的1×n纬数据
window_size - 拟合的窗口大小
rank - 拟合多项式阶次
ndata - 修正后的值
"""
def savgol(data: list, window_size: int, rank: int):
m = int((window_size - 1) / 2)
odata = data[:]
# 处理边缘数据,首尾增加m个首尾项
for i in range(m):
odata.insert(0, odata[0])
odata.insert(len(odata), odata[len(odata)-1])
# 创建X矩阵
x = create_x(m, rank)
# 计算加权系数矩阵B
b = (x * (x.T * x).I) * x.T
a0 = b[m]
a0 = a0.T
# 计算平滑修正后的值
ndata = []
for i in range(len(data)):
y = [odata[i + j] for j in range(window_size)]
y1 = np.mat(y) * a0
y1 = float(y1)
ndata.append(y1)
return ndata """
创建系数矩阵X
size - 2×size+1 = window_size
rank - 拟合多项式阶次
x - 创建的系数矩阵
"""
def create_x(size, rank):
x = []
for i in range(2 * size + 1):
m = i - size
row = [m**j for j in range(rank)]
x.append(row)
x = np.mat(x)
return x newans = savgol(list(data), 5, 3) plt.plot(index,data,label='源网络流量',color='r',linestyle='-',marker='*')
plt.plot(index,newans,label='SG滤波网络流量',color='b')#添加linestyle设置线条类型
plt.legend()
plt.show()
应用到数据上效果:此图更加接近源曲线,并且将高频部分进行平滑处理,拟合低频部分

数据平滑处理-均值|中值|Savitzky-Golay滤波器的更多相关文章
- OpenCV笔记(1)(图片读取与现实、色彩空间、基础运算、均值方差、逻辑运算、泛洪填充、均值中值及自定义平滑)
一.图片读取和显示 import cv2 as cv # 图片读取cv.imread(img_path) car_img = cv.imread("car1.png") # 图片显 ...
- java实现中值滤波均值滤波拉普拉斯滤波
目录 来对下面的图像滤波,其实就是对各个像素点进行数学运算的过程 均值滤波 中值滤波 拉普拉斯滤波 Sobel滤波 注意 来对下面的图像滤波,其实就是对各个像素点进行数学运算的过程 均值滤波 均值滤波 ...
- verilog 实现中值滤波
图像信号在形成.传输和记录的过程中,由于成像系统.传输介质.工作环境和记录设备等的固有缺陷,不可避免地产生各种类型的噪声,降低了图像的质量,进而影响后续处理(如边缘检测.图像分割.特征提取.模式识别等 ...
- 机器学习进阶-阈值与平滑-图像平滑操作(去噪操作) 1. cv2.blur(均值滤波) 2.cv2.boxfilter(方框滤波) 3. cv2.Guassiannblur(进行高斯滤波) 4. cv2.medianBlur(进行中值滤波)
1.cv2.blur(img, (3, 3)) 进行均值滤波 参数说明:img表示输入的图片, (3, 3) 表示进行均值滤波的方框大小 2. cv2.boxfilter(img, -1, (3, ...
- 基于MATLAB的中值滤波均值滤波以及高斯滤波的实现
基于MATLAB的中值滤波均值滤波以及高斯滤波的实现 作者:lee神 1. 背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤 ...
- matlab中fspecial Create predefined 2-D filter以及中值滤波均值滤波以及高斯滤波
来源: 1.https://ww2.mathworks.cn/help/images/ref/fspecial.html?searchHighlight=fspecial&s_tid=doc_ ...
- OpenCV计算机视觉学习(4)——图像平滑处理(均值滤波,高斯滤波,中值滤波,双边滤波)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice &q ...
- Atitit 图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)
Atitit 图像处理 平滑 也称 模糊, 归一化块滤波.高斯滤波.中值滤波.双边滤波) 是一项简单且使用频率很高的图像处理方法 用途 去噪 去雾 各种线性滤波器对图像进行平滑处理,相关OpenC ...
- OpenCv高斯,中值,均值,双边滤波
#include "cv.h" #include "highgui.h" #include <iostream> using namespace s ...
随机推荐
- vscode语法检查/智能代码失效
问题 使用C++编写作业时候,智能代码提示是disturb什么,没注意就选了,结果没了编写代码时候的报错提示. 查找全局并没有发现关闭了代码语法检查. 找了半天,重装一次,发现原来在这里.工作空间单独 ...
- 学习鸟哥linux私房菜--安装中文输入法fcitx
首先需要卸载前面安装的scim,查阅命令,参考网址如下 http://www.cnblogs.com/propheteia/archive/2012/06/26/2563383.html 链接中博主采 ...
- Android 12(S) 图形显示系统 - 应用建立和SurfaceFlinger的沟通桥梁(三)
1 前言 上一篇文章中我们已经创建了一个Native示例应用,从使用者的角度了解了图形显示系统API的基本使用,从这篇文章开始我们将基于这个示例应用深入图形显示系统API的内部实现逻辑,分析运作流程. ...
- golang中的pair
package main import "fmt" type Reader interface { ReadBook() } type Writer interface { Wri ...
- 使用光盘无网络搭建本地yum源仓库
目录 一:使用光盘搭建本地yum源 1,按顺序搭建本地yum源 第一步 : 搭载安装光盘 第二步 : 编辑repo yum源文件 第三步 : 检查 yum makecache 注意事项: 一:使用光盘 ...
- Hbase 项目
需求分析 1) 微博内容的浏览,数据库表设计 2) 用户社交体现:关注用户,取关用户 3) 拉取关注的人的微博内容 表结构 代码实现 1) 创建命名空间以及表名的定义 2) 创建微博内容表 3) 创 ...
- 线程池之 newSingleThreadExecutor 介绍
package com.aaa.threaddemo; import java.text.DateFormatSymbols; import java.util.concurrent.Executor ...
- 鸿蒙轻内核源码分析:文件系统FatFS
摘要:本文为大家介绍FatFS文件系统结构体的结构体和全局变量,并分析FatFS文件操作接口. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列二一 03 文件系统FatFS>,作者:zh ...
- Github上点赞90k的计算机基础、操作系统、网络笔记,赶紧收藏
最近,有粉丝发消息给我,说想要好好学习计算机,但是找不到门路啊,所以小编打算给大家推荐一些很奈斯的计算机学习的资料,希望大家赶紧收藏起来好好学习. 资料分为四份,给大家展示了部分内容,头条受限,无法全 ...
- Swift循环的介绍
循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...