分别用平均滑动窗口、指数滑动窗口、SG滤波法对含有奇异值和高斯噪声的两列数据进行去奇异值和降噪,最终拟合曲线推测函数表达式。
去噪方法理论知识参考
对第一列数据:

import matplotlib.pyplot as plt
import numpy as np
from scipy import optimize
import scipy.io as scio
%matplotlib
#防止中文乱码
plt.rcParams["font.sans-serif"] = ["Simhei"]
plt.rcParams["axes.unicode_minus"] = False
data = scio.loadmat('2 data_preprocess_practice.mat')yy3 = data["yy3"]
x = np.arange(0, 20001, 1)
#去除奇异值
def Noise_reduction(data_col) :lst = []i = 0#此处用的是3sigema的方法while i + 12 < 20001 :lst1 = data_col[i : i + 12]mean = np.mean(lst1)std = np.std(lst1)for value in lst1 :if (value - mean) >= -3 * std and (value - mean) <= 3 * std :lst.append(value)i += 12lst1 = []return lst#平均滑动去噪
#滑动平均法适用于,噪声的均值为0,真实值变化不大或线性变化的场景
def Average_sliding_denoising(arr, window_size) :#对数组进首尾扩展,以滑动窗口可以处理到首尾点,思想与图片滤波算子相似New_arr = arr[ : ]window_size = (window_size - 1) // 2for step in range(window_size) :arr.insert(step, sum(arr[ : window_size]) / window_size)arr.insert(len(arr) - step, sum(arr[len(arr) - window_size : len(arr)]) / window_size)for i in range(window_size, len(arr) - window_size) :New_arr[i - window_size] = (sum(arr[i - window_size : i + window_size + 1])) / (2 * window_size + 1)return New_arr#指数平均滑动去噪
#当误差不受观测值大小影响的话,指数滑动平均比滑动平均好;当误差随观测值大小变化时,滑动平均比指数滑动平均更好。
def Exponential_sliding_denoising(arr, weight = 0.01) :for i in range(1, len(arr)) :arr[i] = weight * arr[i] + (1 - weight) * arr[i - 1]return arr#Savitzky-Golay平滑去噪
#SG滤波法对于数据的观测信息保持的更好,在一些注重数据变化的场合会比较适用。
def create_x(size, rank):x = []for i in range(2 * size + 1):m = i - sizerow = [m ** j for j in range(rank)]x.append(row) x = np.mat(x)return xdef Savgol_Denosing(arr, window_size, rank) :New_arr = arr[ : ]m = (window_size - 1) // 2# 处理边缘数据,用边缘值首尾增加m个首尾项for step in range(m) :arr.insert(step, arr[0])arr.insert(len(arr) - step, arr[len(arr) - 1])# 创建X矩阵X = create_x(m, rank)# 计算加权系数矩阵BB = (X * (X.T * X).I) * X.T#只用更新第m个点,因此只需取B系数矩阵的第m行即可A0 = B[m].T# 计算平滑修正后的值narr = []for i in range(len(New_arr)):y = [arr[i + j] for j in range(window_size)]y1 = np.mat(y) * A0y1 = float(y1)narr.append(y1)return narr#可视化不同去噪方法的效果
def Mapping(lst, arr, arr1, arr2) :x = np.array(list(range(0, len(arr), 1)))fig = plt.figure(figsize=(15, 5))fig.set(alpha = 0.2)plt.subplot2grid((1,4), (0, 0))plt.plot(x, arr, label = 'Average_sliding_denoising')plt.legend(loc = 1)plt.subplot2grid((1, 4), (0, 1))plt.plot(x, arr1, 'g-', label = 'Exponential_sliding_denoising')plt.legend(loc = 1)plt.subplot2grid((1, 4), (0, 2))plt.plot(x, arr2, 'r-', label = 'Savgol_Denosing')plt.legend(loc = 1)plt.subplot2grid((1, 4), (0, 3))plt.plot(x, lst, 'b-', x, arr, 'pink', x, arr1, 'g', x, arr2, 'r')plt.legend(['Before Denoising', 'Exponential_sliding_denoising', 'Average_sliding_denoising', 'Savgol_Denosing'], loc = 1)plt.show()#小结,单纯从可视化效果来看,指数平均化动的效果是最好的#数据重新拟合,推测函数
def Polynomial_fitting(lst) :x1 = np.arange(0, len(lst), 1).astype(float)z1 = np.polyfit(x1, lst, 11)
#     print(np.poly1d(z1))x_points = np.linspace(0, 19973, 19973)y_point = np.polyval(z1, x_points)fig1 = plt.figure()plt.plot(x1, lst, x_points, y_point, 'r')plt.legend(['Before fitting', 'After fitting'], loc = 1)plt.show()data_col1 = []
data_col2 = []
for line in yy3 :data_col1.append(line[0])data_col2.append(line[1])data_col1 = np.array(data_col1)
data_col2 = np.array(data_col2)lst1 = Noise_reduction(data_col1)
lst1_A = Average_sliding_denoising(Noise_reduction(data_col1), 61)
lst1_E = Exponential_sliding_denoising(Noise_reduction(data_col1))
lst1_S = Savgol_Denosing(Noise_reduction(data_col1), 59, 2)
Mapping(lst1, lst1_A, lst1_E, lst1_S)
Polynomial_fitting1(lst1_A)

效果:

对第二列数据:

def Polynomial_fitting2(lst) :x1 = np.arange(0, len(lst), 1).astype(float)z1 = np.polyfit(x1, lst, 50)x_points = np.linspace(0, 19973, 19973)y_point = np.polyval(z1, x_points)fig1 = plt.figure()plt.plot(x1, lst, x_points, y_point, 'r')plt.legend(['Before fitting', 'After fitting'], loc = 1)plt.show()
lst2 = Noise_reduction(data_col2)
lst2_A = Average_sliding_denoising(Noise_reduction(data_col2), 61)
lst2_E = Exponential_sliding_denoising(Noise_reduction(data_col2))
lst2_S = Savgol_Denosing(Noise_reduction(data_col2), 59, 2)
Mapping(lst2, lst2_E, lst2_A, lst2_S)
Polynomial_fitting2(lst2_A)

效果:

对含有奇异值和高斯噪声的数据进行处理相关推荐

  1. python3给数据添加高斯噪声

    Background 高斯噪声,顾名思义是指服从高斯分布(正态分布)的一类噪声.有的时候我们需要向标准数据中加入合适的高斯噪声让数据更加符合实际. python中的random库中集成了高斯正态分布, ...

  2. 如何正确地给图像添加高斯噪声

    高斯噪声是一个均值为 0 方差为 σn2\sigma_n^2σn2​ 的正态分布,是一个加性噪声.但要正确地给图片添加高斯噪声,还要取决于程序中读入图片的数据格式. 如果图片的数据格式为 uint8, ...

  3. 向数据中添加高斯噪声

    什么是高斯噪声 高斯噪声既是符合高斯正态分布的误差.一些情况下我们需要向标准数据中加入合适的高斯噪声会让数据变得有一定误差而具有实验价值.高斯噪声还有一些其他用途但是我不太了解,这里我是为了实现多项式 ...

  4. 用python给数据加上高斯噪声

    用python给数据加上高斯噪声 1. 回顾MATLAB中的加高斯噪声 2. Python中利用numpy给数据加噪声 一开始用MATLAB给数据加噪声很简单,就一句话: % 给数据加指定SNR的高斯 ...

  5. 图像数据增强(平移,旋转,亮度变换,翻转,添加高斯噪声,缩放,裁剪)

    1.平移: import cv2 import tensorflow as tf import numpy as np from PIL import Image from skimage impor ...

  6. keras如何在验证集加噪声_如何使自定义高斯噪声层对Keras中的每一列数据施加不同的stddev?...

    我想使高斯噪声层的路缘石,这是强加噪声与不同的stddev水平到每个列的数据集.但是,由于我对编码不太了解,所以有一个很大的问题我无法自己解决. 使用Keras高斯噪声层的源代码, 我做了如下代码: ...

  7. OpenCV学习笔记(十一)——图像噪声的生成(椒盐噪声、高斯噪声)

    目录 1 椒盐噪声 2 高斯噪声 图像在获取和传输过程种会受到随机信号的干扰从而产生噪声,例如电阻引起的热噪声.光子噪声.暗电流噪声以及光响应非均匀性噪声等,由于噪声会影响对图像的理解以及后续的处理工 ...

  8. 高斯噪声、高斯白噪声解析

    如何用matlab 产生 均值为0,方差为5的高斯噪声 2011-07-15 19:36 y=randn(1,2500); y=y/std(y); y=y-mean(y); a=0; b=5; y=a ...

  9. python高斯滤波和降噪_python添加高斯噪声和椒盐噪声,实现中值滤波和均值滤波,实现Roberts算子和Sobel算子...

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验一,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验一. 由于时间紧张,代码没有进行任何优化, ...

最新文章

  1. 计算机视觉模型效果不佳,你可能是被相机的Exif信息坑了
  2. Python继承,子类调用父类的两(2)种方法
  3. flac3d命令流实例大全_如何在Linux上使用xargs命令
  4. 开源python-打包发布
  5. boost::lexical_cast模块测试 Source 是否不可复制
  6. Storm 03_Storm 架构设计
  7. python爬虫基本知识_爬虫 (十三) 学习 python 基础知识点的正确姿势 (六)
  8. 使用idea本地运行mapreduce程序,控制台log4j日志没有打印出来,可以这样解决
  9. session和cookie_JSP学习
  10. selenium 定位方式2
  11. Python nonlocal 与 global 关键字解析
  12. SUSE12SP3-Mycat(2)Schema.xml配置详解
  13. python遍历json_Python学习笔记:Python3中Json数据遍历取指定值
  14. 2020软件测试面试题汇总,看完BATJ面试官对你微微一笑!(内含答案)
  15. latex常见实用网址链接
  16. 布尔运算(Boolean Operators)
  17. html如何取消页眉页脚设置,jquery web打印 取消 页眉和页脚
  18. 少儿编程有多火,家长就有多焦虑...
  19. OpenGL ply
  20. matlab 中图的大小_关于matlab绘图中字体及图片大小等的设置

热门文章

  1. c语言输入10个整数 求偶数个数6,任意输入10个整数,输出其中的偶数,和偶数的个数...
  2. 对分查找(二分查找、折半查找)
  3. 什么是Spring,谈谈对Spring的理解
  4. 用数据揭晓,国庆最坑的旅游景点在哪里?哪些景点冷门却值得一去
  5. php 点号作用,PHP - 逗号和点号的区别
  6. mysql与citespace_CiteSpace与Histcite在文献引用上的区别
  7. 新笔记本win8装win7真是坑了我N次,完美解决方案
  8. APP启动速度慢,如何正确优化?
  9. 漫画:什么是数据仓库和ETL?
  10. 对UNIX/Linux风格的顿悟!