数字信号处理1:卷积
文章目录
- 一、前言
- 二、线性时不变(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)={+∞0t=0t=0
上面的式子比较抽象,其实它只有一个定义,就是在负无穷到正无穷的积分是1。
离散形式:
δ[n]={1n=00n≠0\delta[n] = \begin{cases} 1 & n = 0\\ 0 & n \neq 0 \end{cases} δ[n]={10n=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)={10t>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]={10n≥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:卷积相关推荐
- 数字信号处理中卷积的计算
数字信号处理的一条原则呢就是把信号分解成一个一个的脉冲信号,输入到系统之后得到输出响应,再把这些输出响应做一个线性的叠加就可以得到真是的响应了.这一点是非常重要的,不管是卷积还是傅里叶变换,本质就是这 ...
- 【数字信号处理】卷积编程实现 ( Matlab 卷积和多项式乘法 conv 函数 | 使用 matlab 代码求卷积并绘图 )
文章目录 一.Matlab 卷积和多项式乘法 conv 函数 二.使用 matlab 代码求卷积并绘图 一.Matlab 卷积和多项式乘法 conv 函数 Matlab 文档地址 : https:// ...
- 数字信号处理中卷积的图形化动态解释
目录(?)[+] 卷积 图示两个方形脉冲波的卷积.其中函数 "g" 首先对 反射,接着平移 "t" ,成为 .那么重叠部份的面积就相当于 "t&q ...
- Matlab | 数字信号处理:卷积
========================================== 博主github:https://github.com/MichaelBeechan 博主CSDN:https:/ ...
- 【数字信号处理】卷积和乘法系列3之测不准原理
关注公号[逆向通信猿]更精彩!!! 声明:底部的小广告标签并不是博主所加!! Heisenberg测不准原理 信息在时域中的扩展(尖峰之间的距离)与其在频域中的对应扩展之间的这种关系是Heisenbe ...
- 数字信号处理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, ...
- 【数字信号处理】卷积编程实现 ( 卷积计算原理 | 卷积公式计算 | 使用 matlab 计算卷积 | 使用 C 语言实现卷积计算 )
文章目录 一.卷积计算原理 二.卷积计算 1.计算 y(0) 2.计算 y(1) 3.计算 y(2) 三.使用 matlab 计算卷积 四.使用 C 语言实现卷积计算 一.卷积计算原理 对于 线性时不 ...
- 【数字信号处理】卷积和乘法系列2之AM调制、幅度谱和相位谱(含MATLAB代码)
关注公号[逆向通信猿]更精彩!!! 案例2的应用--幅度调制(AM) 能够预测卷积两个信号的结果是很有用的.一个明显的例子是 AM 调制(参见上一节 和下面的图 1),其中载波通过混合(混频)由基带信 ...
- 【数字信号处理】卷积和乘法系列3之傅里叶变换对
关注公号[逆向通信猿]更精彩!!! 声明:底部的小广告标签并不是博主所加!! 傅里叶变换对(Fourier Transform pairs, FTP) 我们考虑的第一个FTP从时间域中的梳状函数开始, ...
- 【数字信号处理】相关函数 ( 卷积与交换性 | 相关函数不具有交换性 | 推导过程 )
文章目录 一.卷积与交换性 1.卷积概念 2.卷积交换律 二.相关函数交换性 一.卷积与交换性 1.卷积概念 对于 线性时不变系统 ( LTI - Linear time-invariant ) 来说 ...
最新文章
- myeclipse 10创建maven项目
- html 占位文本,跨浏览器的HTML5占位文本(PlaceHolder)方案
- python之简单的get和post请求
- class-感知机Perception
- y电容如何选型_高压并联补偿电容器基础及运行管理
- 一周学会Mootools 1.4中文教程:(4)类型
- androidsdcard挂载目录_获取android手机的自带存储路径和sdcard存储路径
- PHP 利用curl 模拟get post 请求
- 看mysql手册中模式(SQL_MODE)学到的知识
- MySQL配置文件配置
- 装微软原版win10系统
- 计算机发展趋势 五笔型码,计算机五笔识别码字有哪些
- ARM920T虚拟地址原理分析及实现
- python 根据单位名称爬取单位统一社会信用代码
- S32K144之芯片锁死解锁——关闭debug端口
- LZJ的python学习第一天
- 数据流系列-2-前后端数据传输技巧2
- 业务流程管理(BPM)系统的九大必备特点
- CAD怎么进行给水计算?CAD给水计算教程
- 无人机在精准农业中的研究综述
热门文章
- OpenStack Keystone架构
- Android开发14——监听内容提供者ContentProvider的数据变化
- 常用数据挖掘算法举例(上)
- 'htmlentities(): charset `utf8' not supported, assuming utf-8'
- 学会使用JDK API
- 社会内卷的真正原因:华为内部论坛的这篇短文讲透了
- KDD Cup 2020 Debiasing比赛冠军技术方案及在美团广告的实践
- 《统计学习方法》代码全解析——第四部分朴素贝叶斯
- Normalizing Flows Tutorial(标准化流教程)第一部分
- 2022年 预训练的下一步是什么?