卷积(转自wiki百科)

时间:2023-12-27 11:35:55
  • *,*的百科全书

    卷积(转自wiki百科)

    卷积(转自wiki百科)

    图示两个方形脉冲波的卷积。其中函数 "g" 首先对 卷积(转自wiki百科) 反射,接着平移 "t" ,成为 卷积(转自wiki百科) 。那么重叠部份的面积就相当于 "t" 处的卷积,其中横坐标代表待积变量 卷积(转自wiki百科) 以及新函数 卷积(转自wiki百科) 的自变量 "t" 。

    卷积(转自wiki百科)

    卷积(转自wiki百科)

    图示方形脉冲波和指数衰退的脉冲波的卷积(后者可能出现于 RC电路中),同样地重叠部份面积就相当于 "t" 处的卷积。注意到因为 "g" 是对称的,所以在这两张图中,反射并不会改变它的形状。

    泛函分析中,卷积(捲積)、旋積或摺積,是通过两个函数f 和g 生成第三个函数的一种数学算子,表征函数f 与经过翻转和平移的g 的重叠部分的累积。如果将参加卷积的一个函数看作区间指示函数,卷积还可以被看作是“滑动平均”的推广。

    目录

    简单介绍

    卷积是分析数学中一种重要的运算。设: 卷积(转自wiki百科) ,卷积(转自wiki百科)卷积(转自wiki百科)上的两个可积函数,作积分:

    卷积(转自wiki百科)

    可以证明,关于几乎所有的 卷积(转自wiki百科) ,上述积分是存在的。这样,随着 卷积(转自wiki百科) 的不同取值,这个积分就定义了一个新函数卷积(转自wiki百科),称为函数卷积(转自wiki百科) 与卷积(转自wiki百科) 的卷积,记为卷积(转自wiki百科)。我们可以轻易验证:卷积(转自wiki百科),并且卷积(转自wiki百科) 仍为可积函数。这就是说,把卷积代替乘法,卷积(转自wiki百科) 空间是一个代数,甚至是巴拿赫代数

    卷积与傅里叶变换有着密切的关系。例如两函数的傅里叶变换的乘积等于它们卷积后的傅里叶变换,利用此一性质,能简化傅里叶分析中的许多问题。

    由卷积得到的函数 卷积(转自wiki百科) 一般要比 卷积(转自wiki百科) 和 卷积(转自wiki百科) 都光滑。特别当 卷积(转自wiki百科) 为具有紧支集的光滑函数,卷积(转自wiki百科) 为局部可积时,它们的卷积 卷积(转自wiki百科) 也是光滑函数。利用这一性质,对于任意的可积函数 卷积(转自wiki百科) ,都可以简单地构造出一列逼近于 卷积(转自wiki百科) 的光滑函数列 卷积(转自wiki百科) ,这种方法称为函数的光滑化或正则化。

    卷积的概念还可以推广到数列、测度以及广义函数上去。

    定义

    函数f 与g 的卷积记作卷积(转自wiki百科),它是其中一个函数翻转并平移后与另一个函数的乘积的积分,是一个对平移量的函数。

    卷积(转自wiki百科)

    积分区间取决于f 与g 的定义域

    对于定义在离散域的函数,卷积定义为

    卷积(转自wiki百科)

    图解卷积

    1. 首先将两个函数都用卷积(转自wiki百科)来表示。
    2. 对其中一个函数做水平翻转: 卷积(转自wiki百科) →卷积(转自wiki百科)
    3. 加上一个时间偏移量,让 卷积(转自wiki百科) 能沿着 卷积(转自wiki百科) 轴滑动。
    4. t从-∞滑动到+∞。两函数交会时,计算交会范围中两函数乘积的积分值。换句话说,我们是在计算一个滑动的的加权平均值。也就是使用卷积(转自wiki百科)当做加权函数,来对卷积(转自wiki百科)取加权平均值。
    最后得到的波形(未包含在此图中)就是fg的卷积。

    如果f(t)是一个单位脉冲,我们得到的乘积就是g(t)本身,称为冲激响应 。

    卷积(转自wiki百科)

    计算卷积的方法

    当 卷积(转自wiki百科) 为有限长度 卷积(转自wiki百科) , 卷积(转自wiki百科) 为有限长度 卷积(转自wiki百科) 的信号,计算卷积 卷积(转自wiki百科) 有三种主要的方法,分别为 1.直接计算(Direct Method) 2.快速傅里叶转换(FFT) 和 3.分段卷积 (sectioned convolution)。方法1是直接利用定义来计算卷积,而方法2和3都是用到了FFT来快速计算卷积。也有不需要用到FFT的作法,如使用数论转换

    方法1 直接计算
    • 作法: 利用卷积的定义
    卷积(转自wiki百科)
    • 卷积(转自wiki百科) 和 卷积(转自wiki百科) 皆为实数信号,则需要 卷积(转自wiki百科) 个乘法。
    • 卷积(转自wiki百科) 和 卷积(转自wiki百科) 皆为更一般性的复数信号,不使用复数乘法的快速算法,会需要 卷积(转自wiki百科) 个乘法;但若使用复数乘法的快速算法,则可简化至卷积(转自wiki百科) 个乘法。
    因此,使用定义直接计算卷积的复杂度为 卷积(转自wiki百科) 。
    方法2 快速傅里叶转换(FFT)
    • 概念:由于两个离散信号在时域(time domain)做卷积相当于这两个信号的离散傅里叶转换在频域(frequency domain)做相乘:
    
    
    ,可以看出在频域的计算较简单。
    • 作法: 因此这个方法即是先将信号从时域转成频域:
    
    
    ,于是
    
    
    ,最后再将频域信号转回时域,就完成了卷积的计算:
    
    
    总共做了 2 次 DFT 和 1 次 IDFT。
    • 特别注意 DFT 和 IDFT 的点数 卷积(转自wiki百科) 要满足 卷积(转自wiki百科) 。
    • 由于 DFT 有快速算法 FFT,所以运算量为 卷积(转自wiki百科)
    • 假设卷积(转自wiki百科) 点 DFT 的乘法量为 卷积(转自wiki百科) ,卷积(转自wiki百科) 和 卷积(转自wiki百科) 为一般性的复数信号,并使用复数乘法的快速算法,则共需要卷积(转自wiki百科) 个乘法。
    方法3 分段卷积(sectioned convolution)
    • 概念: 将 卷积(转自wiki百科) 切成好几段,每一段分别和 卷积(转自wiki百科) 做卷积后,再将结果相加。
    • 作法: 先将 卷积(转自wiki百科) 切成每段长度为 卷积(转自wiki百科) 的区段 (卷积(转自wiki百科)),假设共切成S段:
    
    
    Section 1: 卷积(转自wiki百科)
    Section 2: 卷积(转自wiki百科)
    卷积(转自wiki百科)
    Section r: 卷积(转自wiki百科)
    卷积(转自wiki百科)
    Section S: 卷积(转自wiki百科)
    卷积(转自wiki百科)为各个section的和
    
    
    因此,
    每一小段作卷积则是采用方法2,先将时域信号转到频域相乘,再转回时域:
    • 总共只需要做卷积(转自wiki百科) 点 FFT 卷积(转自wiki百科) 次,因为 卷积(转自wiki百科) 只需要做一次FFT。
    • 假设卷积(转自wiki百科) 点 DFT 的乘法量为 卷积(转自wiki百科) ,卷积(转自wiki百科) 和 卷积(转自wiki百科) 为一般性的复数信号,并使用复数乘法的快速算法,则共需要卷积(转自wiki百科)个乘法。
    • 运算量: 卷积(转自wiki百科)
    • 运算复杂度: 卷积(转自wiki百科) ,和 卷积(转自wiki百科) 呈线性,较方法2小。
    • 分为 Overlap-Add 和 Overlap-Save 两种方法。
    • 分段卷积: Overlap-Add

      欲做卷积(转自wiki百科)的分段卷积分,卷积(转自wiki百科) 长度为 卷积(转自wiki百科)卷积(转自wiki百科) 长度为 卷积(转自wiki百科),

      Step 1: 将卷积(转自wiki百科)每 卷积(转自wiki百科) 分成一段

      Step 2: 再每段 卷积(转自wiki百科) 点后面添加卷积(转自wiki百科) 个零,变成长度 卷积(转自wiki百科)

      Step 3: 把  卷积(转自wiki百科) 添加 卷积(转自wiki百科)个零,变成长度  卷积(转自wiki百科)的  h'[n]}卷积(转自wiki百科)

      Step 4: 把每个  x[n]}卷积(转自wiki百科) 的小段和  h'[n]}卷积(转自wiki百科) 做快速卷积,也就是 IDFT_{L+M-1}\{{DFT_{L+M-1}(x[n])DFT_{L+M-1}(h'[n])}\}}卷积(转自wiki百科),每小段会得到长度  卷积(转自wiki百科) 的时域信号

      Step 5: 放置第  i}卷积(转自wiki百科) 个小段的起点在位置  L\times i}卷积(转自wiki百科) 上,  i=0,1,...,\lceil {\frac {N}{L}}\rceil -1}卷积(转自wiki百科)

      Step 6: 会发现在每一段的后面  M-1}卷积(转自wiki百科) 点有重叠,将所有点都相加起来,顾名思义 Overlap-Add,最后得到结果

      举例来说:

      x[n]=[1,2,3,4,5,-1,-2,-3,-4,-5,1,2,3,4,5]}卷积(转自wiki百科), 长度  N=15}卷积(转自wiki百科)

      h[n]=[1,2,3]}卷积(转自wiki百科), 长度  M=3}卷积(转自wiki百科)

      令  L=5}卷积(转自wiki百科)

      • 卷积(转自wiki百科)

        x[n]和h[n]

      令  L=5}卷积(转自wiki百科) 切成三段,分别为  x_{0}[n],x_{1}[n],x_{2}[n]}卷积(转自wiki百科), 每段填  M-1}卷积(转自wiki百科) 个零,并将  卷积(转自wiki百科) 填零至长度  卷积(转自wiki百科)

      • 卷积(转自wiki百科)

        分段x[n]

      将每一段做 IDFT_{L+M-1}\{{DFT_{L+M-1}(x[n])DFT_{L+M-1}(h'[n])}\}}卷积(转自wiki百科)

      • 卷积(转自wiki百科)

        分段运算结果

      若将每小段摆在一起,可以注意到第一段的范围是  0\thicksim 6}卷积(转自wiki百科) ,第二段的范围是  5\thicksim 11}卷积(转自wiki百科),第三段的范围是  10\thicksim 16}卷积(转自wiki百科),三段的范围是有重叠的

      • 卷积(转自wiki百科)

        合并分段运算结果

      最后将三小段加在一起,并将结果和未分段的卷积做比较,上图是分段的结果,下图是没有分段并利用快速卷积所算出的结果,验证两者运算结果相同。

      • 卷积(转自wiki百科)

        结果比较图

      分段卷积: Overlap-Save

      欲做 x[n]*h[n]}卷积(转自wiki百科)的分段卷积分, x[n]}卷积(转自wiki百科) 长度为  N}卷积(转自wiki百科)卷积(转自wiki百科) 长度为  M}卷积(转自wiki百科),

      Step 1: 将  x[n]}卷积(转自wiki百科) 前面填  M-1}卷积(转自wiki百科) 个零

      Step 2: 第一段  i=0}卷积(转自wiki百科), 从新的  卷积(转自wiki百科) 中  卷积(转自wiki百科) 取到卷积(转自wiki百科) 总共  卷积(转自wiki百科) 点当做一段,因此每小段会重复取到前一小段的  卷积(转自wiki百科)点,取到新的一段全为零为止

      Step 3: 把  卷积(转自wiki百科) 添加  L-M}卷积(转自wiki百科) 个零,变成长度  卷积(转自wiki百科) 的卷积(转自wiki百科)

      Step 4: 把每个卷积(转自wiki百科) 的小段和 卷积(转自wiki百科) 做快速卷积,也就是卷积(转自wiki百科),每小段会得到长度卷积(转自wiki百科) 的时域信号

      Step 5: 对于每个小段,只会保留末端的卷积(转自wiki百科) 点,因此得名 Overlap-Save

      Step 6: 将所有保留的点合再一起,得到最后结果

      举例来说:

      卷积(转自wiki百科), 长度卷积(转自wiki百科)

      卷积(转自wiki百科), 长度卷积(转自wiki百科)

      令 卷积(转自wiki百科)

        • 卷积(转自wiki百科)

            x[n]和h[n]

      将 卷积(转自wiki百科) 前面填卷积(转自wiki百科) 个零以后,按照 Step 2 的方式分段,可以看到每一段都重复上一段的卷积(转自wiki百科) 点

      • 卷积(转自wiki百科)

        分段x[n]

      再将每一段做卷积(转自wiki百科)以后可以得到

      • 卷积(转自wiki百科)

        分段运算结果

      保留每一段末端的卷积(转自wiki百科) 点,摆在一起以后,可以注意到第一段的范围是卷积(转自wiki百科) ,第二段的范围是卷积(转自wiki百科),第三段的范围是}卷积(转自wiki百科),第四段的范围是卷积(转自wiki百科),四段的范围是没有重叠的

      • 卷积(转自wiki百科)

        合并分段运算结果

      将结果和未分段的卷积做比较,下图是分段的结果,上图是没有分段并利用快速卷积所算出的结果,验证两者运算结果相同。

      • 卷积(转自wiki百科)

        结果比较图

      至于为什么要把前面  M-1}卷积(转自wiki百科) 丢掉?

      以下以一例子来阐述:

      卷积(转自wiki百科), 长度卷积(转自wiki百科)

      卷积(转自wiki百科), 长度卷积(转自wiki百科),

      第一条蓝线代表卷积(转自wiki百科) 轴,而两条蓝线之间代表长度卷积(转自wiki百科),是在做快速卷积时的周期

      • 卷积(转自wiki百科)

        x[n]和h[n]

      当在做快速卷积时卷积(转自wiki百科),是把信号视为周期卷积(转自wiki百科),在时域上为循环卷积分,

      而在一开始前卷积(转自wiki百科) 点所得到的值,是卷积(转自wiki百科) 和卷积(转自wiki百科) 内积的值,

      然而卷积(转自wiki百科) 这卷积(转自wiki百科) 个值应该要为零,以往在做快速卷积时长度为  卷积(转自wiki百科) 时不会遇到这些问题,

      而今天因为在做快速卷积时长度为卷积(转自wiki百科) 才会把这卷积(转自wiki百科) 点算进来,因此我们要丢弃这卷积(转自wiki百科) 点内积的结果

      • 卷积(转自wiki百科)

        循环卷积

      为了要丢弃这  M-1}卷积(转自wiki百科) 点内积的结果,位移  h[-n]}卷积(转自wiki百科)  M-1}卷积(转自wiki百科) 点,并把位移以后内积合的值才算有效。

      • 卷积(转自wiki百科)

        位移以后内积


    应用时机

    以上三种方法皆可用来计算卷积,其差别在于所需总体乘法量不同。基于运算量以及效率的考量,在计算卷积时,通常会选择所需总体乘法量较少的方法。

    以下根据 卷积(转自wiki百科) 和 卷积(转自wiki百科) 的长度( 卷积(转自wiki百科) )分成5类,并列出适合使用的方法:

    1. 卷积(转自wiki百科) 为一非常小的整数 - 直接计算
    2. 卷积(转自wiki百科) - 快速傅里叶转换
    3. 卷积(转自wiki百科) - 分段卷积
    4. 卷积(转自wiki百科) - 快速傅里叶转换
    5. 卷积(转自wiki百科) 为一非常小的整数 - 直接计算

    基本上,以上只是粗略的分类。在实际应用时,最好还是算出三种方法所需的总乘法量,再选择其中最有效率的方法来计算卷积。

    例子

    Q1: 当 卷积(转自wiki百科) ,适合用哪种方法计算卷积?

    Ans:

    方法1: 所需乘法量为 卷积(转自wiki百科)
    方法2: 卷积(转自wiki百科) ,而2016点的DFT最少乘法数 卷积(转自wiki百科) ,所以总乘法量为 卷积(转自wiki百科)
    方法3:
    若切成 8 块(卷积(转自wiki百科)),则卷积(转自wiki百科)。选卷积(转自wiki百科),则总乘法量为 卷积(转自wiki百科) ,比方法1和2少了很多。
    但是若要找到最少的乘法量,必须依照以下步骤
    (1)先找出 卷积(转自wiki百科) : 解 卷积(转自wiki百科) : 卷积(转自wiki百科)
    (2)由卷积(转自wiki百科) 算出点数在 卷积(转自wiki百科) 附近的DFT所需最少的乘法量,选择DFT的点数
    (3)最后由卷积(转自wiki百科) 算出 卷积(转自wiki百科)
    因此,
    (1)由运算量对 卷积(转自wiki百科) 的偏微分为0而求出 卷积(转自wiki百科)
    (2)卷积(转自wiki百科),所以选择101点 DFT 附近点数乘法量最少的点数 卷积(转自wiki百科)或 卷积(转自wiki百科) 。
    (3-1)当 卷积(转自wiki百科) ,总乘法量为 卷积(转自wiki百科) 。
    (3-2)当 卷积(转自wiki百科) ,总乘法量为 卷积(转自wiki百科) 。
    由此可知,切成 20 块会有较好的效率,而所需总乘法量为 21480。
    • 因此,当卷积(转自wiki百科),所需总乘法量: 分段卷积 < 快速傅里叶转换 < 直接计算。故,此时选择使用分段卷积来计算卷积最适合。

    Q2: 当 卷积(转自wiki百科) ,适合用哪种方法计算卷积?

    Ans:

    方法1: 所需乘法量为 卷积(转自wiki百科)
    方法2: 卷积(转自wiki百科) ,选择1026点 DFT 附近点数乘法量最少的点数,卷积(转自wiki百科)
    因此,所需乘法量为 卷积(转自wiki百科)
    方法3:
    (1)由运算量对 卷积(转自wiki百科) 的偏微分为0而求出 卷积(转自wiki百科)
    (2)卷积(转自wiki百科),所以选择7点 DFT 附近点数乘法量最少的点数 卷积(转自wiki百科) 或 卷积(转自wiki百科) 或 卷积(转自wiki百科) 。
    (3-1)当 卷积(转自wiki百科) ,总乘法量为 卷积(转自wiki百科) 。
    (3-2)当 卷积(转自wiki百科) ,总乘法量为 卷积(转自wiki百科) 。
    (3-3)当 卷积(转自wiki百科) ,总乘法量为 卷积(转自wiki百科) 。
    由此可知,切成 171 块会有较好的效率,而所需总乘法量为 5476。
    • 因此,当卷积(转自wiki百科),所需总乘法量: 分段卷积 < 直接计算 < 快速傅里叶转换。故,此时选择使用分段卷积来计算卷积最适合。
    • 虽然当 卷积(转自wiki百科) 是个很小的正整数时,大致上适合使用直接计算。但实际上还是将3个方法所需的乘法量都算出来,才能知道用哪种方法可以达到最高的效率。

    Q3: 当 卷积(转自wiki百科) ,适合用哪种方法计算卷积?

    Ans:

    方法1: 所需乘法量为 卷积(转自wiki百科)
    方法2: 卷积(转自wiki百科) ,选择1026点 DFT 附近点数乘法量最少的点数,卷积(转自wiki百科)
    因此,所需乘法量为 卷积(转自wiki百科)
    方法3:
    (1)由运算量对 卷积(转自wiki百科) 的偏微分为0而求出 卷积(转自wiki百科)
    (2)卷积(转自wiki百科),所以选择1623点 DFT 附近点数乘法量最少的点数 卷积(转自wiki百科) 。
    (3)当 卷积(转自wiki百科) ,总乘法量为 卷积(转自wiki百科) 。
    由此可知,此时切成一段,就跟方法2一样,所需总乘法量为 44232。
    • 因此,当卷积(转自wiki百科),所需总乘法量: 快速傅里叶转换 = 分段卷积 < 直接计算。故,此时选择使用分段卷积来计算卷积最适合。
    多元函数卷积

    按照翻转、平移、积分的定义,还可以类似的定义多元函数上的积分:

    卷积(转自wiki百科)

    性质

    各种卷积算子都满足下列性质:

    交换律
    卷积(转自wiki百科)
    结合律
    卷积(转自wiki百科)
    分配律
    卷积(转自wiki百科)
    数乘结合律
    卷积(转自wiki百科)

    其中卷积(转自wiki百科)为任意实数(或复数)。

    微分定理
    卷积(转自wiki百科)

    其中Df 表示f微分,如果在离散域中则是指差分算子,包括前向差分与后向差分两种:

    • 前向差分:卷积(转自wiki百科)
    • 后向差分:卷积(转自wiki百科)

    卷积定理

    卷积定理指出,函数卷积的傅里叶变换是函数傅里叶变换的乘积。即,一个域中的卷积相当于另一个域中的乘积,例如时域中的卷积就对应于频域中的乘积。

    卷积(转自wiki百科)

    其中卷积(转自wiki百科)表示f 的傅里叶变换

    这一定理对拉普拉斯变换双边拉普拉斯变换Z变换Mellin变换Hartley变换(参见Mellin inversion theorem)等各种傅里叶变换的变体同样成立。在调和分析中还可以推广到在局部紧致的阿贝尔群上定义的傅里叶变换。

    利用卷积定理可以简化卷积的运算量。对于长度为卷积(转自wiki百科)的序列,按照卷积的定义进行计算,需要做卷积(转自wiki百科)组对位乘法,其计算复杂度卷积(转自wiki百科);而利用傅里叶变换将序列变换到频域上后,只需要一组对位乘法,利用傅里叶变换的快速算法之后,总的计算复杂度为卷积(转自wiki百科)。这一结果可以在快速乘法计算中得到应用。

    在群上的卷积

    若 G 是有某 m 测度(例如豪斯多夫空间哈尔测度局部紧致拓扑群),对于G 上 m-勒贝格可积实数复数函数f 和g,可定义它们的卷积:

    卷积(转自wiki百科)

    对于这些群上定义的卷积同样可以给出诸如卷积定理等性质,但是这需要对这些群的表示理论以及调和分析的彼得-外尔定理

    应用

    卷积在工程和数学上都有很多应用:

    • 统计学中,加权的滑动平均是一种卷积。
    • 概率论中,两个统计独立变量X与Y的和的概率密度函数是X与Y的概率密度函数的卷积。
    • 声学中,回声可以用源声与一个反映各种反射效应的函数的卷积表示。
    • 电子工程与信号处理中,任一个线性系统的输出都可以通过将输入信号与系统函数(系统的冲激响应)做卷积获得。
    • 物理学中,任何一个线性系统(符合叠加原理)都存在卷积。

    参见

    外部链接