【信号与系统学习笔记】—— 一起走进“卷积”的世界 1【详细整理+个人理解】

从这篇 B l o g Blog 开始,笔者就和大家一起走进《信号与系统》的世界啦!课程开始的第一个拦路虎—— 既重要又难懂的“卷积”,在这次 B l o g Blog 中,笔者整理了关于卷积的前世今生,以及它的各种性质。我们开始吧!

一、预备知识

1.1 一些约定的符号

我们在以后会使用 n n 来表示离散时间, n n 只能取整数。我们将会使用 t t 来表示连续的时间。
因此 x [ n ] x[n] 表示离散时间的输入; x ( t ) x(t) 表示连续时间的输入

1.2 单位冲激函数和单位阶跃函数

离散时间下的单位冲激函数和单位阶跃函数(用 δ [ n ] δ[n] 表示单位冲激函数, u [ n ] u[n] 表示单位阶跃函数)

连续时间下的单位冲激函数和单位阶跃函数

δ ( t ) δ_△(t) 是一个宽度为 ,高度为: 1 \frac{1}{△} 的矩形,面积始终为1。它的面积就代表了这一段 时间内冲激函数的强度 (这个概念在以后我们接触信号的连续谱时会更加深刻地理解)

1.2 系统的基本性质

这里先暂时介绍两个一会儿就需要用到的:1. 线性 2. 时不变
【1】关于系统的线性性质,很简单,就理解为系统满足叠加定理:比如对系统输入 x [ n ] x[n] ,系统就输出 h [ n ] h[n] 。那么如果对系统输入: a 1 x 1 [ n ] + a 2 x 2 [ n ] + a_1x_1[n] + a_2x_2[n] + \cdots ,那么系统也会相应地输出: a 1 h 1 [ n ] + a 2 h 2 [ n ] + a_1h_1[n] + a_2h_2[n] + \cdots

【2】时不变性:假设在 t t 时刻给系统输入了一个 δ ( t ) δ(t) ,系统响应 h ( t ) h(t) ;那么如果这个输入有一个 t 0 t_0 的时移,那么对应地,系统的输出也会有一个 t 0 t_0 的时移: h ( t t 0 ) h(t - t0)

二、卷积的前世

2.1 离散时间信号的分解表示

我们先来看看一个离散的时间信号:

既然是离散的,那么我们就可以把这个信号 x [ n ] x[n] 看成是由若干在不同时间 n, 幅度不同的冲激组成的冲激串,分解如下图所示:

上图仅仅展示了在 n = 2 , 1 , 0 , 1 n=-2, -1, 0, 1 时刻的分解。而我们由预备知识可以知道:如果想表示一个位置在 n = 2 n=-2 处的单位冲激函数,很简单,就是: δ ( n + 2 ) δ(n+2) ;想表示在 n = 1 n=1 处的单位冲激响应,那么就是: δ ( n 1 ) δ(n-1)

可是,这些不同位置的单位冲激响应的幅度怎么表示呢?因为在 x [ n ] x[n] 内,那些冲激的幅度各异,我们知道,在 n = 1 n=1 处的幅度是 x [ 1 ] x[1] ;在 n = 2 n=-2 处的幅度是 x [ 2 ] x[-2] 、、、

那么,在位置 n = 1 n=1 处的冲激信号我们就可以写成: x [ 1 ] = x [ 1 ] δ ( n 1 ) x[1] = x[1]δ(n-1)
在位置 n = 2 n=2 处的冲激信号我们可以写成: x [ 2 ] = x [ 2 ] δ ( n 2 ) x[2] = x[2]δ(n-2)
在位置 n = 1 n=-1 处的冲激信号我们可以写成: x [ 1 ] = x [ 1 ] δ ( n + 1 ) x[-1] = x[-1]δ(n+1)

如下图所示:

因此,我们得到离散时间信号的分解表示: x [ n ] = k = + x [ k ] δ [ n k ] x[n] = \sum_{k=-∞}^{+∞}x[k]δ[n-k]

对上式的理解:在上面的表达中,单位冲激函数其实是用来表达某一时刻冲激的位置的,比如说 δ [ n 1 ] δ[n-1] 表示 n = 1 的位置,而冲激的具体幅度值则由 x [ k ] x[k] 来表示

2.2 离散时间信号的卷积

在看这一节之前,请确保已经了解过 【预备知识】 中关于线性系统的特点。

我们定义:单位冲激响应 h h 是将单位冲激序列输入进系统 s y s t e m system 之后的输出

也就是说向系统输入一个 δ [ n ] δ[n] ,则系统的输出就是 h [ n ] h[n] 那么如果对应的 s y s t e m system 是一个线性系统,那么输入的是单位冲激函数的加权和,输出也是单位冲激响应 h h 的加权和

因此,我们重新回顾上面推导出来的式子: x [ n ] = k = + x [ k ] δ [ n k ] x[n] = \sum_{k=-∞}^{+∞}x[k]δ[n-k]
我们惊喜地发现: x [ k ] x[k] 仅仅是系数,或者说是不同位置的单位冲激函数的权值! 那么,也就是说,离散时间信号可以表示成单位冲激函数的加权和!

因此,离散时间信号输入系统,得到的输出就可以表示为: y [ n ] = k = + x [ k ] h k [ n ] (2.2.1) y[n] = \sum_{k=-∞}^{+∞}x[k]h_k[n]\tag{2.2.1}

其中, δ [ n k ] δ[n-k] 对应的单位冲激响应是: h k [ n ] h_k[n] 。而别忘了,我们现在讨论的系统还是时不变的!因此,我们有: h k [ n ] = h 0 [ n k ] h_k[n] = h_0[n-k] 。一般我们约定: h 0 [ n k ] = h [ n k ] h_0[n-k] = h[n-k]

最终,离散的时间信号通过系统得到的输出为: y [ n ] = k = + x [ k ] h [ n k ] (2.2.2) y[n] = \sum_{k=-∞}^{+∞}x[k]h[n-k]\tag{2.2.2}
我们说,式(2.2.2)就是信号 x [ n ] x[n] h [ n ] h[n] 的卷积,用符号 * 表示: y [ n ] = x [ n ] h [ n ] y[n] = x[n] * h[n]

2.2 连续时间信号的分解表示

还记得微积分的思想吗?对于一个连续时间的信号(也就是模拟信号),我们常常可以用若干个宽度为 的小矩形来逼近,当 越小的时候,逼近的效果越好。那么,如下图所示,我们就可以把一个连续时间信号拆分成若干个宽度为 的小矩形的叠加:(下图只画了其中一些部分

是不是和离散时间信号特别类似,只不过我们用矩形代替了线状冲激。

如何表示每一个小矩形的位置呢?—— 类似地,回顾 【预备知识】 中关于 δ ( t ) δ_{△}(t) 的介绍,我们用带时移的连续时间信号的单位冲激函数 δ ( t ) δ_{△}(t) 来表示。

我们用区间的左端电代表该矩形所表示的信号 x ( t ) x(t) 的值,我们看图(b)是区间 [ 2 , ] [-2△, -△] ,那么该矩形所表示的 x ( t ) x(t) 的值就是: x ( 2 ) x(-2△) ;图(d)是区间 [ 0 , ] [0, △] ,因此该矩形所表示的就是 x ( 0 ) x(0)

同样,**区间的左端点也代表了这个矩形所处的位置。**图(b)是区间 [ 2 , ] [-2△, -△] ,那么该矩形的位置就是在 2 -2△ ,用连续时间的单位冲激函数可以表示: δ ( t + 2 ) δ_{△}(t + 2△)

综上,我们知道了单位矩形脉冲的位置的幅值,因此,我们可以分别表示小矩形的面积:
图(b): x ( 2 ) δ ( t + 2 ) x(-2△)δ_{△}(t + 2△)△
图(c): x ( ) δ ( t + ) x(△)δ_{△}(t + △)△
图(d): x ( 0 ) δ ( t ) x(0)δ_{△}(t )△
\cdots

如下图所示:

因此,连续时间信号 x ( t ) x(t) 可以表示为: x ( t ) = + x ( 2 ) δ ( t + 2 ) + x ( ) δ ( t + ) + x ( 0 ) δ ( t ) + = k = + x ( k ) δ ( t k ) = lim 0 k = + x ( k ) δ ( t k ) = + x ( τ ) δ ( t τ ) d τ \begin{aligned} x(t) &= \cdots + x(-2△)δ_{△}(t + 2△)△ + x(△)δ_{△}(t + △)△ + x(0)δ_{△}(t )△ + \cdots\\ &=\sum_{k=-∞}^{+∞}x(k△)δ_△(t - k△)△\\ &=\lim_{△\to0}\sum_{k=-∞}^{+∞}x(k△)δ_△(t - k△)△\\ &=\int_{-∞}^{+∞}x(τ)δ_△(t-τ)dτ \end{aligned}

2.3 连续时间信号的卷积

至此,连续时间信号我们就可以用单位冲激信号的加权叠加表示了: x ( t ) = + x ( τ ) δ ( t τ ) d τ x(t) = \int_{-∞}^{+∞}x(τ)δ_△(t-τ)dτ

那么类似地,经过单位脉冲响应得到的输出信号就是: y ( t ) y(t) y ( t ) = + x ( τ ) h ( t τ ) d τ y(t) = \int_{-∞}^{+∞}x(τ)h(t-τ)dτ

y ( t ) y(t) x ( t ) x(t) h ( t ) h(t) 卷积的结果,用: y ( t ) = x ( t ) h ( t ) y(t) = x(t)*h(t) 来表示。

我们从输出 y ( t ) y(t) 的角度看看: y ( t ) y(t) 其实也是一些类不同位置输入得到的响应 h ( t k ) h(t-k△) 的叠加:

三、卷积的今生

3.1 离散时间信号卷积的计算过程

还记得离散时间信号卷积的计算公式吗? y [ n ] = k = + x [ k ] h [ n k ] y[n] = \sum_{k=-∞}^{+∞}x[k]h[n-k]
为了具体化,我们令: x [ n ] = α n u [ n ] x[n] = α^nu[n] h [ n ] = u [ n ] h[n] = u[n]
也即是说,输入信号 x [ n ] x[n] 是一个指数衰减乘以单位阶跃,系统衰减 h [ n ] h[n] 是离散时间的单位阶跃信号。如下图所示:

不过我们要知道,计算卷积 y [ n ] y[n] ,我们要的是 x [ k ] x[k] 而不是 x [ n ] x[n] ;要 h [ n k ] h[n-k] 而不是 h [ n ] h[n] .

x [ k ] x[k] 好办,我们直接把原来横坐标的 n 换成 k 即可,其中一直都有: n = k n = k !

而要想找到 h [ n k ] h[n-k] 首先我们先考虑 h [ k ] h[-k] 是什么? h [ k ] h[-k] 的获得,首先我们也是把原来 h [ n ] h[n] 的横坐标由 n 改成 k,然后再以纵轴为对称轴反转,得到 h [ k ] h[-k]

至于 h [ n k ] h[n-k] ,我们可以这样理解:把 h [ n k ] h[n-k] 看成一种滑动。什么意思呢?比如说我们要求在 n 0 n_0 时刻系统的输出,那么我们就把 h [ k ] h[-k] 的原点移动到和 x [ k ] x[k] 图像中和 k = n 0 k = n_0 对齐的位置。

那么,试想一下:如果一个系统在某一段离散时间( n 2 , n 1 , n 0 , n 1 , n 2 , n 3 n_{-2}, n_{-1},n_0,n_1,n_2,n_3 )都有输入,那么系统的整个输出就是系统在这几个时间点响应的叠加对吧。为了计算这些分响应,我们就分别把 h [ k ] h[-k] 图像的原点开始滑动,分别与 x [ k ] x[k] k = n 2 , n 1 , n 0 , n 1 , n 2 , n 3 k = n_{-2}, n_{-1},n_0,n_1,n_2,n_3 的坐标对齐计算。

下图为例展示了上述过程:

当有若干个 n 值的时候,系统的输出 y [ n ] y[n] 所形成的曲线长下面这样:

3.1.1 离散时间信号卷积数学推导

根据上面这个例子,我们现在是直观地了解了卷积的计算过程,那么这个例子中,最后输出的 y [ n ] y[n] 的表达式是什么呢?我们一起来推导一下:

首先,大家应该已经清楚 h [ n k ] h[n-k] 的意义了,它就是把 h [ k ] h[-k] 原本的零点和 x [ k ] x[k] 上某一时刻 k = n 0 k = n_0 对齐。而卷积是要计算 x [ k ] x[k] h [ n k ] h[n-k] 重叠部分的乘积和。因此,得关注它们重叠部分。

首先,由于 x [ n ] = α n u [ n ] x[n] = α^nu[n] h [ n ] = u [ n ] h[n] = u[n] 。因此, x [ k ] = α k u [ k ] x[k] = α^{k}u[k] h [ n k ] = u [ n k ] h[n-k] = u[n-k]
那么,我们有: y [ n ] = k = + α k u [ k ] u [ n k ] y[n] = \sum_{k=-∞}^{+∞}α^{k}u[k]u[n-k]
根据上面 x [ k ] x[k] h [ n k ] h[n-k] 得图像,我们感觉可以把 n 划分成两个区间: n < 0 n<0 n > 0 n > 0

【1】当 n < 0 n < 0 时,很明显 x [ k ] x[k] h [ n k ] h[n-k] 没有重叠部分, y [ n ] = 0 y[n] = 0
【2】当 n > 0 n> 0 时, x [ k ] x[k] h [ n k ] h[n-k] 有重叠部分,如下图所示:

那么,此时 y [ n ] y[n] 序列表示可以改写成: y [ n ] = k = 0 n α k y[n] = \sum_{k=0}^{n}α^k
因为重叠部分总有: u [ k ] u [ n k ] = 1 u[k]u[n-k]=1
因此,在 n > 0 n>0 的情况下,有: y [ n ] = k = 0 n α k = 1 α n + 1 1 α y[n] = \sum_{k=0}^{n}α^k = \frac{1-α^{n+1}}{1-α}
综上,我们得出: y [ n ] = { 0 ( n < 0 ) 1 α n + 1 1 α ( n 0 ) y[n] = \begin{cases} 0& (n<0)\\ \frac{1-α^{n+1}}{1-α} &(n≥0)\\ \end{cases}

3.2 连续时间信号卷积的计算过程

回顾一下连续时间信号的卷积公式: y ( t ) = + x ( τ ) h ( t τ ) d τ y(t) = \int_{-∞}^{+∞}x(τ)h(t-τ)dτ
现在,我们假设 x ( t ) = e a t u ( t ) x(t) = e^{-at}u(t) h ( t ) = u ( t ) h(t) = u(t)

具体的滑动过程这里就不再赘述了,也是和离散时间信号一样的。

3.2.1 连续时间信号卷积数学推导

一样地分成两个区间:
【1】 t < 0 t < 0 时: h ( t τ ) h(t-τ) x ( τ ) x(τ) 没有重叠的地方,因此 y ( t ) = 0 y(t) = 0
【2】 t > 0 t >0 时, h ( t τ ) h(t-τ) x ( τ ) x(τ) 有重叠的地方, u ( τ ) u ( t τ ) = 1 u(τ)u(t-τ)=1 ,因此,我们可以把 y ( t ) y(t) 写成: y ( t ) = 0 t e a τ d τ y(t) = \int_{0}^{t}e^{-aτ}dτ

因此,在 t > 0 t>0 时,我们得到: y ( t ) = 0 t e a τ d τ = 1 a ( 1 e a t ) y(t) = \int_{0}^{t}e^{-aτ}dτ = \frac{1}{a}(1-e^{-at})

四、卷积意义的深入理解

我们假设一个系统,在某一时刻 t 0 = 0 t_0=0 突然收到一个输入信号,但瞬间就又消失了(一个冲击信号),那么系统就会像下图一样缓慢地恢复到原来的状态:

下面我们来看另一种情况:假设这个系统在恢复的过程中(比如说第2s)又收到一个一样的冲击,那么,它就变成这样了:

那么,它的输出会再一次增长(而且会增长到比第一次响应更大的位置),再开始衰减。
如果继续按每隔2s的频率给它冲激响应,就会变成下面这个样子:

那么,某一时刻 t t 系统的输出与什么有关呢?答案是:与每一次的冲击响应都有关,但是每一次冲击响应对 t t 时刻输出的贡献程度都不一样,距离 t t 最近的那一次冲击响应对输出的影响最大。

某一时刻的输出就是之前很多次输入(冲击响应)乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是这个系统的输出大小随时间变化的函数

如果冲击响应再密集一点,就有积分那味儿了:

因此卷积之后得到的结果就是记忆系统输出随时间变化的函数

这篇 B l o g Blog 就暂时写到这儿,我们从离散时间和连续时间的角度推导出了卷积的公式,也分别从直观角度、数学角度学习了卷积和或卷积积分的计算方法。下一篇 B l o g Blog 是本文的续集,我们将会学习卷积的一些性质,以及深入探索系统的性质和卷积的关系。我们下次再见啦!

五、参考资料

【1】《信号与系统(第二版)》奥本海姆
【2】【通信原理 入坑之路】——深入、详细地理解通信里面“卷积”概念
【3】知乎 —— 如何理解卷积
【4】《深入浅出通信原理》陈爱军

发布了113 篇原创文章 · 获赞 327 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44586473/article/details/104260104