17 第十七章 数字信号简介
两水夹明镜,双桥落彩虹。
17.1 信号
简单来说信号(Signal)是指某个随着时间变化而在不断变化或不变的物理量。例如保持稳定高度的水位、一天里房间里的温度或不断变化的电压,这些信号通常可以被记录为一个关于时间的函数\(x(t)\),其中\(t\)是一个连续的具有无限精度的变量,无限精度源于我们把时间抽象成了一个实数,实数在数学上具有无限可分性,对于任意两个实数\(a\)和\(b\),总存在实数 $ 满足\(a < c < b\),因此理论上可以无限地去精确时间,这也符合人们普遍的认知,一个连续的东西可以被无穷地细分。这样的信号被称为连续信号或模拟信号(Analog Signal)。
与之相对的是数字信号\(x[N]\)(Digital Signal),数字信号由模拟信号采样并量化得来。采样是对时间域的离散,例如每秒采样100个数据点,则采样率\(f_s\) 等于\(100\,\text{Hz}\),量化是对值域的离散,例如把模拟信号连续的值域1.5~1.6都量化为1.5,这样解决了模拟信号难以储存和计算的问题。
数字信号\(x[N]\)是一串离散的数据值集合,它们按照顺序排列,第 \(n\) 个数据代表了第 \(n\) 个采样点所采集到的数据,可用\(x[n]\)来表示。
17.2 信号延迟
在信号处理中,卷积是一种数学运算,它能模拟出信号通过某个系统后会出现的响应。但在介绍卷积之前,还需要对信号延迟有所了解。
延迟指数字信号延缓一定数量的采样时间再进行输出,时间轴上表现出来就是形状往后移,数学上记为\(x[N - k]\),代表\(x[N]\)延迟了\(k\)个采样点。
对于\(x[0]\)之前的信号,如\(x[-1]\)、\(x[-2]\)等,它们属于第一个采样点之前的信号,一般会用0来代替。
17.3 环境声学模拟
介绍卷积之前,我们可能更想知道为什么需要卷积,因为某个概念如果对人们完全没用,那其实人们也不需要这个概念。
环境声学模拟也被称为卷积混响,同一段音频,在空旷的广场播放和在音乐厅播放会有完全不同的效果,那该如何获得这些不同环境下的声音?
考虑一个如下形状的房间:
假设在\(A\) 点发出声音,那\(B\) 点听起来会是怎样的呢?首先要明白声音依靠空气传播,表现为波的形式。波会朝着四面八方扩散并反射,因此在\(B\) 点看来,声音从\(A\) 点发射至少会有这些路径到达\(B\) 点:
路径1被称为直接路径,它不经过任何反射直接到达\(B\) 点,路径2被称为间接路径,它经过了4次反射才到达\(B\) 点。由于两条路径长度不一样,声音到达\(B\) 点的时间也就不一样。假设初始时刻从\(A\) 点发出一个脉冲信号\(\delta\)[\(N\)]的声音,\(\delta\)[\(N\)]的每个元素\(\delta[n]\) 满足:
\[ \delta[n] = \begin{cases} 1, & n = 0 \\ 0, & n \neq 0 \end{cases} \tag{17.1}\]
然后在\(B\) 点进行采样,会得到如下结果:
\(B\) 点会分别在\(t_1\) 和\(t_2\) 时刻采样到声音信号,其中\(t_1\) 是路径1的声音,因为这条路径上不存在障碍,所以声音的能量损耗最小。\(t_2\) 时刻是路径2的声音,声音会在每次反射过程中都损失一些能量,以后导致接收到的声音信号减小很多。
图 17.3 只画出了两条声音路径,若考虑房间里所有可能的路径,那在\(B\) 点的信号可能是这样的:
从\(t_1\) 时刻开始接收到直接路径传递到的声音,之后声音逐渐变小直到\(t_3\) 时刻消失。
基于此模型人们定义了空间的“混响时间”:混响时间是指从接收到声音开始直到声音能量下降60分贝所花费的时间。一般做了隔音的吸音房或静音室的混响时间小于0.5秒,音乐厅的混响时间在3秒左右。
回到 图 17.4,假设房间只有这两条声音传播路径,那能否通过脉冲信号在\(B\) 点的响应模拟出任意声音从\(A\) 点发出后在\(B\) 点的响应?
答案是可以的,首先想象一下初始时刻从\(A\) 点发出的脉冲信号幅度变为\(\frac{1}{2}\),那在\(B\) 点经过\(t_1\) 的时间后,会收到一个幅度为\(\frac{1}{2} \times 0.9 = 0.45\)的信号,经过\(t_2\) 时间后接收到幅度为0.2的信号。这是合理的假设,因为声源声音减小,那人们听到的声音也会成比例地减小。其次假设从\(A\) 点发出的信号延迟了 \(\Delta t\) 的时间,那从\(B\)接收到两个信号的时间也会分别变为 \(t_1 + \Delta t\)、\(t_2 + \Delta t\)。最后声音作为一种机械波,它天然地满足叠加性:同一时刻某位置的声音是当前时刻所有声音的直接相加。
有了上述假设后,考虑从\(A\) 点发出这样一个声音信号:
在\(B\) 点会接收到怎样的图形呢?因为声音满足上述假设的叠加性,那我们可以把在\(A\) 点的声音分成3个部分来看,首先是0时刻,它的幅度为1,在\(B\) 点分别经过\(t_1\) 和\(t_2\) 的时间后接收到幅度为0.9和0.4的两个信号。然后是在 \(\Delta t\) 时发出的幅度为1.2的信号,在\(B\) 点会分别在 \(t_1 + \Delta t\) 和 \(t_2 + \Delta t\) 时接收到幅度分别为1.08和0.48的信号,以此类推画出图像(假设 \(t_2 = t_1 + 2\Delta t\)):
最后再次根据声音的叠加性,把它们的幅度都加起来,得到在\(B\) 点总的响应:
把上述过程用数学语言描述出来,就可以定义出数字信号的卷积了。卷积能模拟出线性时不变系统(Linear Time Invariant System,LTI系统)对输入信号的输出响应,线性时不变系统满足线性性、时不变性和叠加性,分别对应前面对房间作出的假设:声音会等比例缩放、时延性和声音的叠加性。
17.4 卷积
对于两个序列\(x[N]\)和\(,它们的卷积\)y[M]$为:
\[ y[M] = \sum_{i = 0}^{N - 1} x[i] \cdot h[K - i] = \sum_{j = 0}^{K - 1} x[N - j] \cdot h[j] \tag{17.2}\]
\(x[i]\) ⋅ \(h[K - i]\)表示按元素乘法,其中\(x[i]\)是\(x[N]\)的第 $ 个元素,\(h[K - i]\)为有延迟序列, 式 17.2 可以记为:
\[ y = x * h \tag{17.3}\]
卷积满足以下性质:交换率、结合律和延迟性,其中延迟性也叫平移不变性:
\[ x[N - k_1] * h[K - k_2] = y[M - (k_1 + k_2)] \tag{17.4}\]
17.5 复数
复数问题可以追述到16世纪人们对于一元二次方程的探究,在解二次方程时,会遇到这样一类问题:根号下出现了负数。
例如解\(x^2\) + 1 = 0,则\(x = \sqrt{- 1}\)。这个方程在实数范围内是没有解的,为了填补这一空白,数学家们逐渐引入了复数的概念,并经由欧拉、高斯、柯西、黎曼等人发展建立了严格的复分析理论,至此复数成为了一个完备的数系,人们完成了对数系的“最后一次”拓展。虽然复数的产生和完善都是建立在数学上的,但它存在的“必要性”却由物理界给出,特别是在量子力学领域。
一般来说,一个复数\(z\)包含有实部和虚部:
\[ z = a + jb \tag{17.5}\]
其中虚部\(j\)满足:
\[ j^2 = -1 \tag{17.6}\]
在工程领域,\(j\) 也常被记作符号 \(i\)。\(z\) 的实部 \(a\) 记为 \(\text{Re}(z) = a\),虚部 \(b\) 记为 \(\text{Im}(z) = b\)。当\(a\) = 0时,复数\(z\)只有虚部,此时\(z\)被称为一个纯虚数。
令\(z_1\) = \(a_1\) + \(j b_1\) 、\(z_2\) = \(a_2\) + \(j b_2\) ,复数的加法为实部与实部相加,虚部与虚部相加:
\[ z_1 + z_2 = (a_1 + a_2) + j(b_1 + b_2) \tag{17.7}\]
乘法为:
\[ \begin{aligned} z_1 z_2 &= (a_1 + jb_1)(a_2 + jb_2) \\ &= a_1 a_2 + j a_1 b_2 + j b_1 a_2 + j^2 b_1 b_2 \\ &= (a_1 a_2 - b_1 b_2) + j(a_1 b_2 + b_1 a_2) \end{aligned} \tag{17.8}\]
我们可以把复数画在坐标轴上,其横轴(实轴)和纵轴(虚轴)分别表示实部和虚部,一个复数则是坐标轴下的一个点:
从上图还可以看出,除了用实部和虚部描述一个复数,我们还可以通过\(r\)和\(\theta\)(以弧度为单位)来唯一地确认一个复数,这种方式被称为复数的极坐标表示。其中\(r\)是点(\(a\), \(b\))与零点连线的距离,也被称为复数的长度或半径,\(\theta\)是连线与实轴的夹角,满足:
\[ \begin{aligned} r &= \sqrt{a^2 + b^2} \\ \theta &= \tan^{-1}\frac{b}{a} \end{aligned} \tag{17.9}\]
用\(r\)和\(\theta\)重写\(z\) = \(a\) + \(j b\):
\[ z = r\cos\theta + jr\sin\theta \tag{17.10}\]
欧拉在他的《无穷分析引论》里出现了这样一个公式:
\[ e^{j\theta} = \cos\theta + j\sin\theta \tag{17.11}\]
它被称为欧拉公式,当\(\theta\)取\(\pi\)的时有:
\[ e^{j\pi} + 1 = 0 \tag{17.12}\]
式 17.12 被称为世界上“最美公式”,因为它以极其简洁的形式把自然界里5个最基本的常数包含在了一起,特别是常数\(e\)、\(j\)和\(\pi\)分别来自于数学分析、复分析和几何学这3个完全不同的领域。
\[ z = r(\cos\theta + j\sin\theta) = r e^{j\theta} \tag{17.13}\]
上式就是复数的极坐标表示形式,极坐标下复数的乘法会有很直观的感受,令\(z_1\) = \(r_1\) \(e^{j\theta_1}\)、\(z_2\) = \(r_2\) \(e^{j\theta_2}\),则\(z_1\) \(z_2\) 为:
\[ z_1 z_2 = r_1 r_2 e^{j(\theta_1 + \theta_2)} \tag{17.14}\]
因此相乘后的位置等于\(z_1\) 的长度\(r_1\) 乘以\(z_2\) 的长度\(r_2\) 再逆时针旋转\(\theta_2\) 弧度。
同时根据 式 17.11,可以写出:
\[ \begin{aligned} \cos\theta &= \frac{e^{j\theta} + e^{-j\theta}}{2} \\ \sin\theta &= \frac{e^{j\theta} - e^{-j\theta}}{2j} \end{aligned} \tag{17.15}\]
17.6 复正弦曲线
考虑复数\(e^{j\theta t}\),其半径\(r\) = 1(\(e^{j\theta t}\) = 1cos \(\theta t\) + 1\(j\)sin \(\theta t\)),随着\(t\)的增大夹角\(\theta t\)也增大,直到\(\theta t\) = 2π时重新回到实轴上,把\(e^{j\theta t}\)的图像在坐标轴上画出来,形状如下:
它在实轴和虚轴的投影分别是\(\cos\theta t\)和\(\sin\theta t\),因此一个\(e^{j\theta t}\)分别能包含相同频率的正余弦振荡“模式”,并可以通过 式 17.15 计算出来。
对于 \(e^{-j\theta t}\) 则可以写成 \(e^{-j\theta t}\),随着 \(t\) 增大 \(e^{-j\theta t}\) 会沿着顺时针方向旋转,同样保持\(r\) = 1。
我们可以把 \(e^{j\theta t}\) 和 \(e^{-j\theta t}\) 分别表示在频率轴上,横轴代表复正弦曲线的角频率\(\omega\)(\(\omega = \frac{\theta}{2\pi}\)),纵轴代表复正弦曲线的半径\(r\)。例如对于信号 \(x(t) = 0.5 e^{j 2\pi f_1 t} + 1.5 e^{-j 2\pi f_2 t}\),它的两个复正弦分量画在频率轴上的图像如下:
17.7 广义复正弦曲线
广义复正弦曲线就是在复正弦曲线\(e^{j\theta t}\)的基础上加入初始相位和衰减因子:
\[ y(t) = A e^{st} \tag{17.16}\]
其中\(\mathcal{A} = A e^{j\phi}\),\(s\) = \(\delta\) + \(j\omega\)是一个复数,当 \(t = 0\) 时 \(y(t) = A e^{j\phi}\),画在坐标轴上具有初始相位 \(\phi\)。根据 \(\mathcal{A}\) 和 \(s\) 的定义,可以重写 式 17.16 为:
\[ y(t) = A e^{\delta t} e^{j(\omega t + \phi)} \tag{17.17}\]
\(e^{j(\omega t + \phi)}\)项是一个随着\(t\)增大而不断循环的单位圆,它不会改变\(y\)(\(t\))的半径\(r\),但是\(e^{\delta t}\)随着\(t\)的增大,会出现以下3种情况:
\[ \begin{aligned} \lim_{t \to \infty} |e^{\delta t}| &= 0, & \delta &< 0 \\ |e^{\delta t}| &= 1, & \delta &= 0 \\ \lim_{t \to \infty} |e^{\delta t}| &= \infty, & \delta &> 0 \end{aligned} \tag{17.18}\]
它们分别对应着稳定、临界稳定和不稳定,图形如下:
令采样频率为\(f_s\) ,则采样间隔\(T = \frac{1}{f_s}\),用\(f_s\) 对 式 17.16 进行采样,那第 \(n\) 个采样点的值为\(y(nT)\):
\[ y(nT) = A e^{snT} = A e^{j\phi} \left( e^{(\delta + j\omega)T} \right)^n \tag{17.19}\]
令 \(z = e^{(\delta + j\omega)T} = e^{sT}\),则 \(z^n = (e^{(\delta + j\omega)T})^n\),根据 式 17.18 和 式 17.19,可以发现当\(z\)在复平面的单位圆内时,\(y(nT)\)随着\(n\)变大最终会收敛到0,\(z\)在单位圆边界上时,\(y(nT)\)保持恒定,\(z\)在单位圆之外时,\(y(nT)\)最终会发散到无穷大:
\[ \begin{aligned} \lim_{n \to \infty} |z^n| &= 0, & |z| &< 1 \\ |z^n| &= 1, & |z| &= 1 \\ \lim_{n \to \infty} |z^n| &= \infty, & |z| &> 1 \end{aligned} \tag{17.20}\]
17.8 离散傅里叶变换
傅立叶变换的目的是把信号从时域变换到频率,方法就是把时域上连续信号\(f\)(\(t\))分别投影到不同频率的复正弦曲线上:
\[ \mathcal{F}(f(t)) = F(\omega) = \int_{-\infty}^{+\infty} f(t) e^{-j\omega t} \, \mathrm{d}t \tag{17.21}\]
离散傅立叶变换也是类似的,考虑一个长度为\(N\)的序列\(f\)(\(N\)),\(f\)(\(N\))可以看成是\(N\)维向量空间中的一个点,而在线性代数里面有这样一条基本定理:\(N\)维向量空间里面的任意一组基有且一定为\(N\)个。因此\(f\)(\(N\))一定能写成\(f(N) = \sum_{i = 0}^{N - 1} a_i S_i(N)\)这样的形式,其中\(\{S_1(N), S_2(N), \dots, S_{N-1}(N)\}\)为向量空间的任意一组基,\(a_i\) 为系数。
因此从线性空间的角度来说离散傅立叶变换也只是找到了一组特别的基而已,对于序列\(f\)(\(N\)),其离散傅立叶变换为:
\[ F(n) = \sum_{k = 0}^{N - 1} f(k) e^{-j\frac{2\pi}{N}nk}, \quad (n = 0, 1, \dots, N - 1) \tag{17.22}\]
\(e^{- j\frac{2\pi}{N}nk}\)是\(e^{-j\omega k}\)的\(\omega\)分别取{\(\frac{2\pi}{N},\frac{2\pi}{N}2,\frac{2\pi}{N}3,\ldots,\frac{2\pi}{N}(N - 1)\)},\(k\)再从0到\(N\) - 1则分别获得不同\(\omega\)下第0到\(N\) - 1个采样点:
17.9 FIR 滤波器
FIR的全称是Finite Impulse Response(有限脉冲响应),与其说是滤波器不如把它看成是某个线性系统,前面说过线性系统的脉冲响应可以完全表征这个系统,FIR系统的脉冲响应具有有限的长度,它的一般形式如下:
\(x[n]\)是输入信号\(x[N]\)的数据点,假设\(x[N]\)的采样频率为\(f_s\) ,\(z^{-1}\)则表示延迟一个采样周期\(T\),其中\(T = \frac{1}{f_s}\),\(a_0\) 到\(a_M\) 是信号增益大小,也叫“抽头”(tap)系数,tap原意是指水龙头或阀门,水龙头可以打开关闭并调节流量,\(a_0\) 同样可以实现采样信号的通过、阻塞、衰减或放大。最后经过不同延迟和放大的信号相加作为输出, 图 17.15 可以写成差分方程的形式:
\[ \begin{aligned} y[n] &= a_0 x[n] + a_1 x[n-1] + \dots + a_M x[n-M] \\ &= \sum_{i=0}^M a_i x[n-i] \end{aligned} \tag{17.23}\]
考虑一个脉冲信号输入,根据公式,\(y[0] = a_0 x[0] + a_1 x[-1] + \dots + a_M x[-M]\),对于在第一个样本点之前的样本,一般默认为 0,因此 \(y[0] = a_0 x[0] = a_0\);下一个采样周期时 \(x[1]\) 输入,\(y[1] = a_0 x[1] + a_1 x[1 - 1] + \dots + a_M x[1 - M] = a_1\);以此类推 \(y[2] = a_2\),\(y[3] = a_3\),…,\(y[M] = a_M\)。
因此FIR系统的脉冲响应就是其所有抽头系数的集合\(\{a_0, a_1, \dots, a_M\}\),因为\(M\)是有限大小的,其脉冲响应也是有限输出。
17.10 IIR 滤波器
IIR(Infinite Impulse Response)滤波器引入了反馈机制,这意味着它的输出不仅依赖于当前和过去的输入样本,还依赖于过去的输出样本,由于具有反馈环节,IIR滤波器与FIR滤波器在框图上会有很明显的差别:
通常来说音频滤波器都是IIR型的,因为相比FIR滤波器它能用更低阶数实现复杂滤波效果,所谓阶数可以理解成所需延迟单元的数量,更少的元件需求也意味着更高效地滤波。
一个通用的一阶IIR滤波器框图如下:
通过改变 \(a_0\) 和 \(a_1\) 的大小,它可以分别配置为低通滤波器和高通滤波器。假设目标截止频率为 \(f_c\),其中 \(0 < f_c < \frac{f_s}{2}\),令 \(\omega' = 2\pi\frac{f_c}{f_s}\),则低通滤波器下有:
\[ \begin{aligned} b_1 &= \frac{-\cos\omega'}{1 + \sin\omega'} \\ a_0 &= 0.5(1 + b_1) \\ a_1 &= a_0 \end{aligned} \tag{17.24}\]
保持 \(b_1\) 不变,配置为高通滤波器时,\(a_0\)、\(a_1\) 满足:
\[ \begin{aligned} a_0 &= 0.5(1 - b_1) \\ a_1 &= -a_0 \end{aligned} \tag{17.25}\]