资讯详情

第9章-信号处理

[TOC] 

我们经常在图形中:图像是你见过的第一个例子,但随着你对图形的不断探索,你会遇到更多的例子。 就其性质而言,。 表示连续函数最有用的方法之一是:只需将函数的值存储在许多不同的点上,并在需要时重建它们之间的值。

您现在已经熟悉使用二维像素网格来表示图像的想法——所以您已经看到了采样表示! 想象一下数码相机拍摄的图像: 数学上,相机会 R^2 → C 类型函数(包括 C 颜色集)转换为颜色样本的二维数组,或 Z^2 → C 类型的函数

采样表示的另一个例子是 2D 数字平板电脑,如平板电脑屏幕或艺术家使用的单独手写板。 在这种情况下,。 数字仪在多个时间点测量触摸笔的位置,从而产生一系列 2D 坐标,或 Z → R2 类型函数。 动作捕捉系统对附着在演员身上的特殊标记做同样的事情:)

在维度上,医用 CT 扫描仪用于对人体内部进行非侵入性检查,度作为体内位置的函数。 扫描仪的输出是密度值 3D 网格:它使身体的密度 (R3 → R) 转换为 3D 实数数组 (Z3 → R)

这些例子看起来不一样,但实际上都可以用同样的数学来处理。 在所有情况下,

从2D从图像的例子来看,像素似乎足够了。一旦相机离散图像,我们就不再需要考虑连续函数。 但是如果我们想让屏幕上的图像更大或更小,特别是通过非整数比例因子呢? 事实证明,执行此操作的最简单算法表现不佳,引入了称为。 算法很简单,但背后的推理和细节可能很微妙。

当然,在计算机中表示连续函数并非图形独特, **采样(sample)和重建(reconstruction)**也不是。 图形只是相关算法和数学的一个(绝不是第一个)用户,用于从数字音频到计算物理的应用。 自 1920 自20世纪90年代以来,通信领域已经知道了如何采样和重建的基本事实,完全符合我们的要求 1940 年代以它们的形式陈述(Shannon & Weaver,1964)

本章首先使用。 然后我们继续介绍它。 最后,我们进去了,它对这些算法行为提供了许多见解。

9.1数字音频:一维采样(Digital Audio: Sampling in 1D )

虽然采样表示已经在电信使用多年,但在过去十年中使用越来越多的数字记录音频后,1982 光盘是采样的第一个热消费应用。

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-z9Lb0AnK-1627435820922)(第9章.assets/image-20210728092354547.png)]

在录音中,麦克风将声音(以压力波的形式存在于空气中)转换为随时间变化的电压,相当于测量麦克风位置的压力变化。该电信号需要以某种方式存储,以便以后播放并发送到扬声器扬声器通过与电压同步移动隔膜将电压转换为压力波。 记录音频信号的数字方法(图 9.1)使用采样:模数转换器(A/D 转换器或 ADC)每秒测量数千次电压,在任何数量的媒体上生成可以轻松存储的整数流,如录音室计算机上的磁盘,或传输到另一个位置,如便携式音频播放器中的内存。数据以适当的速度读取并发送到数模转换器(D/A 转换器或 DAC)。 DAC 根据它接收到的数字产生电压,如果我们收集足够的样本来平稳地表示电压的变化,电信号就所有实际目的而言与输入相同。

事实证明,取得良好再现效果所需的每秒采样数取决于我们试图录制的声音的高音。 如果我们试图录制短笛或蟋蟀,使用再现弦乐贝司或底鼓的采样率会产生奇怪的结果; 但这些声音以更高的采样率再现得很好。 为避免这些,数字录音机对 ADC 的输入进行去除可能导致问题的高频

输出端出现了另一个问题。 DAC 当新样本进入时,产生的电压会发生变化,但在下一个样本之前保持不变,从而产生梯形图形。 像噪音一样,这些阶梯增加了高频和依赖信号的嗡嗡声。 消除这一点,数字音频播放器 DAC 滤波器输出平滑波形

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-saViqur0-1627435820924)(第9章.assets/image-20210728092415340.png)]

9.1.采样的伪影采样(Sampling Artifacts and Aliasing )

数字音频记录链可作为图形中采样和重建过程的具体模型。 同样的图像或图形中的其他采样信号也发生,

图 9.2 显示了伪影类型的具体示例,可能是由于采样频率过低造成的。 在这里,我们使用两种不同的采样频率来采样简单的正弦波:顶部的每个周期 10.8 每个样本的底部,每个周期的底部 1.2 个样本。 高速产生一组能很好地捕捉信号的样本,但低采样率产生的样本与低频正弦波样本无法区分——事实上,面对这组样本,低频正弦波似乎 更有可能解释。

一旦采样完成,就不可能知道两个信号中的哪一个(快正弦波或慢正弦波)是原始信号,所以在这两种情况下没有正确重建信号的方法。

每当采样和重建中的缺陷导致频率惊人的伪影时,就会出现混合。 在音频中,混合使用听起来奇怪的额外音调-10KHz 铃声,在以 8KHz 采样后,变成 6KHz 的音调。 莫尔条纹通常用于图像中的混合 ′ 样本网格与图像中的规则特征相互作用,如图 9.34 中间的百叶窗。

合成图像中的另一个锯齿形示例是只用黑白像素渲染的直线上熟悉的梯子(图 9.34)。 这是不同尺度产生伪影的小尺度特征尺度上产生伪影的例子(对于浅坡线,楼梯台阶很长)。

采样和重构的基本问题可以简单地根据太小或太大的特点来理解,但更难回答一些更好的问题:

1.什么样的采样率足以保证良好的效果?

2.什么样的滤波器适合采样和重构?

3.避免混合需要多大程度的平滑度?

这些问题的准确答案必须等到我们在第一位 9.5 节日完全熟悉理论,然后回答

9.2 卷积(Convolution )

在讨论采样和重建算法之前,我们将首先检查它们所基于的数学概念-卷积。 。 这也是本章后面分析这些算法的基础。

卷积是函数的一种操作:它需要两个函数并将其组合起来产生新的函数。 在本书中,卷积算子用星号表示:对函数 f 和 g 应用卷积的结果是 f * g。 我们说f与g卷积,f*g是f与g的卷积。

卷积可用于连续函数(任何实参数) x 定义的函数 f(x))或者离散序列(仅为整数参数) i 定义的函数 a[i])。 也可应用于定义在一维、二维或更高维域的函数(即具有一个、两个或多个参数的函数)。 ,然后继续讨论连续函数、二维函数和三维函数

为了方便定义,我们通常假设函数域永远存在。当然,在实践中,它们必须停留在某个地方,我们必须以特殊的方式处理端点

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-f9xzm0MB-1627435820925)(第9章.assets/image-20210728092431980.png)]

9.2.1 移动平均 (Moving Averages )

要获得卷积的基本图像,请考虑使用移动平均平滑一维函数的示例(图 9.3)。 为了在任何点获得平滑值,我们计算函数在每个方向的延伸距离 r 平均值在范围内。 距离 r,称为平滑操作的半径,是控制发生多少平滑的参数。

我们可以用数学方法来解释离散或连续函数的想法。 如果我们平滑一个连续 g(x),平均意味着在一个范围内 g 除以区间长度: h ( x ) = 1 2 r ∫ x − r x + r g ( x ) d t h(x) = \frac{1}{2r} \int_{x-r}^{x+r}g(x)dt h(x)=2r1​∫x−rx+r​g(x)dt ​ 另一方面,如果我们要平滑离散函数 a[i],平均意味着将一系列索引的 a 相加并除以值的数量: c [ i ] = 1 2 r + 1 ∑ j = i − r i + r a [ j ] c[i] = \frac{1}{2r+1} \sum_{j=i-r}^{i+r} a[j] c[i]=2r+11​j=i−r∑i+r​a[j] ​ (9.1)

​ 在每种情况下,选择归一化常数,以便如果我们平滑一个常数函数,结果将是相同的函数

​ 这种移动平均线的思想是卷积的本质; 唯一的区别是在卷积中移动平均是加权平均。

9.2.2离散卷积(Discrete Convolution )

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tMiAjIZN-1627435820927)(第9章.assets/image-20210728092455325.png)]

​ 我们将从卷积的最具体情况开始:将离散序列 a[i] 与另一个离散序列 b[i] 进行卷积。 结果是一个离散序列(a*b)[i]。 这个过程就像用移动平均值平滑 a 一样,但这次不是对距离 r 内的所有样本均等加权,而是使用第二个序列 b 为每个样本赋予权重(图 9.4)。 值 b[i − j] 给出了位置 j 处样本的权重,该位置距离我们正在评估卷积的索引 i 的距离为 i − j。 这里是(a * b)的定义,用公式表示: ( a ∗ b ) [ i ] = ∑ j a [ j ] b [ i − j ] (a*b)[i] = \sum_ja[j]b[i-j] (a∗b)[i]=j∑​a[j]b[i−j] ​ (9.2)

​ 通过省略 j 的边界,我们表明这个总和在所有整数上运行(即,从 -∞ 到 +∞)。以 图 9.4 为例说明了如何计算一个输出样本。b=1/16[ . . , 0, 1, 4, 6, 4, 1, 0, . . .]——即 b[0] = 6/16 ,a[±1] = 4/16 等。

​ 在图形中,这两个函数之一通常具有有限支持(如图 9.4 中的示例),这意味着它仅在参数值的有限区间内为非零值。 如果我们假设 b 具有有限支持,则存在某个半径 r 使得 b[k] = 0 每当 |k| > r。 在这种情况下,我们可以将上面的总和写为 ( a ∗ b ) [ i ] = ∑ j = i − r i + r a [ j ] b [ i − j ] (a*b)[i] = \sum_{j=i-r}^{i+r}a[j]b[i-j] (a∗b)[i]=j=i−r∑i+r​a[j]b[i−j] 我们可以在代码中表达定义为

function convolve(sequence a, filter b, int i)
    s = 0;
	r = b.radius;
	for j = i - r to i + r do
        s = s + a[j]b[i-j];
return s
卷积滤波器(Convolution Filters)

​ 卷积很重要,因为我们可以用它来执行过滤。 回顾我们的第一个过滤示例,即移动平均,我们现在可以将平滑操作重新解释为与特定序列的卷积。 当我们在某个有限范围的指数上计算平均值时,这与对范围内的所有点都进行相同加权并用零对其余点进行加权是相同的。 这种滤波器在非零区间内具有恒定值,称为盒式滤波器(因为如果绘制图形,它看起来像一个矩形——见图 9.5)。 对于半径为 r 的盒式滤波器,权重为 1/(2r + 1):

b [ k ] = { 1 2 r + 1 , -r <= k <= r, 0 , otherwise. b[k] = \begin{cases} \frac{1}{2r+1}, &\text{-r <= k <= r,}\\ 0, &\text{otherwise.}\\ \end{cases} b[k]={ 2r+11​,0,​-r <= k <= r,otherwise.​ ​ 如果你把这个滤波器代入方程(9.2),你会发现它可以推导到方程(9.1)中的移动平均

​ 在这个例子中,卷积滤波器通常被设计为它们的总和为 1。这样,它们就不会影响信号的整体电平。

: 对于过滤的简单示例,让信号为阶跃函数 a [ i ] = { 1 , i >= 0, 0 , i<0. a[i] = \begin{cases} 1, &\text{i >= 0,}\\ 0, &\text{i<0.}\\ \end{cases} a[i]={ 1,0,​i >= 0,i<0.​ ​ 并且过滤器是以零为中心的五点盒式过滤器, b [ k ] = 1 5 { 1 , -2 <= k <= 2, 0 , otherwise. b[k] = \frac{1}{5} \begin{cases} 1, &\text{-2 <= k <= 2,}\\ 0, &\text{otherwise.}\\ \end{cases} b[k]=51​{ 1,0,​-2 <= k <= 2,otherwise.​ ​ a 和 b 的卷积结果是什么? 在特定索引 i 处,如图 9.6 所示,结果是阶跃函数在 i − 2 到 i + 2 范围内的平均值。如果 i < −2,我们对所有零进行平均,结果为零。 如果 i ≥ 2,我们对所有 1 求平均,结果为 1。 中间有 i + 3 个,结果为 (i+3/5) 。输出是一个线性斜坡,在五个样本中从 0 到 1:1/5[。 . . , 0, 0, 1, 2, 3, 4, 5, 5, . . .]。

卷积的性质(Properties of Convolution)

​ 到目前为止,我们所写的方式,卷积似乎是一种非对称操作:a 是我们正在平滑的序列,b 提供权重。 但是卷积的一个很好的特性是它实际上没有任何区别,即:滤波器和信号是可以互换的。 要看到这一点,只需重新考虑公式 (9.2) 中的总和,索引从滤波器 b 的原点开始计数,而不是从 a 的原点开始计数。 也就是说,我们用 i - k 替换 j。 这种变量变化的结果是 ( a ∗ b ) [ i ] = ∑ k a [ i − k ] b [ i − ( i − k ) ] = ∑ k b [ k ] a [ i − k ] (a*b)[i] = \sum_k a[i-k]b[i-(i-k)] =\sum_kb[k]a[i-k] (a∗b)[i]=k∑​a[i−k]b[i−(i−k)]=k∑​b[k]a[i−k] 这与方程 (9.2) 完全相同,但 a 作为滤波器,b 作为信号。 所以对于任何序列 a 和 b,(a* b) = (b*a),我们说卷积可以做交换操作。

​ 更一般地说,。 与数字或函数的乘法或加法一样,参数的顺序和括号的位置都不会影响结果。 此外,卷积以与乘法相同的方式与加法相关。 ,并且它是分布于加法的。

​ 交换: (a * b)[i] = (b * a)[i]

​ 结合: (a*(b * c))[i] = ((a* b) * c)[i]

​ 分配:(a*(b+c))[i] = (a * b + a * c)[i]

​ 如果我们将卷积视为乘法,那么这些属性是非常自然的,并且它们非常易于了解,因为它们可以通过在我们实际计算卷积之前通过简化卷积来帮助我们节省工作。 例如,假设我们想要一个序列 a 并用三个过滤器 b1、b2 和 b3 对它进行卷积——也就是说,我们想要 ((a b1) * b2) b3。 如果序列很长而滤波器很短(即它们的半径很小),则首先将三个滤波器一起卷积(计算 b1 *b2 b3),最后将结果与信号卷积,计算速度要快得多 a * (b1 *b2 *b3),我们从结合性知道它给出了相同的结果。

​ 一个非常简单的滤波器用作离散卷积的标识:它是半径为零的离散滤波器,或序列 d[i] = 。 . . , 0, 0, 1, 0, 0, . . . (图 9.7)。 如果我们将 d 与信号 a 进行卷积,则总和中将只有一个非零项: ( a ∗ b ) [ i ] = ∑ j = i j = i a [ j ] b [ i − j ] = a [ i ] (a*b)[i] = \sum_{j=i}^{j=i} a[j]b[i-j] = a[i] (a∗b)[i]=j=i∑j=i​a[j]b[i−j]=a[i] ​ 很明显,将 a 与 d 进行卷积只会再次返回 a。 序列 d 被称为离散脉冲。 它有时在表达滤波器时很有用:例如,用滤波器 b 平滑信号 a 然后从原始信号中减去它的过程可以表示为与滤波器 d - b 的单个卷积:

​ c = a - a * b = a * d - a * b = a * (d - b)

9.2.3卷积作为移位滤波器的总和

​ 有第二种完全等效的方式来解释方程(9.2)。 一次查看一个 b 的样本会导致我们已经看到的加权平均解释。 但是如果我们省略 [i],我们可以将总和视为将整个序列相加。 需要一个符号来完成这项工作:如果 b 是一个序列,那么右移 j 个位置的相同序列称为 b→j(图 9.8):

​ b→j[i] = b[i - j]

然后,我们可以将方程(9.2)写成关于整个序列(a* b)而不是逐个元素的陈述: ( a ∗ b ) = ∑ j a [ j ] b − > j (a * b) = \sum_j a[j]b->j (a∗b)=j∑​a[j]b−>j ​ 从这个角度来看,卷积是 b 的移位副本的总和,由 a 的条目加权(图 9.9)。 由于可交换性,我们可以选择 a 或 b 作为过滤器; 如果我们选择 b,那么我们将为输入中的每个样本添加一个过滤器副本。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opDwbOX8-1627435820929)(第9章.assets/image-20210728092525279.png)]

(Convolution with Continuous Functions )

​ 虽然离散序列确实是我们在计算机程序中实际使用的,但这些采样序列应该代表连续函数,并且通常我们需要对连续函数进行数学推理以弄清楚要做什么。 因此,定义连续函数之间以及连续函数和离散函数之间的卷积很有用。

​ 两个连续函数的卷积是方程(9.2)的明显推广,用积分代替总和: ( f ∗ g ) ( x ) = ∫ − ∞ + ∞ f ( x ) g ( x − t ) d t (f*g)(x) = \int_{-\infty}^{+\infty}f(x)g(x-t)dt (f∗g)(x)=∫−∞+∞​f(x)g(x−t)dt ​ (9.3)

​ 解释此定义的一种方法是,在参数 x 处计算的 f 和 g 的卷积是两个函数的乘积曲线下的面积

​ 在我们移动 g 使得 g(0) 与 f(t) 对齐之后。 就像在离散情况下一样,卷积是一个移动平均值,滤波器提供平均值的权重(见图 9.10)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EwEVhCYy-1627435820930)(第9章.assets/image-20210728092540223.png)]

​ 像离散卷积一样,连续函数的卷积是可交换的和结合的,并且是分配的加法。 同样与离散情况一样,连续卷积可以被视为滤波器副本的总和,而不是加权平均值的计算。 除了在这种情况下,过滤器 g 有无限多个副本: ( f ∗ g ) = ∫ − ∞ + ∞ f ( t ) g → t d t (f * g) = \int_{-\infty}^{+\infty} f(t)g\rightarrow t dt (f∗g)=∫−∞+∞​f(t)g→tdt 例子(两个框函数的卷积)。令 f 为盒函数 $$ f(x) = \begin{cases}

  1. &\text{-1/2 <= x < 1/2,}\ 0 &\text{otherwise.}\ \end{cases} 那 么 什 么 是 f ∗ f 呢 ? 定 义 ( 公 式 9.3 ) 给 出 那么什么是 f * f 呢?定义(公式 9.3)给出 那么什么是f∗f呢?定义(公式9.3)给出 (f * f)(x) = \int_{-\infty}^{\infty} f(t)f(x-t)dt $$ 图 9.11 显示了这种积分的两种情况。 这两个框可能有零重叠,当 x ≤ -1 或 x ≥ 1 时会发生这种情况; 在这种情况下,结果为零。 当−1 < x < 1 时,重叠取决于两个框之间的间隔,

​ 这是|x|;结果是 1 − |x|。所以 ( f ∗ f ) ( x ) = { 1 − ∣ x ∣ . -1< x < 1, 0 otherwise. (f*f)(x) = \begin{cases} 1-|x|. &\text{-1< x < 1,}\\ 0 &\text{otherwise.}\\ \end{cases} (f∗f)(x)={ 1−∣x∣.0​-1< x < 1,otherwise.​ 此函数称为帐篷函数,是另一种常见的过滤器(请参阅第 9.3.1 节)

狄拉克三角函数(The Dirac Delta Function )

​ 在离散卷积中,我们看到离散脉冲 d 充当身份:d * a = a。 在连续情况下,还有一个恒等函数,称为狄拉克脉冲或狄拉克 delta 函数,表示为 δ(x)。

​ 直观上,delta 函数是一个非常窄、非常高的尖峰,其宽度无穷小,但面积仍然等于 1(图 9.12)。 delta 函数的关键定义属性是将其乘以一个函数会选择恰好为零的值: ∫ − ∞ ∞ δ ( x ) f ( x ) d x = f ( 0 ) \int_{-\infty}^{\infty} δ(x)f(x)dx = f(0) ∫−∞∞​δ(x)f(x)dx= 标签: 气压变送器显示仪

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台