我是来酱酱油的吧 关注:208贴子:30,491

【数字音频科普第1弹】从模拟信号到PCM编码

只看楼主收藏回复

*****【数字音频科普第1弹】Delta-Sigma ADC-从模拟信号到PCM编码 *****
我从今天起开始写数字音频科普系列,也当是自己整理一下知识(估计也没人会看)。数字音频这个题目太大了,也远超我自己的知识范围。所以本系列只涉及数字音频的采集、传输与还原,现在暂时准备先写以下三篇:
1. Delta-Sigma ADC – 从模拟信号到PCM编码 (本帖)
2. I2S, SoundWire – 数字音频总线接口
3. Delta-Sigma DAC, Class D Amp – 从PCM编码到模拟信号
我将会从硬件的角度去讲这些内容(从标题就能看出来),但不会涉及任何硬件实现细节以及任何硬件设计中的trick,只讲基本原理。
帖子中出现的专业术语/公式,我尽量附上简单的科普文章/视频。如果还有不清楚的地方,请参考:
S. Pavan, R. Schreier, G. Temes 《Understanding Delta-Sigma Data Converters》
A. Oppenheim, R. Schafer 《Discrete-Time Signal processing》
帖子中的专业名词我尽量同时写中文和英文,由于中文文献中各种翻译混乱,看不明白的以英文为准。
另外,最近看到知乎上有篇讲降噪技术的文章写的不错,发出来分享一下:
https://zhuanlan.zhihu.com/p/133252284
https://zhuanlan.zhihu.com/p/139483993
https://zhuanlan.zhihu.com/p/279801405


IP属地:美国1楼2021-12-14 06:58回复
    留白待用


    IP属地:美国2楼2021-12-14 06:59
    收起回复
      先说下LZ最近在干啥吧,我最近在一家做混合信号芯片的公司做数字设计。芯片设计行业里工程师们的分工非常细,一个芯片一般都会有十几甚至几十个小团队的参与,包括架构(Architecture),数字设计(Digital design),模拟设计(Analog design),验证(Design verification),原型验证(Validation),物理设计(Physical design),模拟版图(Analog Layout),可测性设计(DFT),后硅验证(Post-silicon),软件/固件(Software),CAD(Methodology)等等等。各种工城狮的关系如下(纯属杜撰):
      模拟设计眼中的自己:艺术家
      数字设计眼中的模拟设计:黑魔法师
      验证眼中的模拟设计:画bug的
      软件眼中的模拟设计:没有用的人
      数字设计眼中的自己:团队核心
      模拟设计眼中的数字设计:做没有艺术的杂活
      验证眼中的数字设计:写bug的
      软件眼中的数字设计:刀耕火种
      验证眼中的自己:流片成功与否之关键
      模拟设计眼中的验证:打杂的
      数字设计眼中的验证:找茬的
      软件眼中的验证:刀耕火种
      软件眼中的自己:先进生产力
      模拟设计眼中的软件:打杂的
      数字设计眼中的软件:没技术含量
      验证眼中的软件:没技术含量
      互联网公司程序猿眼中的我司软件:硬件工程师
      互联网公司程序猿眼中的我司所有人:穷B


      IP属地:美国3楼2021-12-14 07:00
      收起回复
        楼上说到的“混合信号”,顾名思义就是芯片里既有模拟信号也有数字信号,音频芯片就是典型的混合信号芯片。举个常见的手机音频Codec芯片的例子,常见的连接图如下所示(这破图画了我好久,呕心沥血的作品):

        图中的麦克风将声波信号转化成模拟电信号,这个模拟信号经过前置放大器输入delta-sigma调制器,得到oversampled PDM数字信号,然后经过数字抽取器把它转换成Nyquist采样率的PCM数字信号,最终接入PCM总线。这个信号转化的过程叫模数转换(Analog to Digital Conversion), 实现这个转换的模块叫做模数转换器(ADC),也就是这个帖子的主角。同理,反过来把PCM信号转换成模拟电信号的模块叫做数模转换器(DAC)。一般音频Codec还有很多其他模块比如DSP处理器、采样率变换器等等用于处理PCM信号。PCM信号可以直接送往DAC输出到扬声器/耳机, 也可以用音频总线发给应用处理器/DSP处理器,或者发给外置音频功放(Codec芯片受限于CMOS工艺和各种其他原因,电源电压不能给很大,内部的功放也就不能驱动太大的扬声器)。一般来说音频Codec里会同时有多条数据通路同时工作,比如你在用iphone视频时,外部的声音会通过多个麦克风输入音频Codec,经过处理后经音频总线发送至应用处理器;同时应用处理器会把对方的声音通过音频总线发到音频Codec,最后从扬声器放出来。相信我,iphone 13里的音频Codec远比我上面画的复杂,而且不止有音频输入还有其他传感器的输入。
        本层中有很多名词缩写,有的后面会讲到,有的跟本帖无关,所以我就不一一解释了,大家看个大概就好。下面就要开始我们的主题了(下次再更)。


        IP属地:美国4楼2021-12-14 07:02
        回复
          废话不多说,开始我们的主题。先说明几个基本问题。
          1. 什么是模拟信号?什么是数字信号?为什么要模数转换?
          模拟信号(Analog Signal)是一个随时间连续变化的信号,数字信号(Digital Signal)则是在离散时间上可以由有限长度的二进制数表示的信号。数字信号可以由模拟信号周期采样、量化得到(也就是ADC干的事),写得稍微数学一点的话:

          真实世界的信号都是模拟的,想要对它做数字信号处理的话首先就得把它转换成数字信号。那我们为什么不直接处理模拟信号呢?其实是可以的,但用于处理模拟信号的模拟电路远比数字电路要难设计,设计数字电路时只要考虑0和1(指功能设计,实际上还有很多其他考量),而模拟电路里则充满着电压、电流、阻抗、跨导、非线性、温度变化、电源变化、工艺变化、电磁干扰。即使非常困难,模拟信号处理也曾经广泛应用于现在数字信号主导的领域,甚至模拟计算机(其实应该叫计算器,并非图灵完备)在数字计算机发明数十年后依然有大量应用。时至今日还有人在用模拟计算做机器学习,比如有家叫Mythic的startup就在做这方面的芯片。有人说数字信号能取代模拟信号是因为它更抗干扰、更易于储存,但这其实是个“为什么炮弹都命中弹坑”式的说法,我们往往是在拿今天的技术和几十年前的技术比较才得出那样的结论。然而现在IMAX影院用的模拟胶片放映效果依然要比你的数字蓝光光碟好,模拟调制的FM广播也比当年的数字GSM电话清晰。从通信的角度来说,用数字信号代替模拟信号传输,实际上是用带宽换取可靠性,但在同一个信道上频谱带宽和信噪比都是一定的,香农极限也是一定的,数字与模拟并没有高下之分。
          真正让数字信号逐渐取代模拟信号的原因其实是:数字芯片的制造和设计都变得越来越便宜了。具体来说就是CMOS半导体工艺和电子设计自动化(EDA)软件过去几十年的飞速发展推动了数字化进程。顺便说下,我说的数字化进程是指数字信号取代模拟信号的进程,很多新闻报道里提到的“数字化”其实是指“互联网化”,不过没关系,这两种“数字化”都受到了数字芯片红利的推动。
          举个例子来说,我相信给全球所有顶尖模拟芯片设计师们足够长的时间(少则几年多则几十年),让他们用模拟电路实现Airpods pro上的空间音频应该也是可以的(虽然我自己是完全想象不出来),连ADC、DAC都省了,但设计过程肯定比数字设计艰难得多,而且大概率最后芯片面积会比现在更大(制造成本更高)、功耗更高。真实的Airpods pro上是把耳机上传感器的模拟信号转换成数字信号,把蓝牙收到的数字音频信号还原出来(也要用到ADC),最后通过数字电路计算得到新的数字音频信号再转换成模拟信号输出,从而实现空间音频的。


          IP属地:美国5楼2021-12-16 12:17
          回复
            2. 为什么是Delta-SigmaADC?有别的ADC吗?
            ADC有很多种,本帖只介绍音频用到的Delta-SigmaADC。不同种类的ADC会应用在不同的场景里,如下图所示。其实除了下图中的三种还有好几种别的ADC结构,不过Delta-Sigma、SAR、Pipeline是现今普通电子产品中最常见的三种。

            有兴趣的同学可以去看看ADI的一篇介绍(也是上图的出处):https://www.analog.com/en/analog-dialogue/articles/the-right-adc-architecture.html
            简而言之,选择ADC结构时最重要的两个指标就是精度(有效位宽)和速度(采样率)。同学们用脚趾头都能想到ADC速度越快,所能达到的最高精度就越低。而音频信号采样率很低,常用的就48kHz(后面讲奈奎斯特采样定理的时候会告诉大家为什么),Delta-SigmaADC用于音频自然就是最合适的。音频常用的数据位宽是24位,这么高的有效位宽基本只有Delta-SigmaADC能够达到。
            但如果用SARADC或者性能指标很差的Delta-SigmaADC来转换音频信号,其实很多场景并不影响使用,毕竟很多时候人们对音频的要求只是“听个响”。这种情况下虽然ADC可以输出24位的数字信号,但其有效位宽可能远低于24位。就像你用1000万像素的小摄像头晚上拍照,照片很糊有效像素可能就100万,但对于青光眼患者来说小摄像头和单反拍出的照片没有什么区别。音频ADC尴尬的地方也在于此,相比于射频ADC速度不够快直接导致收不到无线信号、仪器ADC精度不够高直接导致测量准确性下降,广大的音频市场中普遍对高端音频ADC/DAC没有刚需,而有刚需的市场都及其小众(比如录音棚设备)。所以要说服消费电子巨头们购买高端音频芯片,必须给音频芯片赋予除AD/DA之外足够吸引人的功能,甚至提供定制化服务。
            Delta Sigma ADC的名字取自Δ-Σ调制(Delta-SigmaModulation)中的两个基本操作:减法(Delta)和求和(Sigma)。限制ADC精度的最大因素就是信号噪声(noise),噪声无处不在:电源噪声、电磁干扰、时钟抖动、量化噪声、电阻热噪声。DeltaSigma调制的作用就是要把低频模拟信号转换成一个高频、高采样率的数字信号(此过程称为oversampling),从而改变噪声频谱分布(此操作称为noise-shaping)。然后再由数字抽取器把低频数字信号还原出来。前面提到了ADC实际做了两件事:采样和量化,这其中采样操作是线性的,量化操作是非线性的,但由于DeltaSigma ADC的输出位宽很大,量化造成的非线性几乎可以忽略不记。所以DeltaSigma ADC可以近似看作一个线性系统并忽略量化操作,后面我将会从系统的角度(而非电路角度,实际电路很复杂)来分析DeltaSigma ADC的工作原理。
            3. 既然是线性系统,是不是要分析传递函数?先科普下拉普拉斯变换呗?
            对的,我们要分析传递函数,但不是用拉普拉斯变换(Laplacetransform)构造,而是用Z变换(Ztransform)。学EE的小朋友大二时应该就在信号与系统课里学过Z变换了,其他理工科的可能对拉普拉斯变换更熟悉,不过没关系,因为Z变换就是离散系统中的拉普拉斯变换。接下来我就先从铺垫知识 Z变换讲起。(下次再更)


            IP属地:美国6楼2021-12-16 12:19
            收起回复
              我放了个小学生都能看懂的Z变换YT视频链接,被系统删了,大家自行去YT搜吧
              小学毕业了的同学们先来看连续信号(模拟信号)和离散信号(未量化的数字信号)
              的傅里叶展开:

              本帖用j作为复数虚部符号(数学文献里一般用i),Xc(ω)、Xd(ω)称为信号频谱,ω称为角频率。从上式可以看出连续信号的展开要对其从负无穷到正无穷频率的频谱分量进行积分,而离散信号只对其-π到π的频谱分量积分,这是因为离散信号的频谱是以2π为周期的:

              我们可以发现:Xd(ω) = Xd( ω+2π m),其中m是整数。上式即为离散时间傅里叶变换(DTFT),熟悉傅里叶变换的同学应该一眼就明白怎么回事了,不明白的可以去参考这篇讲DTFT的引入的文章(虽然也很不严谨,好像国内DSP教材都这么讲的):https://zhuanlan.zhihu.com/p/48457158
              由于离散信号频谱的周期性,我们只需考虑-π到π,另外如果xd[n]是实数(本帖的音频信号是实数序列)则Xd(ω)是对称的,所以后面我们只分析0到π的频谱就可以了。如果xd[n]是由连续信号采样得到的,则x[n]频谱中的频率与连续信号的频率有以下对应关系:

              也就是说Xd(ω)所允许的最高频率π对应fs/2。那如果对一个频率高于fs/2采样得到的离散序列会是什么样的呢?请看下图:

              图中蓝线是1300Hz的正弦信号,红线是300Hz的正弦信号,黑色圆圈是以1000Hz采样率采样得到的信号。我们可以看出,在1000Hz采样率下,蓝线和红线采得的信号是一样的。在离散信号中我们并不能分辨频率为f和f+fs的模拟信号。所以对于一定的采样率fs,我们规定被采样的模拟信号频谱超过fs/2的部分必须为零,这就是奈奎斯特采样定理(Nyquist Sampling Theorem)的由来,我们把fs/2叫做奈奎斯特频率(实际上我们也可以采样fs/2到3fs/2,或者更高频段的模拟信号,这里就不展开了)。有了这个规定,我们就可以只把离散信号的频谱分量对应到模拟信号的-fs/2到fs/2,于是上图中红线1300Hz的信号采样后就变成了300Hz信号,它“污染”了原本正常的低频信息,这就叫做频谱混叠(aliasing/folding)。至于1300Hz为什么减1000变成300Hz,那是因为采样这个操作在频域相当于把模拟信号频谱和一系列间隔为fs的冲激函数(或者叫Dirac Comb)卷积,后面我们讲到数字抽取器的时候会再具体分析一下频谱混叠。还有同学会问,那700Hz的信号经过1000Hz采样后难道就变成了-200Hz吗?是的,-200Hz的正弦波相当于200Hz的正弦波相位平移π,这就是实数信号负频率的意义(不过本帖即不讨论相位,也不用负频率,所以就不展开了)。
              好了,现在我们可以回答为什么最常用的音频采样率是48kHz了,因为人耳最高只能听到20kHz的声音,用更高的采样率只能增加超声波信息。虽然那些大于24kHz的超声波不存在于48kHz采样率的数字音频里,但不代表ADC不能收到它们,超声波会因为频谱混叠以噪声的形式“污染”0-24kHz的数字信号,所以很多场景里信号输入ADC前先要低通滤波清除高频信号。不过这个步骤对音频ADC倒是不必要的,因为音频Delta-Sigma ADC内部采样率往往高达6MHz,市面上应该没有频带那么宽的麦克风,超声波传感器也不行。至于6MHz数字信号里高频分量的滤除就交给后端的数字抽取器完成了。这种内部采样率高于输出采样率的ADC被称为oversampled ADC,而实际采样频率和输出采样率相同的ADC被称为Nyquist-rate ADC。
              学过固体物理的同学看到前面的时候应该已经发现,我们只能采样fs/2内的模拟信号,其实和声子只存在于第一布里渊区里是一个道理。这里我们的第一布里渊区就是-π<ω< π,各个采样点→布拉维点阵,采样率→晶格倒格矢,信号频率→声子波矢。是不是so easy。


              IP属地:美国8楼2021-12-18 08:25
              收起回复
                现在我们用复数z来替代DTFT里的e^(jω),即可得到Z变换(ZTransform):

                我们用框图来表示离散线性时不变(LTI)系统,并定义了系统传递函数和频率响应:

                X(e^(j ω))、Y(e^(jω))其实就是x[n]、y[n]的DTFT,为了方便和Z变换对应,以及于连续信号傅里叶变换区分开,我们以后就把x[n]的DTFT写作X(e^(jω))来代替X(ω)。从上面的定义我们可以看出,系统频率响应对应了z平面里的单位圆:

                对连续信号系统熟悉的同学应该知道系统频率响应对应了s平面的虚轴,这是因为拉普拉斯变换(LaplaceTransform)是把傅里叶变换(FourierTransform)里的jω换成了s。而Z变换是把DTFT里的e^(jω)换成了z,虚轴就变成了单位圆。我不止一次听做模电的同学说过不喜欢离散系统是因为不知道怎么分析用z变换定义的系统传递函数,甚至有的电路讲义用连续系统那套东西强行分析离散系统(当然定性分析一般是没啥问题,定量就做不到了)。但很多搞模电的人不知道的是,其实离散系统的传递函数分析起来可以说和连续系统几乎没有区别,大多东西都是一样的:离散系统和连续系统的频率响应都是系统冲激响应的傅里叶变换;我们可以通过在z平面/s平面分析零极点相对于单位圆/虚轴的位置来判断和调整频率响应;连续系统中右半平面极点会导致系统不稳定,离散系统中单位圆之外的极点会导致系统不稳定(一般我们默认连续系统是因果的,ADC也是因果的,但数字系统中有可能存在非因果LTI系统,比如在图像处理还有音视频的后期处理中。非因果系统里任何位置的极点都可能导致不稳定,具体可以参考一楼Oppenheim那本书关于Z变换收敛域和系统稳定性的讨论)。
                现在给大家介绍下后面会用到的系统框图单元吧,同学们可以用时域递推公式自己去算一下传递函数,都是小学算数的难度。
                加(减)法器:

                延迟(Delay):

                累加器(Accumulator),也有人叫它积分器(Integrator):


                IP属地:美国9楼2021-12-20 12:53
                回复
                  前面说过Delta-Sigma ADC是先由Delta-Sigma调制器(Modulator)把模拟信号转换成高采样率的PDM数字信号,再由数字抽取器(Decimator)把PDM信号转换成低采样率的PCM信号。我们就先从Delta-Sigma调制器说起,下面这个非常简单的离散线性系统就是一个SigmaDelta调制器:

                  图中有:可以看作被采样的模拟信号x[n],输入信号延迟后的x’[n]=x[n-1],输出信号也就是数字信号y[n],还有累加器输出端加入的输入噪声e[n]。如果输入噪声e[n]=0,直接从时域递推公式就能得出y[n]=x’[n]=x[n-1]。若e[n]不为零则有

                  注意到(1-z^(-1))是个零点在1的一阶低通系统,也就是说e[n]的频率越小对y[n]的影响也就越小。噪声的频率是我们没法控制的,大多数噪声都是白噪声,即在频谱上均匀分布。不过同学们应该还记得前面说过,Delta-SigmaADC是要oversample的,其内部的采样率是我们可以控制的(ADC输出采样率是designspec决定的)。那么如果我们的内部采样率fs越高,对于同样的模拟频率fc,其对应的离散系统里的角频率ω=2πfc/fs也就越小,该频率的y[n]分量受e[n]的影响也就越小。有多小呢?假设我们的音频ADC输出采样率为48kHz,oversamplingratio(OSR)为128,则内部采样率是48k*128=6.144MHz。若x[n]为0,此时对于24kHz的e[n]输入噪声,输出有:

                  好家伙,输出信号y[n]的振幅只有输入噪声e[n]的2.5%,这就是反馈回路对低频噪声的抑制效果。如果我们把零输入时Y(e^(jω))/E(e^(j ω)的频率响应幅度画出来:

                  可以看到频率越低,输出受e[n]噪声的影响就越小。如果我们的系统里没有负反馈,那么上面这个图将会是一条水平的直线(一直是1)。这种通过负反馈改变输出噪声频谱分布的操作称为noiseshaping。
                  好了,我们知道了在内部采样率很高的情况下能极大抑制e[n]噪声。既然能抑制那个地方输入的噪声,我们就要把噪声最大的东西加上去。什么噪声最大?量化噪声。只要有内部采样就有量化噪声,如果内部使用SARADC采样最大也就能输出12bit的数字信号,即使把它看作是理想的(没有电阻电容不匹配和其他噪声情况下),其产生的量化噪声也是音频ADC最小“刻度”的2^12倍(音频ADC输出位宽是24bit)。但是SARADC速度一般、面积大,在有noiseshaping的加持下用它换取那么点精度得不偿失。我们不如直接在e[n]输入那里加上一个1-bitADC,误差最大、结构最简单、速度最快(当然其实我们不需要那么快)。
                  我们接下来就把1-bitADC加进系统框图里,注意到我们是在累加器输出加的ADC,而累加器的输入还是模拟信号,所以我们还需要一个1-bitDAC把反馈回去的数字输出转换成模拟信号。大家不用管1-bitADC、DAC具体是什么(它们也有很多不同的电路实现方法),只要知道他们的输入输出关系如下:

                  这里我们假设输入的x[n]是音频 linein信号,其满量程(电压)为1Vrms,即-1.414V~1.414V。我们现在把本层最开始的系统框图里的两个z^(-1)扔进累加器的框框里(为了美观),然后加上1-bitADC 和1-bitDAC就得到了一个最简单的一阶Delta-Sigma调制器:


                  IP属地:美国10楼2021-12-20 13:15
                  收起回复
                    楼上一阶Delta-Sigma调制器的y[n]数字输出从系统框图上来看就是x[n]加上被noise-shaping过的1-bitADC噪声。那它具体是什么样子呢?如果输入是个正弦波,那么如下图所示:

                    图中绿线高电平代表‘1’,低电平代表‘0’。我们可以看出,当x[n]大的时候1多0少,当x[n]小的时候0多1少,当x[n]在中间的时候1和0数量差不多。如果取同一小段时间的平均值(相当于滤除高频信号),会发现x[n]和y[n]的平均值差不多。像y[n]这样的数字信号,我们称之为脉冲密度调制(PDM)信号,PDM信号的采样率是高于Nyquist Rate的,所以其必然携带了多余的高频信息。下图是这个“正弦波”PDM信号的频谱幅度:

                    可以看出它低频有个很窄的峰,对应了正弦波。高频则明显能看到noise-shaping后的e[n]噪声。与PDM信号相对应,Delta-SigmaADC最终输出的24bit信号叫做脉冲编码调制(PCM)信号,它的采样率即为NyquistRate。以楼上举过的例子来说,如果PCM采样率为48kHz,OVR=128,PDM信号(即y[n])采样率为6.144MHz,那么PCM信号的每个24-bit二进制数实际对应了128个y[n]。
                    细心的小朋友看到楼上说24k噪声幅度被抑制到2.5%的时候,应该就已经察觉到这个一阶Delta-Sigma调制器的噪声大爆了,根本不能拿来做24-bit音频ADC。我们可以来算一下y[n]上的噪声功率。e[n]是幅度-0.5到0.5上均匀分布的白噪声(功率谱也是均匀分布),其功率谱密度为1/12π。由于最终48k音频信号里最高频率只到24k(角频率π/128),我们可以得到y[n]带内(in-band)功率密度:

                    我们容易证明,振幅0.5的正弦波(即y[n]满量程信号)的功率为1/8,以及24有效位的ADC需要信噪比(SNR)大于146dB。也就是说要求噪声功率小于3e-16。我们上面说的一阶Delta-Sigma调制器的带内噪声和目标还差了10个数量级。怎么办呢?我们还可以上二阶:

                    上图所示的二阶Delta-Sigma调制器的传递方程是这样的:

                    好家伙,Y(z)与E(z)的比值直接加了个平方。原来的那个2.5%直接变2.5%^2=0.625‰,不过离我们那差10个数量级的目标似乎还是远了点。那我们如果阶数一直往上加,岂不是就能实现任意小的噪声?那当然没有这种好事。这种结构一般最多3、4阶就到头了,再往上就有稳定性问题了,调制器直接变振荡器。音频ADC里用的Delta-Sigma调制器一般都是多级(multi-stage)多位(multi-bit)输出的,比如下面这个MASH(Multi-stAgenoise-SHaping)调制器:

                    (图片出处:S.Pavan, R. Schreier, G. Temes 《UnderstandingDelta-Sigma Data Converters》)
                    这个我就不分析了,有兴趣的同学可以去看图片出处的那本书。上面这个图是2级的,但不一定是multi-bit的。如果用multi-bit输出就需要有multi-bitADC和multi-bitDAC,这其中multi-bitDAC的线性度对Delta-sigma调制器的性能影响尤其大(1-bitDAC是绝对线性的,就没有这个问题),实际设计中会有各种技巧来提高DAC的线性度。


                    IP属地:美国11楼2021-12-22 14:08
                    收起回复
                      厉害哟


                      IP属地:四川来自Android客户端12楼2021-12-24 09:30
                      回复
                        我们已经了解PDM信号是怎么产生的了,下面我们就来介绍PDM信号是怎么被数字抽取器(Decimator)转换成PCM信号的。数字抽取器是纯数字电路,而Delta-Sigma调制器以模拟电路为主,狭义上的ADC到PDM信号输出就结束了,从系统角度看Delta-Sigma调制器和数字抽取器都是差不多的框框,但实际从电路角度来说这俩可就是完全不同的领域。即使是在同一片芯片上,数字、模拟用的电源线、地线都是不同的,两边的信号不可以随意连接(需要加levelshifter、synchronizer),两者的设计方法和工作方式更是天差地别。模拟电路有可能冬天用的好好的,夏天就振荡了,因为温度一高极点飘到单位圆外面去了。数字电路就不会有这种问题,对于相同的数据输入不管温度、电源、工艺角怎么变,数字电路只要能工作每一次得到的输出都是一样的。所以很多在设计Delta-Sigma调制器时看来群魔乱舞的操作,在数字抽取器设计中都是很容易实现的。不过用数字电路实现各种复杂操作并不牛B,能够同时兼顾性能、面积和功耗辣才是真的牛B。还有要注意的是,我们上面用的系统框图和实际的模拟电路并不是一一对应的关系,比如系统框图里的乘法关系在电路里可能就是两个串联的电阻实现的、可能是开关电容实现的、也可能是电流镜实现的,如果你问“乘法器”在哪里?不好意思,没有这个概念。但数字电路模块是可以和系统框图里的单元一一对应的,系统框图里的乘法三角形就对应了数字乘法器、加法圈圈对应了数字加法器、z^-1框框对应了寄存器。所以对于数字电路来说,系统框图越复杂,实际电路也就越复杂。
                        有同学会问,既然PDM已经是数字信号了,为什么还要再转换成PCM,直接用PDM信号不好吗?这个其实可以有,一些对延迟要求比较高的信号处理工作就会直接用PDM信号。而且Delta-SigmaDAC也是先用插值器(Interpolator)和数字Delta-Sigma调制器把PCM信号变成PDM信号再转换成模拟信号的。直接处理PDM信号的话,就可以从ADC拿到输入PDM信号,经过数字电路处理再把输出的PDM信号直接给DAC,这样就省下了抽取器和插值器的延迟(加起来一般不会超过1ms)。不过这样的话算法设计者只能从频域角度来处理信号,因为PDM时域信号是没有意义的。更重要的是,处理PDM信号会比处理PCM信号功耗更大。虽然PDM位宽更低,但频率更高;其位宽最小是PCM的1/24,而在我们之前的例子里PDM频率是PCM的128倍,总体上电路会因此消耗更大能量。或者用玄学/信息论一点的话来说:PDM信号不仅包含了PCM信号里的所有信息,还包含了高频噪声,对PDM信号操作的话必然会把一部分能量浪费在操作高频噪声上。所以对于延迟要求不高的应用还是需要把PDM信号转换成PCM信号再处理。
                        现在我们来分析一下降采样。抽取器实际上是对数字信号的再次采样,由于输入输出都是数字信号,分析频谱的话要比模拟信号的采样更好讲(因为不用FT和DTFT来回切),所以前面我就没有讲模拟信号采样。但他俩的基本原理都差不多,关于模拟信号采样的分析详细请看1楼Oppenheim的书。我们这里就用一个例子演示一下数字降采样,我们先来看卷积的定义:

                        和连续信号一样,时域卷积对应频域乘法,频域卷积对应时域乘法:

                        假设我们有一信号x[n]被降到一半的采样率,即每两个值抽一个(decimateby 2),用↓2表示。得到新信号x2[n]:

                        我们可以写出两个时域信号的关系为x2[n]=x[2n],n为整数。那么它们的频谱有什么关系呢?为了说明这个问题,我们再构造一个与x[n]采样率相同的信号x1[n],x1[n]=x[n]h[n],h[n]为[..,0,1,0,1..]即0,1交替的无限序列。我们先直接把它们的时域、频域关系画出来(x[n]的频谱是随便画的,同学们只要看X、X1、X2之间的关系就好):

                        h[n]的频谱幅度图上的箭头表示冲激函数,冲激函数的定义我就不讲了,大家只要知道频谱上每个冲激函数都对应了一个时域上的正弦/余弦函数。其实图中在-π处也有一个冲激函数,但H(e^(jω))在每个2π区间内只有两个冲激函数,为了防止误解(看频域卷积定义),就只画了两个。所以h[n]包含了两个正/余弦函数吗?是的:

                        我们上面说过时域上的乘法对应频域上的卷积,X(e^(jω))与位于0和π的两个冲激函数的卷积相当于把X(e^(jω))以0和π为中心分别复制一遍。由于离散信号频谱是以2π为周期的,且X(e^(jω))的最高频率大于π/2,这一复制就会导致X1(e^(jω))中的频谱混叠。我们再来看X2(e^(jω))是什么:

                        如上所示,X2(e^(jω))其实就是对X1(e^(jω))进行了横向拉伸,X2中π/2的位置对应到了X1中的π。所以频谱混叠在X2(e^(jω))中依旧存在。


                        IP属地:美国13楼2021-12-25 06:37
                        回复
                          频谱混叠的本质是高采样率信号里高频分量的频率超出了低采样率信号所允许的最高频率,故而原信号高频分量会出现在将采样后信号的低频分量中。如果逢R抽1(decimateby R)则降采样后的π频率对应原信号的π/R,所以降采样之前要先把ω>π/R的频谱分量滤除(也就是低通滤波Low-passFiltering)之后再抽取信号:

                          这里我们用了一个理想低通滤波器H(z),既然说是理想的那也就是现实中不存在的。不过我们还是先来尝试构造一下理想低通滤波器,我们先来看H(z)的冲激响应h[n]:

                          h[n]这个函数有个名字叫sinc函数,对海绵宝...哦不,信号处理有涉猎的同学肯定不会陌生,sinc函数长什么样呢?请看下面这只派大星:

                          首先sinc函数从0到负无穷都有值,这意味着H(z)是非因果的,这已经不是人类能设计的实时滤波器了,只有能预知未来的生物可以做出来。不过好在sinc函数衰减很快,我们可以取有限长度再向右平移得到一个可以用有限冲激响应(FIR)滤波器实现的h’[n]。
                          假设我们用长度为1000的h’[n]来滤波,只要让x[n]和有限长度的h’[n]卷积就行了,因为时域卷积对应频域相乘。我们继续之前48kHzPCM/6.144MHz PDM/OVR=128的例子,要满足R=128的降采样,我们的FIR滤波器和h’[n]是这样的:

                          好家伙,看看这滤波器,1000个加法器、1000个乘法器、1000个寄存器还要存500个高精度系数(对称),所有单元每1/6.144MHz更新一次输入输出。这玩意儿要是造出来面积有多大、功耗有多猛我都不敢想象。但是它滤波性能怎么样呢?我们来看看H’(z)的频率响应幅度(因为通带π/128就截止了,我们只看低频的一小部分,横轴是连续频率f=fs*ω/2π)

                          要评价的话简单来说就是非常垃圾,它的通带波动超过1dB了,而高性能抽取器通带波动指标都在+/-0.1dB左右。更要命的是它本该24kHz的地方就截止了,但这个滤波器70kHz的衰减才-40dB左右(至少要到-80dB才能算勉强合格),这样必然有大量高频噪声混叠进0-24kHz频段。恐怕市面上那些“听个响”的音频芯片里的抽取器都比这个强,但那些芯片里抽取器的面积估计就只有这个的1%左右。


                          IP属地:美国14楼2021-12-25 06:47
                          回复
                            所以我们肯定不能只用sinc冲激响应的FIR来滤波,真实的数字抽取器往往都是有很多低通滤波器级联构成的,而且是一边滤波一边抽样,这样就降低了后面几级滤波器的计算频率从而降低功耗。至于每一级都用什么滤波器,不同设计思路会有不同的选择,我们常用的有半带(half-band)滤波器、椭圆(Elliptic)滤波器、巴特沃斯(Butterworth)滤波器,以及最重要的CIC(Cascaded-Integrator-Comb)滤波器。CIC滤波器的设计可以说是节省硬件资源的典范了,CIC虽然面积小、功耗低但是性能也差,所以一般都会放在前面几级,让后面几级滤波器补偿CIC的频谱。现在大多抽取器都是以CIC为中心设计的。本来我还想讲一讲CIC,但马上就要过圣诞了,我也懒得写了,有兴趣的话同学们可以去看这篇言简意赅的介绍:https://www.dsprelated.com/showarticle/1337.php
                            我来画一画各种滤波的框图,下面这个是半带滤波器:

                            CIC滤波器:

                            Biquad滤波器(可以级联多个用于构造高阶椭圆滤波器):

                            下面这张波形图能告诉你PDM信号是怎么在数字抽取器里一步步变成PCM信号的,这个图里我们也能看到数字抽取器是有延迟(groupdelay)的:

                            最后对比一下数字抽取器地输入PDM信号和输出PCM信号的频谱,可以看出PDM的高频噪声被滤除,而低频信号完整地保留了下来:

                            (完)


                            IP属地:美国15楼2021-12-25 06:54
                            回复
                              好了现在同学们应该明白模拟音频信号是怎么变成数字PCM信号的了,以后有时间(一两年内)我再写PCM信号是怎么在芯片之间传输的(本系列第二篇)。
                              我在这篇帖子上花的时间远超预计。我是想写得让完全没有DSP基础的同学也能看懂,同时也可以从最基础的知识出发引出实际工程问题。我在尽力写清楚思路的情况下,尽量减少繁琐的推导过程,不过最后看上去还是很乱。由于这次铺垫了很多基础知识,下次写第三篇Delta-SigmaDAC的时候应该就能写得简洁很多了。另外,帖子里所有的图(除了注明出处的和海绵宝宝那张)全都是我自己亲手画/跑的,费了我不少时间。
                              祝大家圣诞快乐。
                              qqj93 于2021年圣诞夜。


                              IP属地:美国16楼2021-12-25 07:03
                              收起回复