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

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

相关文章

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

Spring IOC核心原理详解与运用实战教程

《SpringIOC核心原理详解与运用实战教程》本文详细解析了SpringIOC容器的核心原理,包括BeanFactory体系、依赖注入机制、循环依赖解决和三级缓存机制,同时,介绍了SpringBo... 目录1. Spring IOC核心原理深度解析1.1 BeanFactory体系与内部结构1.1.1

MySQL中的DELETE删除数据及注意事项

《MySQL中的DELETE删除数据及注意事项》MySQL的DELETE语句是数据库操作中不可或缺的一部分,通过合理使用索引、批量删除、避免全表删除、使用TRUNCATE、使用ORDERBY和LIMI... 目录1. 基本语法单表删除2. 高级用法使用子查询删除删除多表3. 性能优化策略使用索引批量删除避免

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E