卷积

本文详细解释了卷积运算的概念及其在信号处理系统中的应用。通过实例展示了如何将信号输入与系统响应结合,形成输出信号的过程。重点讨论了连续与离散信号的卷积计算方法,并阐述了积分变换在信号处理中的作用。

1.定义

卷积是分析数学中一种重要的运算,对于在空间R上的f(x),g(x)是两个可积函数,作积分:
可以证明,关于几乎所有的实数x,上述积分是存在的。这样,随着x的不同取值,这个积分就定义了一个新函数h(x),称为函数f与g的卷积,记为h(x)=(f*g)(x)。
上述的定义是假设f(x)和g(x)在空间R上是连续的,如果它们为离散的,即卷积的变量x(n)和h(n)是序列,则卷积可以表示为:
其中星号*表示卷积。当时序n=0时,序列h(-i)是h(i)的时序i取反的结果;时序取反使得h(i)以纵轴为中心翻转180度,所以这种相乘后求和的计算法称为卷积和,简称卷积。另外,n是使h(-i)位移的量,不同的n对应不同的卷积结果。

2.通俗解释

卷积来源于信号处理系统,假设B是一个系统,其t时刻的输入为x(t),输出为y(t),系统的响应函数为h(t),按理说,输出与输入的关系应该为

                                                 Y(t)=h(t)x(t),

然而,实际的情况是,系统的输出不仅与系统在t时刻的响应有关,还与它在t时刻之前的响应有关,不过系统有个衰减过程,所以t1(<t)时刻的输入对输出的影响通常可以表示为x(t)h(t-t1),这个过程可能是离散的,也可能是连续的,所以t时刻的输出应该为t时刻之前系统响应函数在各个时刻响应的叠加,这就是卷积,用数学公式表示就是

                                            y(s)=∫x(t)h(s-t)dt,

离散情况下就是级数了。

    我对信号处理一知半解,胡言乱语一番可别揪我的小辫子。我们知道积分变换可以把卷积运算变成通常的乘积运算,积分变换的物理意义在于通过这种变换可以把时间域上的函数变成频率域上的函数,这个过程是可逆的。上述卷积经过积分变换后变成了

Y(u)=X(u)H(u)

其中Y,X,H分别为y,x,h的积分变换。信号处理中人们关心的是Y(u),但X(u)与H(u)往往并不那么容易求出来,而x(t)与h(t)是比较容易得到的(真的?),为了找到Y(u)与y(t)的对应关系从而得到Y(u),人们发明了卷积(引用链接)。




卷积神经网络中,卷积是把一个算子在原图上不断滑动,得出滤波结果,这个结果叫做“特征图”,这些算子被称为“卷积核”。卷积本质上是一种spatial filter(滤波),常见操作有平滑滤波和边缘提取,通过设计特定的“卷积核”与像素矩阵对应元素相乘得到结果 [^2][^3]。 数学中的卷积主要用于信号处理、求两个随机变量和的分布等,需要进行翻转再进行对应元素的加权求和;而卷积神经网络中的“卷积”是为了提取图像的特征,只借鉴了“加权求和”的特点,不需要翻转,其“卷积核”是可训练的参数,根据数据训练学习 [^2]。 在边缘提取方面,有一种卷积核研究较多,其卷积核内所有值求和为0。因为在边缘区域,图像像素值会发生突变,与这样的卷积核做卷积会得到一个不为0的值;而非边缘区域,像素值很接近,与这样的卷积核做卷积会得到一个约等于0的值 [^1]。 卷积核在深度学习中有重要应用,例如在图卷积神经网络(GCN)中,把卷积操作引入到了图学习中,将不同卷积核与节点之间建立空间连通关系,进而捕获节点间的特征相关性。GCN模型的原理包括对图进行预处理(图的邻接矩阵表示和归一化处理)、定义卷积核(定义一个多层的卷积神经网络,每层都是卷积层)、使用卷积核对节点进行卷积(更新节点特征得到新的特征表示) [^4]。 ### 代码示例 以下是一个简单的Python代码示例,使用`numpy`库实现一个简单的卷积操作: ```python import numpy as np def simple_convolution(image, kernel): image_height, image_width = image.shape kernel_height, kernel_width = kernel.shape output_height = image_height - kernel_height + 1 output_width = image_width - kernel_width + 1 output = np.zeros((output_height, output_width)) for i in range(output_height): for j in range(output_width): output[i, j] = np.sum(image[i:i+kernel_height, j:j+kernel_width] * kernel) return output # 示例图像和卷积核 image = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) kernel = np.array([[1, 0], [0, 1]]) # 执行卷积操作 result = simple_convolution(image, kernel) print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值