数字信号处理 三、再探时域数字信号处理
基本信号与基本算法
信号的表示方法
- 本章以一维信号为学习对象
- 连续信号f(t)
- 对应离散序列 x[n],其中 x[n] 是对 f(t) 的取样
- n 表示范围落在\(R_-,R_+,R\)中的整数
- n 的单位是“个”,即没有单位
- n<0指的是记录器开始的数据,无穷表示“未知”
离散时间信号的书写表示
- 大括号内数字序列:
\(\{x[n]\}=\{...,-0.2,2.2,1.1,0.2,-3.7,...\}\)
-
在上市中\(x[-1]=-0.2,x[0]=2.2,x[1]=1.1\)
-
n 的范围必须标注,如n=-3:5 或 -1<n<无穷
-
x不能大写,大写的表示频域
离散时间信号的编程
- 在编程处理中,一个序列的起始时间不一定是0或1
- 如x[n],n=-3:5
- 各个编程语言中数组都是从0或者1 indexed
- 或用其它方法,定义n数列,定义其实坐标+换算的方法进行处理。
- 编程练习作业1(推荐,选做)
- 定义一个数组表示信号,信号的起始时间不是0或者1
信号的表示
- 信号维度不受限制
- 多维信号还可以分为单一信号源的多维信号和多源的多维信号
- 本课主要讨论1维,但实践中大多是2维、3维及更高维度的信号
- 多不同维度进行简单展示\(y=f(x_1,x_2,x_3,...)\)
信号维度展示 1维
语音信号
信号维度展示 2维
灰度图像
信号维度展示 3维
RGB 3维彩色图像
信号维度 4维
视频信号 每帧是个彩色图像3维+时间1维
\(V=f(x,y,c,t)\)
信号维度的学习与理解
- 上课学习处理1维信号
- 对于高维信号,算法会有升维的运算
- 2维卷积,2维傅里叶变换
- 难度不高
- 很多情况下,各个维度具有独立性,或者如果我们只希望观测某一个维度的性质,可以把高维信号使用一维方法处理
4维信号的1维处理案例:潜意识广告
几个基本的信号分类
- 除了连续、离散的信号分类外,还有
- 实函数和复函数
- 关于复数信号的一些说明
- 纯量信号,只有一个信号源产生
- 由多个信号源产生的信号
基本处理方法
- 基本处理包括
- 多信号处理:加法、数乘、乘法
- 卷积、差分、微分等
基本处理-补零
对不齐就必须补零
- 补零是基本的处理操作
- 对于不同长度或不在统一时间范围的序列的运算,必须先对部一致的部分序列做适当的补零
- 例子(看不清)
- 例子(看不清)
基本处理-加法
- 加法运算
-
\(f(t)=g(t)+k(t)\)
-
应用例子:去噪
-
滑动窗口
基本运算-乘法
- 乘法运算:放大器,一般会将噪声干扰一起放大, 需要和其它处理方法配合使用
应用:
- 遮罩
- 调制,如:用不同的正弦信号调制任意模拟信号
基本运算-时移
时间位移运算
\(g(t)=f(t_0-t)\)
离散版本
\(g(n)=f(n-N)\),其中 N 为整数。
其中
- 若\(N>0\),延迟运算
- 若\(N<0\),超前运算
基本运算-反折
- 时间反向或是折迭运算
\(g(t)=f(-t)\)
- 离散格式\(y[n]=x[-n]\)
基本运算-拉伸
\(g(t)=f(k*t)\)
上采样和下采样
相对复杂的运算
基本运算-差分
- 离散格式: x[n] 代替f(t) ,则最小间隔由Δt→0而Δn=1,
f(t+Δt)→x[n+Δn]=x[n+1]
f(t)→x[n]
⇒ x′ [n]=x[n+1]-x[n]
- 上述公式成为离散序列的差分
基本运算-累加
差分的逆运算
卷积
- 卷积是整个数字信号处理中最重要的运算。
- 我们所学的基础处理整合起来称为“系统”
- 在本课程中我们只学习一种系统“线性时不变系统”
-
一个线性时不变系统,不管多么复杂,其都可以变成输出信号=输入信息与特定(且固定)信号的卷积
-
即:本课程的任何系统,都可以用卷积来表示和研究。
-
卷积分为两种:线性卷积和周期(循环)卷积
-
线性卷积的连续性表达式为
\(F(t)=f(t)∗g(t)=∫_a^bf(t-m)⋅g(m)dm\)
- 其离散表示
\(y(n)=x(n)∗h(n)=∑_{k=-∞}^∞x[n-k]⋅h[k]\)
- 注1:上述式子中的h(n)为什么使用h在后文会有所解释
-
注2:请注意上述式子中的所有时间序列符号, y(n), x(n), h(n),累加中的x[n-k],h[k] 累加的上下限分别为∞,-∞
-
运算基本流程: \(y(n)=x(n)∗h(n)=∑_{k=-∞}^∞x[n-k]⋅h[k]\)
- 将h(n)反转,作为滑动窗
- 对应公式中的 h(k)与x(n-k)
- 窗口内处理h(n),并进行对位相乘后求和
- 对应公式中的\(∑_{k=-∞}^∞\),滑动窗内求和
- 将滑动窗做x(n)最左侧一直移动到最右侧
- 对每一个点x(n) 进行运算,在公式中没有体现,
快速卷积
- 使用右侧对位相乘求和法求卷积,步骤:
- 两序列右对齐(不做反转)
- 逐个样值对应相乘但不进位
- 同列乘积值相加(注意n=0的点)
相关说明
- 所谓的快速卷积只是给人类手动算卷积准备的
-
节省的时间是不需要处理边缘效果的那几次滑动
-
当窗口很大时,节省的时间微乎其微
-
手动编写感受
-
所以计算机并不使用快速卷积
-
计算机使用转频域-> 算乘法->转回时域的方法
-
这个需要循环卷积
循环卷积
-
循环卷积的处理分为两部分:循环扩展和卷积
-
循环扩展:
- 循环卷积表述方法为k-循环卷积:需要把一个长度为n的序列扩展到长度为k,然后反复“拷贝”,构造循环序列
- 表述为 x(n)∙R_k (n)
- 做循环的意义在于引入信号的周期性,周期信号可以使用傅立叶变换进行“真.快速卷积”
-
请注意,循环卷积的k,是可能大于x(n)的长度N的
-
扩展后再做常规卷积,整体公式表示为
\(y(n)=x(n)⊛h(n)=(∑_{k=-∞}^∞(x[n-k]⋅h[k])∙R_k (n)\)
-
循环卷积与线性卷积的关系:
-
当x(n)与h[k]做线性卷积,其长度为N+K-1
- 做L点循环卷积,长度为 L
- 当L≥N+K-1时,两者输出序列一样
- 当L<N+K-1时,两者输出不同
-
请自行数学验证、计算验证、编程验证。
-
请根据算法知识,自行估算卷积的运算复杂度
-
为了降低卷积的算法复杂度,我们通常使用
-
傅立叶变换->乘法->逆傅里叶变换的方法
-
来计算 有限长序列的卷积,所以需要循环卷积
卷积的性质
1.交换律
\(x(n)∗h(n)=h(n)∗x(n)\)
2.结合律
\(x(n)∗h_1 (n)∗h_2 (n)=x(n)∗[h_1 (n)∗h_2 (n)]\)
3.分配律
\(x(n)∗[h_1 (n)+h_2 (n)]=x(n)∗h_1 (n)+x(n)∗h_2 (n)\)
4.不存在微分、积分性质。
总结
线性操作:
- 加法、累加、减法、数乘、差分等
线性操作打包后对应一个卷积 非线性操作:
- 上采样、下采样