卓晴老师,我一直没想明白一个问题,为什么卷积要先反转再滑动呢?不翻转为什么不行?

▲ 孔乙己:回字有四种写法|插图来自网络

的确,对于两个信号之间的卷积运算,可以理解为对其中任意个信号进行“反褶”、“平移”、“相乘”、“积分(累加)”,最后得到卷积结果:

x(t)∗y(t)=∫−∞+∞x(τ)⋅y(t−τ)dτx\left( t \right) * y\left( t \right) = \int_{ - \infty }^{ + \infty } {x\left( \tau \right) \cdot y\left( {t - \tau } \right)d\tau }x(t)∗y(t)=∫−∞+∞​x(τ)⋅y(t−τ)dτ
相比之下,相关运算就没有其中的“反褶”部分。但是,对于复值信号,需要对后面的信号取共轭1

Rxy(τ)=∫−∞+∞x(t)⋅y∗(t−τ)dtR_{xy} \left( \tau \right) = \int_{ - \infty }^{ + \infty } {x\left( t \right) \cdot y^* \left( {t - \tau } \right)dt}Rxy​(τ)=∫−∞+∞​x(t)⋅y∗(t−τ)dt

卷积运算满足一些代数性质,比如交换律、结合律、分配率,但相关运算不满足。

到现在为止,我们只是讨论了这两个运算究竟那里不一样,即卷积需要先反褶,再滑动,而相关运算不需要反褶。但你还在问第二个问题:不反褶不行吗?

首先,如果参与运算两个实数信号中,有一个信号为偶函数,那么它们的卷积运算就和相关运算相同了。即可以不进行反褶。但为什么要引入带有反褶运算的卷积呢?

在应用中,相关运算主要描述的是信号与信号之间的相似关系,而卷积运算描述的是信号与系统之间的关系

相关运算中的核心积分运算是描述了两个信号之间的内积:⟨x(t),y(t)⟩=∫−∞∞x(t)⋅y∗(t)dt\left\langle {x\left( t \right),y\left( t \right)} \right\rangle = \int_{ - \infty }^\infty {x\left( t \right) \cdot y^* \left( t \right)dt}⟨x(t),y(t)⟩=∫−∞∞​x(t)⋅y∗(t)dt

在线性空间中也可以引出两个信号之间的相似程度的度量,相关运算的结果反映了两个信号之间在不同的延迟情况下的相似性。因此可以通过寻找相关结果的峰值确定两个信号之间的延迟关系。

卷积则是刻画了一个线性时不变系统的零状态响应y(t)y\left( t \right)y(t)与系统的输入信号x(t)x\left( t \right)x(t)和系统的单位冲激响应信号h(t)h\left( t \right)h(t)之间的关系。利用信号可以分解成冲激信号的叠加:x(t)=∫−∞+∞x(τ)⋅δ(t−τ)dτx\left( t \right) = \int_{ - \infty }^{ + \infty } {x\left( \tau \right) \cdot \delta \left( {t - \tau } \right)d\tau }x(t)=∫−∞+∞​x(τ)⋅δ(t−τ)dτ

在利用系统的线性+时不变特性,可以得到系统的输出y(t)y\left( t \right)y(t)就等于x(t),h(t)x\left( t \right),h\left( t \right)x(t),h(t)的卷积。y(t)=x(t)∗h(t)=∫−∞+∞x(τ)⋅h(t−τ)dτy\left( t \right) = x\left( t \right) * h\left( t \right) = \int_{ - \infty }^{ + \infty } {x\left( \tau \right) \cdot h\left( {t - \tau } \right)d\tau }y(t)=x(t)∗h(t)=∫−∞+∞​x(τ)⋅h(t−τ)dτ

这其中的简单推导在任何一本讲解信号与系统教材中都有。因此引入带有反褶的卷积运算是为了刻画信号与系统之间的关系的。

正是由于引入了卷积运算,所以对于任何一个线性时不变系统,都可以将其与一个信号(系统的单位冲激响应)一一对应起来。信号与系统达到了完美的统一。

由此,你可能还要问:为什么系统的响应中,输入x(t)需要与单位冲激响应h(t)进行卷积运算?,只是进行相关不行吗?

进行相关运算时,参与运算的两个信号是对等的,它们的变量ttt都反映了信号随着时间t→+∞t \to {\rm{ + }}\inftyt→+∞的过程演变的情况。但进行卷积运算时,其中一个信号是系统的单位冲激响应,运算结果中的变量ttt反映了系统输出结果所在的时刻,站在ttt时刻,考察输入信号x(τ)x\left( \tau \right)x(τ)的不同时间τ\tauτ的取值是如何累计出系统的输出y(t)y\left( t \right)y(t)的。因此,对于信号而言,它们的变量是τ\tauτ,而不是ttt。

对于τ\tauτ时刻的信号x(τ)x\left( \tau \right)x(τ)所产生的结果,只需经过延迟t−τt - \taut−τ的时间,便到达了时刻ttt了,即h(t−τ)h\left( {t - \tau } \right)h(t−τ)。将所有的x(τ)x\left( \tau \right)x(τ)所产生的结果进行积分,便可以得到系统在ttt时刻的取值了。

文字显得枯燥,一图抵千言。下面是郑君里2教授的教材中对此进行的图片描述。还是挺形象的。

▲ 信号的分解与系统的零状态响应

中国科学网也有很多教授对系统输出的卷积运算中的反褶进行了很好的讨论,比如曹广福老师在我来说卷积中,讨论了连续和离散时间卷积运算,并把离散卷积看成级数运算。许志强卷积是什么?的博文中,将卷积看成加权平均积王一哲卷积的理解及应用中给出了很多图形方面的解释。

所以,你提到的卷积运算中的奇怪的反褶过程,实际上引起过很多人的疑问以及对此的讨论。

可能最后,你还要问:既然,卷积运算和相关运算这么相近,为什么非要定义这个卷积,直接就定义成反褶+相关不就行了吗?

这个话就长了,虽然根据奥卡姆剃刀原理,可以尽可能减少概念、定理的数量来满足数学上的精简需求。但在工程中,人们还是喜欢偷懒。更有甚者,还采用挂羊头,卖狗肉的做法,对一些本质相同的运算,委以不同的名称,虽然还达不到扰乱视听的,但也是一种约定俗称,比如像 离散周期序列傅里叶级数分解(DTFS)离散傅里叶变换(DFT)、 快速傅里叶变换(FFT)**本质上的数学概念是一样的。

这样也没什么不好的,就连孔乙己都知道“”字回字有四种写法呢。

▲ 康熙字典中的四种回字写法


  1. 共轭:两个复数呈现共轭关系是指它们的实部相同,虚部相反 ↩︎

  2. 郑君里:(1937年至2019年4月14日),1961年毕业于清华大学无线电系。曾任清华大学电子工程系教授、通信与信息系统专业博士生导师。中国电子学会电路与系统学会委员、中国神经网络委员会委员。 ↩︎

为什么卷积要先反转再滑动呢?不翻转为什么不行?相关推荐

  1. ios获取新数据要不要关_iPhone用户注意!不要再滑动关后台,否则……

    很多街坊都有清理手机后台的习惯 习惯性向上滑动,"一键关闭"不用的app 感觉这样能提高手机流畅度和续航时间 也有部分强迫症的街坊 习惯了定期清理后台app,不然不舒服 但,这是不 ...

  2. 将输入文件的字符反转再写入新的文件

    将输入文件的字符反转再写入新的文件 题目描述 对于一个文本文件text1.dat,编写一个程序,将该文件中的每一行字符颠倒顺序后输出到另一个文件text2.dat中. 输入文件 输入文件为当前目录下的 ...

  3. 滑动门和翻转门实现的横竖双tab标签测试页面(附源码)

    双tab可以用来表现二维数据的某一个单元.所以很多情况下还是比较有用的.但是很少人用这个而已.人们少用的原因比较多.反正我是比较少见的. 此版本至少测试版,只有IE6下进行了测试.FF和IE7一定会有 ...

  4. 程序员们一个一个的都挺神的,堪称 35 岁毕业之后再就业的标兵,不服不行

    我罗列了一下最近一年程序员在微博热搜榜上的事件,我发现我们程序员一个一个的都挺神,挺牛逼的,个个都是万能人,真的是转行的典范,堪称 35 岁毕业之后,再就业的标兵,不服不行. 1.程序员辞职回乡改行送 ...

  5. scrollview 实现滑动到底部再滑动加载数据的功能

    思路:在滑动基础上添加scrollview到底检测事件 1.首先检测是否滑动 [java] view plaincopy // 滑动加载 scrollView.setOnTouchListener(n ...

  6. 我用Python爬取1000封情书助力室友表白班花,却反转再反转...原来这就是班花的终极秘密!

    大家好,我是辣条,这是班花系列终章前的最后一篇,下一篇会完结这个系列. 前言 上次经过给班花邮箱脚本乌龙事件之后,我也心里过意不去,几次帮忙都没搞成,也快毕业了,不想给室友心中留有遗憾,是男人总得自己 ...

  7. 【java链表反转:递归实现逆向翻转(leetcode)】

    (leetcode206) 文章目录 (leetcode206) 前言 一.题目中文 二.代码实现 1.完整代码 2.代码详解 总结 前言 对于链表翻转使用递归方法分为顺序翻转和逆向翻转,这里主要介绍 ...

  8. php字符串反转abcdefg_php中实现字符串翻转的方法

    字符串:$str = "abcdefg"; 方法一(直接使用php自带函数strrev($str)) print_r(strrev($str)); 使用for循环方式,str_sp ...

  9. java 单链表反转_Java实现单链表翻转详解

    单链表翻转比如有如下链表: 需要按照C B A 输出,我们可以有好几种方法: package org.andy.test; import java.util.ArrayList; import jav ...

最新文章

  1. 使用QEMU创建虚拟机
  2. oracle更改归档日志路径,oracle修改归档日志的路径
  3. idea shell 中的函数 跳转_PHP如何为函数执行设置超时?
  4. SAP Spartacus pop over 元素的单元测试
  5. Hadoop处理HDF文件
  6. 面试题10:斐波那契数列
  7. 终于解决“百年一遇”奇怪问题
  8. U811.1接口EAI系列之三--采购订单生成--VB语言
  9. linux高级技巧:rsync同步(二)
  10. 如何用计算机给机顶盒刷机,如何利用sd卡刷机 电视盒子通用刷机方法
  11. 【SQL基础】SQL查询语句实例
  12. c语言编程基础实验结果与分析,C语言实验指导1--C语言编程基础.doc
  13. 交换机的工作原理是什么,它有什么功能与作用?
  14. Java第十九天:mysql(二)
  15. excel 去掉公式保留数值的方法
  16. java中final关键字。PS:转自海子
  17. 重大利好,拥有HKICPA证书可申请南沙区人才绿卡
  18. 解决android repo (git出错的问题)
  19. 织梦模板安装后出现中文乱码?
  20. Pytorch 分布式训练中DP和DDP的原理和用法

热门文章

  1. sharepoint 2013 文档库 资源管理器打开报错 在文件资源管理器中打开此位置时遇到问题,将此网站添加到受信任站点列表,然后重试。
  2. MySQL 性能优化 - 单表查询优化
  3. 联发科4G方案因势利导 2016年芯片市场有望迎来大反转
  4. Flutter String格式化
  5. Win10系统Office 软件图标变白两种解决方法
  6. div与span(块元素与行内元素的区别)
  7. 公交车查询小程序开发应具备哪些功能
  8. opencv贾老师系列18——人脸识别实战2
  9. [手游屌丝研究] 手游IP市场调查:授权金似北京房价【一】
  10. 中国高速铁路信号系统发展与思考