卷积平滑数据原理(有边缘效应)

2023-10-09 03:30

本文主要是介绍卷积平滑数据原理(有边缘效应),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、离散卷积的求法
假设两组数据
A(原始数据):[a b c d], B(平滑窗口)[1/2 1/3]
则A卷积B等于
(1) A*1/2 = a/2 b/2 c/2 d/2 (空) 不移位
(2) A*1/3 = (空) a/3 b/3 c/3 d/3 向右移一位
(3) (1) + (2) = a/2 b/2+a/3 c/2+b/3 d/2+c/3 d/3
二、卷积平滑数据
基于一的离散卷积求解过程,则卷积可以利用与平滑数据。
1、假设t的取值范围为-4~4平均分成100份,y = sin(t) + randn(100), randn(100)为100个标准正太分布中的随机取值(randn(100)为一个向量),则利用卷积来平滑数据的结果,其中平滑窗口为[1/10…..1/10] (10个1/10组成的向量):这里写图片描述
如图所示,原始数据为黑点,平滑数据为红色+号,在边缘部分数据变化趋势不准确,这是由于这里面使用的 python语句为:

convolution(y,window,'same') 
'''结果为数据集中间长度为Max(y,window)的结果,因此会有边缘效应'''

解释:由于平滑窗口为[1/10 1/10 1/10…..1/10],则基于一种离散卷积求解过程可得,其平滑结果为取本点与前面9个点之和的平均值。也就相当与每个点的增幅都被缩小了,因此可以用来平滑数据。居于此可得,当平滑窗口向量值越少时,数据越不平滑(每个点的增幅值被考虑的权重增大),如下例所示,平滑窗口为[1/2 1/2]:

这里写图片描述
解释:平滑数据为该点于前面一点的平均值,即每两点取一个平均值。
因此当平滑窗口越长时,数据越平滑,因为选取了更多的点取平均值,因此每一点的增幅权重将被降低,如图所示,平滑窗口为[1/50…1/50]
这里写图片描述
解释:如图所示平滑窗口为[1/50…1/50],此情况与原始数据形状偏离较大,因为数据越幅度越大的地方,增幅越小,再被平均了之后权重就变得更小。
为了更好的理解卷积平滑过程,令y = 2*t + randn(100),t的取值范围与正弦函数相同。如图所示
这里写图片描述
解释:平滑窗口为[1/10…/10]。
这里需要注意,无论平滑窗口中每一个元素取多小,结果都不会变成一条水平直线,因为一条直线每一点的增幅都是不变的,例如假设原始数据形状类似一条直线,且每一点增幅为0.1,则
(1)前一点原始:a(n);
卷积平滑之后(a(1)+a(2)+…+a(n))/n;
(2)本点a(n+1)
卷积平滑之后(a(2)+a(3)+…+a(n+1))/n
(3)两点之差(增幅):
原始:a(n+1)-a(n) = 0.1;
平滑:(a(n+1)-a(1))/n = n*0.1/n = 0.1;
所以卷积平滑数据只是平均每一点的增幅,当每一点的增幅都一样时,无论平滑窗口元素的值多小,都不会得到一条水平的直线(不考虑边缘效应),如图所示:
这里写图片描述
解释:平滑窗口为[1/50 1/50…1/50],且对应点与平滑窗口[1/10…1/10]的相同。这也解释了为什么正弦离散点平滑数据会与原始正弦离散点的图像有所不同,因为正弦函数每一点的增幅不同,其导数为cos(t),0点的增幅最大,pi/2点的增幅点最小,因此如果平滑窗口元素值过小时,越靠近极值点,由于其增幅很小,所以其平滑结果越偏离原始离散点。

三、结论
卷积平滑数据方法平滑的是每一点的增幅,且本点的平滑结果为前n点的平均值。适用于原始数据震动幅度不太大于理想数据的情形。

这篇关于卷积平滑数据原理(有边缘效应)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/170033

相关文章

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA