卷积学习的一点小心得

在信号的时域分析中,最为重要的就是信号通过线性时不变系统,即时域卷积计算。先来回顾一下线性时不变系统的定义:

\[
\begin{array}{l}
If{\rm{ }}x(t) \Rightarrow y(t){\rm{ :}}\a{x_1}(t) + b{x_2}(t) \Rightarrow a{y_1}(t) + b{y_2}(t)\x(t - {t_0}) \Rightarrow y(t - {t_0})
\end{array} \tag{1-1}
\]
物理可实现的系统绝大多数均满足线性时不变条件,与此同时还应满足稳定性条件,即 $\int_{ - \infty }^{ + \infty } {h(t)} dt < \infty $ ,输入为能量信号的情况下输出的能量是有限的。在做一些小题的时候,经常会给出 \(y(t) = f[x(t)]\) 的形式来提问,然而在实际的系统当中却很难用一个函数就轻松表征出输入和输出之间的关系,比如:

这是一个简单的RC电路,但是会发现很难用一个简单直观的函数去表征输出与输入之间的关系。当然,在电路分析中采用零状态相应+零输入响应最终求解出了该函数,实质上用的是求解非齐次线性微分方程的方法。然而这种求解的困难在于两点:1. 很难剥离输入信号用以描述系统本身的性质;2. 对于高阶电路束手无策。这里卷积主要解决的是第一个困难,第二个困难在频域上解决起来非常轻松。

先列出卷积的定义式:

\[
y(t) = \int_{ - \infty }^{ + \infty } {x(\tau )h(t - \tau )d\tau \tag{1-2}}
\]
单纯从公式上来看,是完全看不懂卷积是什么的。所以从实际系统出发来观察信号通过系统的情况,图1所示的RC电路中由经典的电路分析可以求解出零输入响应 \(y(t) = {e^{ - \frac{t}{\tau }}} \cdot u(t){\rm{, }}\tau {\rm{ = }}RC\) ,对应如下图所示:

显然,这是初始状态为u(0)=1V时的系统响应,即可视为 。关于drac函数无需深究,因为这个函数在信号系统中的应用本身就是违反数学定理的,根本不满足在x=0这一点的连续性和可导性。那么如果是多个不同时间点的冲激函数输入进来会是怎样呢?

令 \(x(t) = \delta (t) + \delta (t - 1) + \delta (t - 2)\) ,则有如下图所示结果:

可以看出,由于系统是线性的,各冲激的响应会线性地叠加在一起,组成总的响应。有限个冲激可以如此叠加,所以我们就会推测:一个连续输入信号能否视作无限个延时冲激叠加? 于是将一个连续输入信号表示成这种形式:
\[
x(t) = \int_{ - \infty }^{ + \infty } {x(\tau )\delta (t - \tau )d\tau } \tag{1-3}
\]
根据drac函数的性质,我们知道\(\delta (t - \tau )d\tau {\text{ = }} \left \{\begin{array}{c} 1&{t = \tau} \\0&{others}\end{array}\right.\) ,故这个式子是显然成立的。所以关键的一步来了:如果知道了\(\delta(t)\)的响应\(h(t)\),那是不是就可以用\(h(t)\)表示\(y(t)\)了呢? 在高等数学中学习到了一个重要的知识点:积分具有线性性质,即:
\[
\int {\sum\limits_i {{a_i}{f_i}(x)dx} } = \sum\limits_i {{a_i}} \int {{f_i}(x)dx} \tag{1-4}
\]
将\(x(\tau)\)视为是drac函数的一个加权因子a,则有\(x(\tau )\delta (t - \tau ) \Rightarrow x(\tau )h(t - \tau )\),注意:
这样做是对的,因为在求解延时冲激\(\delta(t-\tau)\)的系统响应时自变量是 ,而不是\(\tau\)。根据(1-4)提供的线性性质,从数学上便推导出了(1-2)的卷积公式。

最后,卷积是建立在实际应用之上的,所以单纯的公式推导很难建立一个直观的印象。我们可以这样设想,一个连续信号切分成无数个微元,每一个微元进入系统的时间是不一样的,比如x(0)和x(0.1)之间就相差了0.1s的时间,那么根据(1-1)式中的线性性质,两者的响应也相差了0.1s的时间。

但这里我们要注意的就是:系统产生的响应不是只存在于一瞬的,就像前面图1所示那样,一个零时刻1V的输入产生了无穷长时间的响应值。并不是说在0时刻输入了一个信号,其输出也只在0时刻存在。用信号系统的术语来描述,即我们研究的绝大多数系统是记忆系统。若要举例子,含电感电容的电路都是记忆系统,纯电阻电路则是非记忆的。

这样一来,在输出端这边检测信号, 时刻的输出值不仅包含了x(t)的响应,还包含了x(0)到x(t)所有输入在该时刻的响应。所以为了方便说明,所以在信号系统中用 描述输入的时刻,用 描述输入产生的响应在之后的时间延续。

对于离散时间信号,整个推导过程是完全一致的,只需要把积分换成求和即可。

原文地址:https://www.cnblogs.com/acct-zcw/p/12149678.html

时间: 2024-10-10 23:19:14

卷积学习的一点小心得的相关文章

学习KMP算法的一点小心得

KMP算法应用于 在一篇有n个字母的文档中 查找某个想要查找的长度为m的单词:暴力枚举:从文档的前m个字母和单词对比,然后是第2到m+1个,然后是第3到m+2个:这样算法复杂度最坏就达到了O(m*n),对于大数据肯定不行.KMP算法的精髓即设法减少不必要的枚举次数,举个例子:比如已经匹配好了单词的前k-1个字母:但第k个字母无法匹配了:那么如果前k-1个字母中存在类似回文的情况(前i个字母组成的子串和后i个字母组成的子串相同),那么指针j就变成i(相当于整体往右移动),这样来达到减少枚举次数的目

一点小心得

项目中会遇到这样的逻辑处理:根据不同类型调用不同的方法,通常会用到if else等语句,感觉不太好: 1,应该面向接口编程 2,尽量避免使用if语句 实例:原来代码,接口Iservice的实现类有 ServiceA ,ServiceB,ServiceC public static void main(String[] args) { String type = "C"; Iservice service = null; if (type.equals("A")) {

ASP.NET MVC Autofac依赖注入的一点小心得(包含特性注入)

前言 IOC的重要性 大家都清楚..便利也都知道..新的ASP.NET Core也大量使用了这种手法.. 一直憋着没写ASP.NET Core的文章..还是怕误导大家.. 今天这篇也不是讲Core的 前面写了C#开发移动应用系列  就第一篇和最后一篇上了最多推荐 - -  也许大家确实不看好吧.. 算了..废话不多说.开始今天的东西吧.. 本篇文章不讲为何我们要用IOC..只讲Autofac使用中的一些小心得 正文 1.基本注入 首先我们要构造一个容器,代码如下: //第一步: 构造一个Auto

python+tesseract验证码识别的一点小心得

由于公司需要,最近开始学习验证码的识别 我选用的是tesseract-ocr进行识别,据说以前是惠普公司开发的排名前三的,现在开源了.到目前为止已经出到3.0.2了 当然了,前期我们还是需要对验证码进行一些操作,让他对机器更友好,这样才能提高识别率. 步骤基本上是这样的 第一步对验证码进行灰度图以及二值化 需要用到pil库可以pip下载 代码如下 def binarization(image): #转成灰度图 imgry = image.convert('L') #二值化,阈值可以根据情况修改

关于qt学习的一点小记录(2)

嗯...这次接了个单 要求图形界面,刚好可以巩固并学习下QT.毫不犹豫的就接了 下面记录下出现的问题: 1. QWidget和QDialog QDialog下的槽函数有accept()与reject()可以直接用 并且QDialog有exec() 这种方式显示窗口,是阻塞形的 而QWidget则只有show()要自己写阻塞 2. 窗口间通信 2.1 主窗口->子窗口 介个方法很多啦 我用的是直接传值给子窗口里的变量: 比如说: 子窗口有: class changemsg : public QDi

软件测试管理的一点小心得

某甲问道:「测试做太多的话,会不会使得bug解不完?」 某乙回答:「还不简单.只要不做测试,就没有bug.」 上述对话,反应出许多软件工作人员对于测试的想法.对多数软件开发人员而言,测试大概是仅次于维护之外,最令人讨厌的工作.对软件研发主管来说,测试是必要之恶:做得不够后患无穷,做得过多又增加成本,延误商机.因此,如何能够规画与执行一个最经济有效的测试工作,当是软件研发主管们须研究的一个课题. 软件测试的困难,在于它不仅是产品的测试,更是产品设计程序的检验.由于关乎设计的测试,准则不易寻找,经验

关于qt学习的一点小记录

今日为了应付学校作业要求 决定现学qt来制作界面 毕竟c++不像在这方面c#可以那么方便 qt主要依靠信号.槽来实现类似winform中的消息 鉴于要尽快做完,故而没有细看qt 只是大概了解了下界面的制作方法 所以依然还有不少问题 好了我先从qt设计器开始了. 嗯,很好用的界面编辑器..一目了然啊~~~ 遇到的问题有: 1.槽明明在窗口类声明了,可设计器还是找不到... 解决:这个应该还需要在某些地方增加点代码,毕竟我find了一下别人demo的槽函数名字,发现出现在了好几个地方 嗯..这次时间

对liunx系统中用户和权限管理一点小心得

近期才接触Liunx,给我的感觉,并不是很难,但是知识点很多,命令杂,并且附带了茫茫多的选项.接下来我就拿用户和权限管理来举个例子. 一丶用户&组的创建,管理. 用户,顾名思义,就是在系统上的接口进行操作的人. 用户分为:1.管理员(root)2.普通用户(user):系统用户和登录用户 管理员比较好理解,好比说一个国家的国王,拥有对国家最高的指挥权.root在linux系统中就扮演了国王的角色,任何的权限对它来说都形同虚设. 而普通用户,相当于这个国家的公民,必须遵循国家规定的法律. 普通用户

关于乱码问题的一点小心得

和jsp页面出现了乱码的时候,一般情况下可以通过三个途径来检测你在哪个环节出现了问题:1,首先,建立好数据库以后(并且建好了表),你直接在数据库的操作界面直接向数据库插入一条中文数据进去.有两种情况: (1)出现乱码,那说明你的数据库配置出现了问题,所以,根据网上的资料和个人的经验(以MysqL为例),你可以找到你数据库安装目录下的(我的目录是C:\Program Files (x86)\MySQL\MySQL Server 5.0),my.ini文件,打开设置两个地方的值:default-ch