文章目录

  • 一、前言
  • 二、线性时不变(LTI)系统
  • 三、冲激函数
  • 四、阶跃函数
  • 五、卷积
    • 5.1 卷积的推导
    • 5.2 LTI系统卷积的性质
      • 5.2.1 交换律
      • 5.2.2 分配律
      • 5.2.3 结合律

数字信号处理是音视频开发所必不可少的一项技能,我会从本篇开始,开启一系列入门文章,分享关于数字信号处理方面的知识。这只是一个精简的知识提炼,供大家进行入门,也是对自己的一个备忘和学习笔记。难免会有纰漏,要深入的同学请务必去看一些经典教材。

文章以 * 来表示乘法,以⊗表示卷积\otimes表示卷积⊗表示卷积

一、前言

数字信号处理我们日常生活中其实会经常接触到,像音频、视频、机械控制等等。简单来说就是一个信号xxx,通过系统SSS后输出信号yyy,系统SSS需要对信号进行处理,比如滤除噪音、调节频率等等。数字信号处理讲的就是对xxx进行操作的学问。

二、线性时不变(LTI)系统

一般我们说数字信号处理都是基于线性时不变(LTI)系统,那么什么是LTI系统呢?顾名思义
1. 线性: 这个线性其实就是我们所用的线性方程中的那个概念,满足叠加定理,比如x1→y1x_1 \rightarrow y1x1​→y1是一个映射(也就是我们常说的函数关系)。假设有x2=ax1x_2 = ax_1x2​=ax1​,经过同样的映射x2→y2x_2 \rightarrow y_2x2​→y2​,那么y2=ay1y_2 = ay_1y2​=ay1​。

2. 时不变: 这个就更好理解了。同样一个输入信号,任何时候的输出都是一样的。

三、冲激函数

冲激函数是指在0点上有值,而在其他地方均为0的函数。通常使用δ\deltaδ表示。

连续形式:
δ(t)={+∞t=00t≠0\delta(t) = \begin{cases} +\infty & t = 0\\ 0 & t \neq 0 \end{cases} δ(t)={+∞0​t=0t​=0​

上面的式子比较抽象,其实它只有一个定义,就是在负无穷到正无穷的积分是1。

离散形式:
δ[n]={1n=00n≠0\delta[n] = \begin{cases} 1 & n = 0\\ 0 & n \neq 0 \end{cases} δ[n]={10​n=0n​=0​

它们各有一些性质,不过我们马上使用的是一些直观上的数学性质。

需要说明的一点,之后我们推导的很多公式都会以连续信号和离散信号的形式。连续信号我们以x(t)x(t)x(t)表示,离散信号我们以x[n]x[n]x[n]表示

四、阶跃函数

阶跃函数是从0开始到正无穷都为1,从负无穷到0都为0的函数。

连续形式:

u(t)={1t>00t<0u(t) = \begin{cases} 1 & t > 0\\ 0 & t < 0 \end{cases} u(t)={10​t>0t<0​

需要注意的是,阶跃函数在t=0这一点是不连续的。
连续的阶跃函数和冲激函数有这么一层关系,从上面讲的连续冲击函数的定义,就可以得出
u(t)=∫−∞tδ(τ)dτu(t) = \int^{t}_{-\infty}\delta(\tau)d\tau u(t)=∫−∞t​δ(τ)dτ
因为δ(t)\delta(t)δ(t)在负无穷到正无穷的积分是1。那么δ(t)\delta(t)δ(t)就是u(t)u(t)u(t)的一阶微分。但上面也说过u(t)u(t)u(t)在t=0时是不连续的,因此严格来说不是可导的。但如果将u(t)u(t)u(t)认为是在一个很小的间隔Δ\DeltaΔ内从0上升到1的,那就不难理解了。而这种情况,其实在现实世界中才是真正常见的。

离散形式:
u[n]={1n≥00n<0u[n] = \begin{cases} 1 & n \ge 0\\ 0 & n < 0 \end{cases} u[n]={10​n≥0n<0​

显然离散形式要简单多了。同连续形式,我们也可以得出离散的冲击函数和阶跃函数的关系。
u[n]=∑m=−∞nδ[m]u[n] = \sum_{m = -\infty}^{n}\delta[m] u[n]=m=−∞∑n​δ[m]
u[n]u[n]u[n]是δ[n]\delta[n]δ[n]的求和
或者
δ[n]=u[n]−u[n−1]\delta[n] = u[n] - u[n - 1] δ[n]=u[n]−u[n−1]
δ[n]\delta[n]δ[n]是u[n]u[n]u[n]的差分。

从以上形式不难看出一个规律,离散的求和对应连续的积分,离散的差分对应连续的微分,这一点将会在记忆一些性质的时候特别有用。后面我们也将会更加深刻地体验到。

五、卷积

5.1 卷积的推导

让我们以离散信号举例,从上面的冲激函数和阶跃函数来推导。
设有一信号
x[n]=...+x[−2]+x[−1]+x[0]+x[1]+x[2]+...x[n] = ... + x[-2] + x[-1] + x[0] + x[1] + x[2] + ...x[n]=...+x[−2]+x[−1]+x[0]+x[1]+x[2]+...
由于我们是从数学上来推导,因此暂且不要关心信号的序号为什么会有负的。
由冲激函数的定义,我们可以稍稍变形
x[i]=x[i]∗δ[n−i]x[i] = x[i] * \delta[n - i]x[i]=x[i]∗δ[n−i]
因为当且仅当i=ni = ni=n时δ[n−i]=1\delta[n - i] = 1δ[n−i]=1
那么
x[n]=...+x[−2]∗δ[n+2]+x[−1]∗δ[n+1]+x[0]∗δ[n]+x[1]∗δ[n−1]+x[2]∗δ[n−2]+...=∑k=−∞+∞x[k]∗δ[n−k]x[n] = ... + x[-2] * \delta[n + 2] + x[-1] * \delta[n + 1] + x[0] * \delta[n] + x[1] * \delta[n - 1] + x[2] * \delta[n - 2] + ...\\ =\sum_{k=-\infty}^{+\infty}x[k] * \delta[n-k]x[n]=...+x[−2]∗δ[n+2]+x[−1]∗δ[n+1]+x[0]∗δ[n]+x[1]∗δ[n−1]+x[2]∗δ[n−2]+...=k=−∞∑+∞​x[k]∗δ[n−k]

设有一LTI系统对冲激信号δ[n]\delta[n]δ[n]的响应为h[n]h[n]h[n],称为冲激响应。由我们对LTI系统的定义,它是满足叠加性质的,也就是说,对于系统S,它的输入为δ[n]\delta[n]δ[n],输出为h[n]h[n]h[n],根据LTI的线性性质,就有
x[i]∗δ[n−i]→x[i]∗h[n−i]x[i] * \delta[n - i] \rightarrow x[i] * h[n - i]x[i]∗δ[n−i]→x[i]∗h[n−i]
此处我们把x[i]x[i]x[i]看做了一个系数。
因此可以得出系统S对x[t]x[t]x[t]的输出为
y[n]=∑k=−∞+∞x[k]∗h[n−k]=x[n]⊗h[n]y[n] = \sum_{k=-\infty}^{+\infty}x[k] * h[n-k]\\ =x[n] \otimes h[n]y[n]=k=−∞∑+∞​x[k]∗h[n−k]=x[n]⊗h[n]
这便是卷积的定义。由此我们也能得出,只要知道了一个系统的冲激响应,那么就可以得出它对任意输入信号的输出。

需要区分δ[n]\delta[n]δ[n]和h[n]h[n]h[n]的区别,虽然δ[n]\delta[n]δ[n]是一个冲激信号,只在一个时段有值,但它的响应h[n]h[n]h[n]是一个普通的信号,有可能是任何形式的,但是绝大部分来说,h[n]h[n]h[n]都会持续一段时间。
这就好像有一台马达,你在很短的时间内给它电源,断掉之后它还会持续转一会儿。
类似于这样

当然,也有输入时冲激信号,输出也是冲激信号,就是
h[n]=Kδ[n]h[n] = K\delta[n]h[n]=Kδ[n]
那么这样的系统我们称之为无记忆系统,当前的输出只和当前的输入有关。但现实世界中我们绝大多数都面对的是有记忆系统,当前的输出和之前的输入以及当前的输入有关。上面马达的例子还有图都是有记忆系统。
说到这个,系统还分为因果系统非因果系统。因果系统是输出仅和之前以及目前的输入有关,而非因果系统是输出和之前、现在以及将来的输入有关。非因果系统实在太过诡异,以至于我目前还无法理解,也没遇到过。我们说的系统,都是因果系统。

5.2 LTI系统卷积的性质

5.2.1 交换律

∑k=−∞+∞x[k]∗h[n−k]=x[n]⊗h[n]=h[n]⊗x[n]=∑k=−∞+∞h[k]∗x[n−k]\sum_{k=-\infty}^{+\infty}x[k] * h[n-k] = x[n] \otimes h[n] = h[n] \otimes x[n] = \sum_{k=-\infty}^{+\infty}h[k] * x[n-k]k=−∞∑+∞​x[k]∗h[n−k]=x[n]⊗h[n]=h[n]⊗x[n]=k=−∞∑+∞​h[k]∗x[n−k]
假设有r=n−kr = n - kr=n−k
那么
∑k=−∞+∞x[k]∗h[n−k]=∑r=−∞+∞h[r]∗x[n−r]=h[n]⊗x[n]\sum_{k=-\infty}^{+\infty}x[k] * h[n-k] = \sum_{r=-\infty}^{+\infty}h[r]*x[n - r] = h[n] \otimes x[n]k=−∞∑+∞​x[k]∗h[n−k]=r=−∞∑+∞​h[r]∗x[n−r]=h[n]⊗x[n]

5.2.2 分配律

x[n]⊗(h1[n]+h2[n])=x[n]⊗h1[n]+x[n]⊗h2[n]x[n] \otimes (h_1[n] + h_2[n]) = x[n] \otimes h_1[n] + x[n] \otimes h_2[n]x[n]⊗(h1​[n]+h2​[n])=x[n]⊗h1​[n]+x[n]⊗h2​[n]
这个就更简单了,便不单独推导了。

用系统框图表示就是

上下两个系统是等价的

5.2.3 结合律

x[n]⊗h1[n]⊗h2[n]=x[n]⊗h2[n]⊗h1[n]x[n] \otimes h_1[n] \otimes h_2[n] = x[n] \otimes h_2[n] \otimes h_1[n]x[n]⊗h1​[n]⊗h2​[n]=x[n]⊗h2​[n]⊗h1​[n]

这个需要从求和公式中推导,这里就不展开了,记住就好。

根据这个式子,有一个很重要的结论。
假设信号x[n]x[n]x[n]先经过冲激响应为h1[n]h_1[n]h1​[n]系统S1,得到输出为w[n]w[n]w[n],然后w[n]w[n]w[n]经过冲激响应为h2[n]h_2[n]h2​[n]系统S2,得到最终输出y[n]y[n]y[n]。那么它也等效于信号x[n]x[n]x[n]先经过S2再经过S1。如下图。

牢记以上的几条性质,对于系统设计会非常有用。

上面都是以离散信号举例,其实对于连续信号来说,也是一样的,只是把求和换成积分。
y(n)=∫−∞+∞x(k)∗h(n−k)dk=x(n)⊗h(n)y(n) = \int_{-\infty}^{+\infty}x(k) * h(n-k)dk\\ =x(n) \otimes h(n)y(n)=∫−∞+∞​x(k)∗h(n−k)dk=x(n)⊗h(n)
由于我们目前将的都是数字信号处理,因此着重讲离散信号,连续信号都会跟着提一下。

至此,讲完了卷积的由来,下一篇我们讲一下傅里叶变换。

数字信号处理1:卷积相关推荐

  1. 数字信号处理中卷积的计算

    数字信号处理的一条原则呢就是把信号分解成一个一个的脉冲信号,输入到系统之后得到输出响应,再把这些输出响应做一个线性的叠加就可以得到真是的响应了.这一点是非常重要的,不管是卷积还是傅里叶变换,本质就是这 ...

  2. 【数字信号处理】卷积编程实现 ( Matlab 卷积和多项式乘法 conv 函数 | 使用 matlab 代码求卷积并绘图 )

    文章目录 一.Matlab 卷积和多项式乘法 conv 函数 二.使用 matlab 代码求卷积并绘图 一.Matlab 卷积和多项式乘法 conv 函数 Matlab 文档地址 : https:// ...

  3. 数字信号处理中卷积的图形化动态解释

    目录(?)[+] 卷积 图示两个方形脉冲波的卷积.其中函数 "g" 首先对  反射,接着平移 "t" ,成为  .那么重叠部份的面积就相当于 "t&q ...

  4. Matlab | 数字信号处理:卷积

    ========================================== 博主github:https://github.com/MichaelBeechan 博主CSDN:https:/ ...

  5. 【数字信号处理】卷积和乘法系列3之测不准原理

    关注公号[逆向通信猿]更精彩!!! 声明:底部的小广告标签并不是博主所加!! Heisenberg测不准原理 信息在时域中的扩展(尖峰之间的距离)与其在频域中的对应扩展之间的这种关系是Heisenbe ...

  6. 数字信号处理matlab卷积函数conv,filter函数详细介绍三秒钟就看懂。

    %x (n) =sin( pi*n/ 5),-10<= 10 (正弦离散函数) n1=-10:1:10; x1=sin(pi*n1/5); subplot(2,2,1); stem(n1,x1, ...

  7. 【数字信号处理】卷积编程实现 ( 卷积计算原理 | 卷积公式计算 | 使用 matlab 计算卷积 | 使用 C 语言实现卷积计算 )

    文章目录 一.卷积计算原理 二.卷积计算 1.计算 y(0) 2.计算 y(1) 3.计算 y(2) 三.使用 matlab 计算卷积 四.使用 C 语言实现卷积计算 一.卷积计算原理 对于 线性时不 ...

  8. 【数字信号处理】卷积和乘法系列2之AM调制、幅度谱和相位谱(含MATLAB代码)

    关注公号[逆向通信猿]更精彩!!! 案例2的应用--幅度调制(AM) 能够预测卷积两个信号的结果是很有用的.一个明显的例子是 AM 调制(参见上一节 和下面的图 1),其中载波通过混合(混频)由基带信 ...

  9. 【数字信号处理】卷积和乘法系列3之傅里叶变换对

    关注公号[逆向通信猿]更精彩!!! 声明:底部的小广告标签并不是博主所加!! 傅里叶变换对(Fourier Transform pairs, FTP) 我们考虑的第一个FTP从时间域中的梳状函数开始, ...

  10. 【数字信号处理】相关函数 ( 卷积与交换性 | 相关函数不具有交换性 | 推导过程 )

    文章目录 一.卷积与交换性 1.卷积概念 2.卷积交换律 二.相关函数交换性 一.卷积与交换性 1.卷积概念 对于 线性时不变系统 ( LTI - Linear time-invariant ) 来说 ...

最新文章

  1. myeclipse 10创建maven项目
  2. html 占位文本,跨浏览器的HTML5占位文本(PlaceHolder)方案
  3. python之简单的get和post请求
  4. class-感知机Perception
  5. y电容如何选型_高压并联补偿电容器基础及运行管理
  6. 一周学会Mootools 1.4中文教程:(4)类型
  7. androidsdcard挂载目录_获取android手机的自带存储路径和sdcard存储路径
  8. PHP 利用curl 模拟get post 请求
  9. 看mysql手册中模式(SQL_MODE)学到的知识
  10. MySQL配置文件配置
  11. 装微软原版win10系统
  12. 计算机发展趋势 五笔型码,计算机五笔识别码字有哪些
  13. ARM920T虚拟地址原理分析及实现
  14. python 根据单位名称爬取单位统一社会信用代码
  15. S32K144之芯片锁死解锁——关闭debug端口
  16. LZJ的python学习第一天
  17. 数据流系列-2-前后端数据传输技巧2
  18. 业务流程管理(BPM)系统的九大必备特点
  19. CAD怎么进行给水计算?CAD给水计算教程
  20. 无人机在精准农业中的研究综述

热门文章

  1. OpenStack Keystone架构
  2. Android开发14——监听内容提供者ContentProvider的数据变化
  3. 常用数据挖掘算法举例(上)
  4. 'htmlentities(): charset `utf8' not supported, assuming utf-8'
  5. 学会使用JDK API
  6. 社会内卷的真正原因:华为内部论坛的这篇短文讲透了
  7. KDD Cup 2020 Debiasing比赛冠军技术方案及在美团广告的实践
  8. 《统计学习方法》代码全解析——第四部分朴素贝叶斯
  9. Normalizing Flows Tutorial(标准化流教程)第一部分
  10. 2022年 预训练的下一步是什么?