理解ADC:为什么量化噪声也会产生谐波?附带介绍 Dither(抖动)

前言

今天继续从经典的 ADI 《MT-001》说起,通常情况下量化噪声是白噪声,但如果量化噪声与输入信号之间存在相关性,就不能被当做白噪声对待。

文中举了一个有意思的例子:理想 ADC 的采样频率为 80 MSPS ,一种情况输入信号频率为 2MHz,采样频率与其相除正好是 40 倍;另一种情况输入信号频率稍微偏一点,为 2.111MHz,采样频率不能与其整除。那么两种情况的量化噪声分别什么样?

图1 量化噪声 FFT 频谱图:(A) 输入信号为 2MHz; (B) 输入信号为 2.111MHz;[1]

可以看到,图 (A) 中量化噪声中有明显的谐波,且 FFT 底噪较低;图 (B) 中没有明显的谐波,且 FFT 底噪较高。

文中告诉我们,两种情况下理想 ADC 的 SNR 都是 74 dBc(噪声总能量一样),但图 (A) 中 SFDR 是 77dBc(谐波较大),图 (B) 中 SFDR 是 92dBc(谐波较小)。

解释原因,文中强调了“相关性”,摘录如下:

Under certain conditions where the sampling clock and the signal are harmonically related, the quantization noise becomes correlated, and the energy is concentrated in the harmonics of the signal—however, the RMS value remains approximately q/√12.
Quite often, the assumption is made that the theoretical quantization noise appears as white noise, spread uniformly over the Nyquist bandwidth DC to Fs/2. Unfortunately, this is not true in all cases. In the case of strong correlation, the quantization noise appears concentrated at the various harmonics of the input signal, just where you don't want them.

你理解了吗?下文是我的理解。


为什么量化噪声会产生谐波?

我们可以把 ADC 看成是一种非线性设备,输入一个连续的信号,输出一个离散的(有台阶)的量化信号,比如:

图2 ADC 量化信号与量化噪声[2]

量化信号与输入信号之间的差距,就是量化噪声。

如果采样时钟频率是输入信号的整数倍(比如以 80MHz 采样 2MHz 的正弦波),在每个周期内,采集到的样本数量是一样的,并且这些“样本值”也是固定的。对于不同周期的采样,只是在一遍一遍的重复这些样本值。

然后,将量化信号与输入信号相减,得到的量化噪声也是一些固定的样本值,重复出现的样本值具有周期性,这种周期性与输入信号相关。图2 就是这样一个例子。

如果采样时钟频率不是输入信号的整数倍(比如以 80MHz 时钟采样 2.111 MHz 的正弦波),只要采样的样本数量够多,几乎能覆盖正弦波所有可能的值(因为每个周期内采样的位置不同),样本值的合集非常丰富。将两者相减,得到的量化噪声是相对随机的,这使得量化噪声与输入信号不相关。

总之,如果量化噪声在周期上与输入信号具有相关性,会出现谐波,使得 SFDR 不佳。但就 SNR 来说,因为只影响噪声能量密度的分布,总能量没有变化,所以 SNR 一样(理想 SNR 只由 bit 位数决定,详情请见上一篇)。


为什么只有奇数谐波?

另外一个问题,在图1 (A) 中,为何量化噪声的频谱只有输入信号的奇数谐波?如 3rd(6MHz)、 5th(10MHz)、 7th(14MHz)……

对于这个问题,回顾一下傅里叶变换的基本图示,比如下面这种可以帮助理解:

图3 FFT奇数谐波对应的信号[3]

图4 FFT偶数谐波对应的信号[3]

也就是,如果信号在正半周期与负半周期是对称的,频谱上只有奇数谐波;如果正半周期与负半周期不对称,则有偶数谐波。图1 (A) 的量化噪声属于前者的情况。


如何模拟量化噪声?

我看了几篇用 Python 模拟量化噪声的案例,类似步骤如下,完整代码见[4]:

signal = np.sin(2*np.pi*f0*t) #原始输入信号
quantized = quantize(signal, threshold) #量化信号
qnoise = quantized - signal #量化噪声

做出时域图和频谱图的示例分别如下:

图5 Python模拟的量化噪声[4]

图中,蓝色是原始输入信号,红色是量化后信号(2 bit 量化),绿色是量化噪声。

但在实际开发中,我们是对 ADC 之后的量化信号做 FFT,也就是对上图的红色信号直接做 FFT,那么想象一下其频谱图会是什么样?


如何破除相关性 —— Dither(抖动)

为了避免图1 (A) 中的情况,现代化 ADC 内部具有 Dither,这是一种对信号施加抖动的技术,可以破除量化噪声相关性,虽然会略微增加底噪,但可以改善 SFDR 。

一般 SPEC 上也会标注 Dither 开启后的 SFDR 差异,举例如下:

图6 ADC ltc2208 内部 Dither 对 SFDR 的提升[5]


小结

今天我们从 ADI 《MT-001》的例子出发,解释了当量化噪声与输入信号具有周期相关性时会产生谐波,通过 Dither 可以破除相关性,提升 SFDR。

顺便说一下 ADI MT 系列非常经典,值得细品,作者 Walt Kester 介绍如下,在 ADI 工作了 47 年:

图7 Walt Kester的介绍

有网友整理了他的著作全集,有兴趣查阅的话详见[6]。


参考资料

主要来自以下内容,都可以通过搜索关键词获取:

1. ADI MT-001 by Walt Kester: Taking the Mystery out of the Infamous Formula, "SNR = 6.02N + 1.76dB" and Why You Should Care
2. https://www.researchgate.net/publication/228855699_Improved_residual_analysis_in_ADC_testing
3. https://www.quora.com/What-are-even-and-odd-harmonics-in-audio-signals-Why-are-they-important
4. https://dsp.stackexchange.com/questions/36629/coherent-sampling-and-the-distribution-of-quantization-noise
5. ADI Linear ltc2208 datasheet
6. https://tomverbeure.github.io/2021/02/15/Analog-Devices-Tutorials.html


欢迎关注我的微信公众号“疯狂的运放”,及时收到最新的推文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/904529.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

外包干了7天,技术明显退步。。。。。

先说一下自己的情况,本科生,22年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

vue组件在项目中的常用业务逻辑(1)

若要使用一个组件(已有基本结构) 1.在api>index.js获取接口数据(这里是模拟数据) 2.去vuex仓库(store>home.js)存储数据(state mutations actions三连环) (准备…

Linux网络命令:系统中用于显示和操作 ARP缓存表的命令arp详解

目录 一、概述 二、用法 1、基本语法 2、常用选项 3、获取帮助 三、示例 1. 显示所有 ARP 表项 2. 以数字形式显示 IP 地址 3. 删除指定的 ARP 表项 4. 添加一个静态 ARP 表项 5. 显示详细信息 四、详细说明 1、ARP 缓存表 2、静态 ARP 表项 3、动态 ARP 表项 五、常…

如何在短时间内入门并掌握深度学习?

如何在短时间内快速入门并掌握深度学习,是很多读者的困惑——晦涩难懂的数学 知识、复杂的算法、烦琐的编程……深度学习虽然让无数读者心怀向往,却也让不少人望而生畏,深感沮丧:时间没少花,却收效甚微。 如何才能更好…

图像分割从基础到进阶:阈值化、K-means和Mean-Shift算法的应用

图像分割是计算机视觉中的一项关键技术,用来将图像划分为若干个 有意义 的区域,以便后续的图像处理和分析工作。根据任务的不同,图像分割可以进一步细分为语义分割、实例分割和全景分割: 语义分割 (Semantic Segmentation) 对图像…

JavaEE进阶----18.<Mybatis补充($和#的区别+数据库连接池)>

详解了 1.$和#的区别 2.数据库连接池。 3.简单了解MySQL企业开发规范 一、Mybatis面试题:$和#的区别是什么? MyBatis 参数赋值有两种方式,咱们前面使用了 #{} 进行赋值,接下来我们看下二者的区别。 1.1 #是预编译SQL,$…

瑞格智慧心理服务平台 NPreenSMSList.asmx sql注入漏洞复现

0x01 产品描述: ‌ 瑞格智慧心理服务平台‌是一个集心理测评、心理咨询、心理危机干预、心理放松训练等功能于一体的综合性心理健康服务平台。该平台由北京瑞格心灵科技有限公司开发,旨在为用户提供全方位的心理健康服务。0x02 漏洞描述:…

Webserver(1.8)操作函数

目录 文件属性操作函数access函数chmod函数chown函数truncate函数 目录操作函数mkdir函数rmdir函数rename函数chdir函数*getcwd函数 目录遍历函数*opendir函数*readdir函数closedir函数 dup、dup2函数dupdup2 fcntl函数 文件属性操作函数 access函数 判断某个文件是否有某个权…

(49)MATLAB实现迫零均衡器原理与代码

文章目录 前言一、迫零均衡器设计说明二、迫零均衡器MATLAB源代码1.函数说明2.代码实现3.辅助函数 前言 使用MATLAB实现迫零均衡器。给出完整的MATLAB设计源代码。 一、迫零均衡器设计说明 理想的迫零均衡器有无限多个抽头权系数,是不能实现的,本文考虑…

springboot揭秘00-基于java配置的spring容器

文章目录 【README】【1】基本概念:Configuration与Bean【2】使用AnnotationConfigApplicationContext实例化spring容器【2.1】使用java配置简单构建spring容器【2.1.1】AnnotationConfigApplicationContext与Component及JSR-330注解类一起使用 【2.2】使用register…

线程和进程延续

1.线程和进程启动终止方式 1.创建子进程,子线程 2.退出进程/线程 3.回收僵尸进程资源 / 回收线程资源 4.进程终止函数 / 线程清理函数 2.线程状态切换 pthread_create()变为就绪态,调度后成为运行态,pthread_join()成为阻塞态…

为微信小程序换皮肤之配置vant

微信小程序自带的控件虽然具有很好的通用性和简洁性,但在面对一些复杂的交互场景和个性化的设计需求时,可能会显得力不从心。其功能的相对基础使得开发者在实现诸如多步骤复杂表单提交、实时数据交互与可视化展示、高度定制化的界面布局等方面&#xff0…

K8S配置storage-class

简介 Kubernetes支持NFS存储,需要安装nfs-subdir-external-provisioner,它是一个存储资源自动调配器,它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展&#xff0…

html生成图片方案总结

动态图片生成是我们日常开发中经常遇到的需求,比如宣传海报生成,电商商品图动态生成等,本文总结出三种常见的 HTML 生成图片的方案。 一、html2canvas html2canvas库能够将 HTML 元素渲染为 Canvas,然后将其转换为图片。它的优点…

【力扣刷题实战】相同的树

大家好,我是小卡皮巴拉 文章目录 目录 力扣题目: 相同的树 题目描述 示例 1: 示例 2: 示例 3: 解题思路 题目理解 算法选择 具体思路 解题要点 完整代码(C语言) 兄弟们共勉 &#…

如何使用AdsPower指纹浏览器克服爬虫技术限制,安全高效进行爬虫!

随着中国开发者日益成熟,应用质量明显提升,越来越多的开发者选择出海寻找机会扩大市场。但“应用出海”说起来容易,做起来难。其中,最大的困恼就是对海外市场缺乏了解。 很多开发者会选择使用网络爬虫(Web Crawling&a…

Python小游戏18——中国象棋

首先,你需要安装Pygame库。如果你还没有安装它,可以使用以下命令进行安装: bash pip install pygame 运行结果 代码如下: python import pygame import sys # 初始化Pygame pygame.init() # 屏幕尺寸 SCREEN_WIDTH 800 SCREEN_HE…

轴承寿命预测 (Python 预测模型全家桶)

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

【IC验证_systemverilog】信号类型

IC验证_systemverilog 1.信号声明2.变量类型3.数据类型4.符号 1.信号声明 语法: 变量类型 信号类型 符号转换 位宽 信号名 深度;2.变量类型 (1)说明: systemverilog中的信号类型主要分为线网类型(wire&a…

camera和lidar外参标定

雷达和相机的外参标定(外部参数标定)指的是确定两者之间的旋转和平移关系,使得它们的坐标系可以对齐。 文章目录 无目标标定livox_camera_calibdirect_visual_lidar_calibration 有目标标定velo2cam_calibration 无目标标定 livox_camera_ca…