Skip to content

数字信号处理 三、再探时域数字信号处理

基本信号与基本算法

信号的表示方法

  • 本章以一维信号为学习对象
  • 连续信号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.不存在微分、积分性质。

总结

线性操作:

  • 加法、累加、减法、数乘、差分等

线性操作打包后对应一个卷积 非线性操作:

  • 上采样、下采样