【GAD翻译馆】抖动第一部分——简单量化
抖动第一部分——简单量化
bartwronski发表于2016年10月30日
翻译:赵菁菁(轩语轩缘,657459265) 审校:李笑达(DDBC4747)
前言
这个迷你系列的第一部分更注重抖动的理论方面——一些历史,并将其应用于一维信号和量化。我将尝试对量化误差进行一些频率分析,也会分析抖动是如何造成这些误差的。这主要是理论上的,所以如果你对更实际的应用感兴趣,一定要看看索引和其他部分。
你可以点击这里下载Mathematica(数学软件)笔记重现结果,点击这里获取pdf版本。
什么是抖动?
抖动可以被定义为故意或蓄意添加一些噪声信号,防止来自量化或采样不足的大规模、低分辨率的误差。
如果你曾经处理过:
- 音频信号
- 90年代的托盘化的图像文件格式
你一定遇到过下面的抖动选项:通过添加一些噪声和小分辨率内容“神奇地”改进音频文件或保存图像的质量。
然而,我在维基百科上发现了关于首先定义和使用抖动的惊人事实:
抖动最早的应用之一是在第二次世界大战中。飞机轰炸机使用机械计算机进行导航和弹道计算。奇怪的是,这些计算机(充满几百个齿轮和接榫的箱子)在飞机上飞行时更准确,而在地上时没那么准确。工程师们意识到飞机的振动减少了粘性运动机件的误差。飞行不是短时间的迅速移动,而是运动得更连续。把小型振动电机置于计算机内,它们的振动被称为抖动,这个词来自于中古英语动词“didderen”,意思是“颤抖”。今天,当你点击一个机械表来提高其准确性,你就是在利用抖动,现代字典把抖动定义为高度紧张、困惑、或不安的状态。在微小的数量内,乐观地讲,抖动成功地使一个数字化系统更加模拟。
— Ken Pohlmann,数字音频原理
这是一个鼓舞人心的、有趣的历史事实,正如我所理解的那样,它是通过随机地分割一些机械振动反馈回路来避免计算和共振中的偏差。
但是撇开历史不谈,让我们先来看看一维信号的抖动过程,比如音频。
恒定信号的抖动量化
我们将首先分析最乏味的信号——一个恒定的信号。如果你对音频和音频相关的DSP有一点了解,你可能会问——但是音频和音频的定义不能有一个常数项!(此外,音频软件和硬件都会故意删除,也就是所谓的DC偏移)。
这是真的,我们会马上看到更复杂的函数,但首先要考虑的是……
假设我们正在对规格化浮点信号进行1位量化。这意味着我们将处理最终的二进制值,0或1。
如果我们的信号是0.3,没有任何抖动的简单四舍五入是最无聊的函数——只是零!
误差也是常数,0.3,因此平均数也为0.3。这意味着,我们在信号中引入了相当大的偏差,完全失去了原始信号的信息。
我们可以试着抖动这个信号,看看结果。
这种情况下的抖动(使用舍入函数)只应用普通的随机白噪声(每个元素的随机值,产生均匀的噪声频谱),并在量化之前向信号中添加范围为(-0.5,0.5)的随机值。
quantizedDitheredSignal = Round[constantSignalValue RandomReal[] – 0.5] & /@ Range[sampleCount];
很难在这里看到任何东西,只是现在量化的结果是一些随机的一和零……(如所期望的)更多的0。它本身并不是一个非常有趣的信号,但是很有意思的是误差图和平均误差。
好的,我们可以看到,正如预期的那样,误差也是交替的……但是非常可怕的是误差有时变大(绝对值0.7)!所以我们误差最大值更糟糕,相当不幸……但是,平均噪音是:
Mean[ditheredSignalError] 0.013
远小于原始误差0.3。有了足够大的样本量,这个误差将趋于零(极限)。因此,常数项的误差要小得多,但是让我们看看所有误差的频率图。
红线/尖=不用抖动时误差的频谱(常量,频率不变)。黑色——带有白噪声抖动。
事情变得越来越有趣了!这展示了这篇文章的第一个主要内容——抖动在许多频率中分配量化误差/偏差。
我们看看下一节,抖动如何帮助我们。
频率灵敏度和低通滤波
到目前为止,我们观察了抖动一个量化的常量信号:
- 增大的最大误差
- 几乎为零的平均值,平均误差
- 在误差频谱中加入恒定白噪声(全光谱覆盖),降低低频误差。
它本身并没有帮助我们太多……然而,我们并不是在研究任意数学函数/信号的量化。我们现在看到的是人类会感知到的信号。人类的感知显然是有限的,一些例子:
- 我们的视力有限度。许多人近视,没有眼镜看到远处物体时只有模糊的影像。
- 我们认为中等规模的细节远远好于非常高或非常低的频率(平滑梯度的细小细节可能不会被注意到)。
- 我们的听力在特定的频率范围内有效(20Hz - 20kHz,随着年龄增长听力会减退),我们对于中间范围–2khz-5khz最敏感。
因此,任何频率接近感知频率上限范围中的误差都不太明显。
此外,我们的媒体设备越来越好,提供了大量的过采样。在电视和显示器中,我们“视网膜”式和4K显示(4K中不可能看到单个像素),在音频方面,我们采用至少44khz的采样文件格式,甚至为了那些往往不能重现超过5-10khz的廉价的扬声器也这么做。
这意味着,我们可以通过低通滤波来急死估算一个信号的感知外观。在这里,我做了一个低通滤波(左边用0填充->“斜坡”):
红色——所需的非量化信号。绿色——量化的、抖动的信号。蓝色——信号的低通滤波器。
信号开始看起来更接近原始的、非量化的函数!
不幸的是,我们开始看到一些非常明显的低频,而这些低频在原始信号中不存在。我们将在本系列的第三部分中使用蓝色噪声来修复它,但现在,它就是这么看起来像一个具有较少低频率内容的准噪声函数:
这是可能的,因为我们的准随机序列有如下频谱:
但现在是时候研究简单、恒定的函数了。让我们来看一个正弦波(如果你知道傅立叶定理——任何周期信号的一个组成部分!)。
量化正弦波
如果我们将一个正弦波用1比特量化进行量化,我们得到一个简单的矩形波。
矩形波是非常有趣的,因为它包括基频和奇次谐波。
这是一个有趣的属性,该属性大量使用在模拟减法合成器中,为了得到空心/黄铜色探测仪器。减法合成开始于一个复杂、谐波丰富的声音,通过去除一些频率进行过滤(带有随着时间变化的过滤参数),为的是以期望的方式塑造声音。
矩形波频谱:
但在这篇文章中,我们更感兴趣的是量化误差!让我们画出误差和误差的频谱:
在这种情况下,我们的情况要好得多——平均误差接近于零!不幸的是,我们仍然有许多不想要的低频,非常接近我们的基频(奇数乘上减小的幅度)。这就是所谓的混叠或抖动噪声——原始信号中没有出现的频率出现了,它们有相当大的幅值。
即使是低通滤波也不能帮助这个信号……因为误差的低频太多了:
低通滤波量化正弦图
低通滤波量化正弦误差图
让我们这怎么随着抖动变化。乍一看,情况没有改善:
但是,如果我们把它作为一个图像来显示,看起来会更好:
请注意,量化误差如何在不同频率之间分布:
这看起来很有前途!特别是考虑到我们现在可以尝试过滤:
这是稍微弯曲的正弦波,但看起来更接近于原始曲线,而不是非抖动的曲线,相移的非对称滤波器引入的有个例外(我不想在这里描述或介绍;通过应用对称滤波器,它很简单灵活):
红色——原始正弦。绿色——低通过滤的未抖动信号。蓝色——低通过滤的抖动信号
绘制这两个误差的函数证实了数值上误差小得多:
红色——低通过滤的非抖动信号的误差。蓝色——低通过滤的抖动信号误差。
最后,我们快速看看一个信号,它具有更好的抖动函数,主要包含高频率:
上图——白噪声函数。下图——一个包含更高频率的函数。
低通滤波版本抖动有更好的函数——如果我们不计算滤波器的相移,这是几乎完美的结果!
最后——所有三种误差谱比较:
红色——未抖动的量化误差谱。黑色——白噪声抖动量化误差谱。蓝色——高频率抖动噪声的误差频谱。
总结
这是第一部分的结尾。主要需要记得的是:
- 依赖于抖动函数,抖动在多个不同的频率中分配量化误差/偏差,而不是让它们集中在较低的频率区域。
- 人类对任何信号(声音、视觉)的感知在非常特定的频率范围内能力最强信号通常是过度采样的,因为在感知光谱的尾部,感知几乎是临界的。例如,普通音频采样率可以再现大多数成年人听不到的信号。这就利用了抖动,并试图将误差转移到这个频率范围内,因为之前一点,这种用法很吸引人。
- 不同的噪声函数产生不同的误差谱,可以用来知道哪种误差谱更理想。
在下一部分中,我们将看到各种抖动函数——我在这里使用的一个(黄金比例序列)和蓝色噪声。
【版权声明】
原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权;