目录

ADC动态性能仿真/测试平台

DFT:离散傅里叶分析

DFT的 Matlab 实现:

频谱泄露:

如何规避频谱泄露:

ADC性能分析:DFT

Cadence环境下的DFT分析实例:

Matlab环境下的DFT分析实例:


ADC动态性能仿真/测试平台

作为一个线性系统,如果输入为单频信号,则ADC输出应该只含有相同频率的单频信号fin,非线性会导致K*fin(K=2/3.…)的频谱分量。DNL、INL都会引起频域的非线性。

动态性能指标:

  • SNR:Signal to Noise Ratio
  • SNDR:Signal to Noise+Distortion Ration
  • ENOB:Effective Number of Bits
  • DR:Dynamic Range
  • SFDR:Spurious Free Dynamic Range
  • HD:Harmonic Distortion
  • THD:Total Harmonic Distortion

DFT:离散傅里叶分析

DFT:Discrete Fourier Transform离散傅里叶变换,用于分析ADC输出信号的频谱。

  • 以 Ts=1/fs 为时间间隔对样本进行采样,取N个采样样本做DTF,得到N个离散频率。
  • 频率分量K代表的频率是 K*fs/N 。
  • DFT的频率精度:
           ■ 相邻频谱之间频率间隔为 fs/N  。时域间隔是 N/fs 。
           ■ 总的采样时间为 N*Ts = N/fs 。
  • DFT 和 FFT 的关系:
           如果N=2^K,则用FFT是更有效的算法。

注意:这里的第一根谱线是fs=0(即DC的谱线) ,第二根才是 fs/N 。总共N个点,第个是0,第N个是 (N-1)/N

相干采样,ADC输出频率要落在 K*fs/N 谱线上才能看到!

DFT的 Matlab 实现:

一个周期采样10个点,信号周期数=10

clear;
N  = 100 ; % 取输入波的 100 个点做DFT
fs = 1000; % 采样频率是 1000 Hz
fx = 100 ; % 信号的频率是 100 Hz
%以 采样频率1000Hz 去采样 频率100Hz信号 的100个点,相当于一个周期采10个点,一共采样10个周期100个点x = cos(2*pi*fx/fs*[0:N-1]); %输入信号
s = abs(fft(x));             %取幅值
plot(s, 'linewidth', 2);
% 横坐标是点数,纵坐标是幅值

■ 对 x = cos(2*pi*fx/fs*[0:N-1]); 说明:
        2*pi*fx 是输入信号频率,在 K/fs 处采集一个点,K的取值为[0:N-1]
       
(上文:以 Ts = 1/fs 为时间间隔进行采样)
信号有两根谱线:频谱混叠, 以 fs/2 为轴对称分布,实际只要看一半即可。

clear;
N  = 100;
fs = 1000;
fx = 100;
FS = 1; % full-scale amplitude--幅度为1x = FS*cos(2*pi*fx/fs*[0:N-1]); % 2*pi*fx是输入信号频率,在 K/fs 处采集一个点,K为[0:N-1]
s = abs(fft(x));
% remove redundant half of spectrum
s = s(1:end/2);
% normalize magnitudes to dBFS
% dBFS = dB relative to full-scale
s = 20*log10(2*s/N/FS);
% frequency vector
f = [0:N/2-1]/N; % 取一半的频率plot(f, s, 'LineWidth',2);
xlabel('Frequency [f/fs]')
ylabel('DFT Magnitude [dBFS]')
% 横坐标归一化f/fs,纵坐标幅值dB

 ■ 频谱泄露:

将 fx = 100;改成 fx = 101;就会发生频谱泄露。谱线尖峰位置为 101/1000。

  • 通常人脑会按照左下图的红色部分拓展sin波,且主观认为它是一个周期信号
  • 对DFT,情况就不一样了!机器无法判断它得到的信号到底是1个完整的信号周期,还是2个,或者是2.3个。机器的脑补操作,就是把采样到的信号当成一个完整的周期,然后按照右下图那样去拓展。就会出现频谱泄露

所以一定要 采样整数个周期给DFT

  • 从傅里叶级数可知,任何一个周期信号,都可以用它的基波和谐波加权来表示。
  • 对于DFT而言,fs 的采样率,采了N个点的信号,总共花费了N/fs秒,意味着基波频率就是 fs/N,DFT会将这 N/fs 秒进行周期性延拓。任何信号都可以用频率为 fs/N 的基波以及它的谐波加权构成。换言之,DFT输出频谱只会出现一系列的离散频谱,这些离散频谱频率为0、fs/N、2fs/N、 ……(N-1)*fs/N 。 
  • 如果输入信号频率fin不满足 fin=K*fs/N,则输入信号不会落在任何一根谱线上,此时输入信号的能量会分摊到好几根谱线上,我们称这种现象为出现频谱泄露

如何规避频谱泄露:

        方法一:保证送给DFT的信号是整数个周期(相干采样):M/N = fin/fs 即:fin = fs / N *M——(fin 为频率 fs/N 的整数倍
      (其中:M为信号周期数,N为DFT的点数,fin为输入信号频率,fs为采样频率)
        方法二:给信号加窗(Window)


ADC性能分析:DFT

DFT对采用频率的要求:满足采样定理,fs > 2*fin_max

相干采样:
                                          
        上式中M为信号周期数,N为DFT采样点数,fin为信号频率,fs为采样频率。M取奇数,N取2^K,如1024、4096。(让M/N不能约分,才能充分利用所有的点)
        即 fin 为 M倍的 fs/N (基波频率的M倍)。是第 (M+1) 个点 (第一个点是DC)


Cadence环境下的DFT分析实例:

目标:在Cadence环境下对一个连续时间信号 A=sin(2*pi*1e6*t) 进行频谱分析----1MHz正弦波

方法:利用Cadence Calculator自带函数 dft( ) 完成
        ■ 截取一段整数个周期的信号波形,在此 1us~8us,共 7us,对应M=7
        ■ 取采点数N=1024,通过相干采样公式可以计算 fs=N*fin/M
        ■ 将dft结果取dB20()


Matlab环境下的DFT分析实例:

同上,1MHz正弦波,N=1024,M=7。

clear; clc;
N = 1024;
M = 7;
fin = 1e6;  % 输入信号频率1MHzfs = N*fin/M; % 通过公式计算出采样频率fs
Ts = 1/fs;
t = 0:Ts:(N-1)*Ts; % 采样时域点数,以Ts步进
vin = sin(2*pi*fin*t); % 采样后的正弦波
figure(1);
plot(t,vin)s = fft(vin); % FFT分析
s = abs(s);   % 取模
s = 20*log10(s); % 换算dB
% normalize magnitudes to fin tone
s = s - max(s); % 幅度归一化
% remove redundant half of spectrum
s = s(1:N/2); % 取频谱一半figure(2);
subplot(2,1,1);
plot(0:N/2-1,s); % 点数0~N/2-1subplot(2,1,2);
f = (0:N/2-1)*fs/N; % 频率归一化
plot(f,s);

SAR ADC系列2:DFT离散傅里叶变换相关推荐

  1. DFT 离散傅里叶变换

    DFT 离散傅里叶变换 latex公式在线编辑: https://www.latexlive.com/home## 公式: f ^ k = ∑ j = 0 n − 1 f j e ( − 2 π i ...

  2. SAR ADC系列26:系统设计

    目录 串一下知识点: 设计一个高速异步SAR ADC 设计目标: 电路架构:(具体电路看前文) 采样网络: 采样电容: CDAC开关切换策略: CDAC阵列冗余设计: SAR 逻辑 比较器方案: 串一 ...

  3. DFT离散傅里叶变换【针对工科生,基础版本】

    傅里叶分析告诉咱们任何周期信号都可以被表示成一组正弦(这里正弦包括余弦)函数的线性组合. 而离散傅里叶变换是想告诉咱们这些线性组合的各个分量的频率.幅值.还有相位. 那它是如何做到的呢? 首先我对两个 ...

  4. SAR ADC系列12:CDAC传统开关切换策略

    目录 一.传统的开关切换策略 传统的CDAC切换策略:采样阶段--同时进行一次比较 传统的CDAC切换策略:第一次比较阶段 传统的CDAC切换策略:第二次比较阶段 总体框图 传统开关切换策略:能耗 一 ...

  5. SAR ADC系列16:CDAC上机实践+作业

    目录 作业和上机实践: 通过仿真确定桥接电容Ca的尺寸 采样技术和CDAC相结合 电容校正 为什么在100...0和011...1之间最差:电容的瓶颈在MSB上面 为什么INL最差也发生在中间Code ...

  6. 理解DFT(离散傅里叶变换)

    文章目录 DFT做什么? DFT怎么做到这个的呢? 详细查看配对过程 这个时候就可以把X数组画出来了 把得到X的公式明确一下 DFT的公式 是为了保留相位信息 如何解决相位问题 现在看看这个复数代表啥 ...

  7. SAR ADC系列11:分段式CDAC

    一.分段CDAC 分段CDAC的结构 图中的Cd1和Cd2为上极板寄生电容,LSB的单位电容为Cu,MSB单位电容为k*Cu,MSB有M位,最大的电容 2^(M-1)*k*Cu,LSB有L位,最大的电 ...

  8. SAR ADC系列13:单调开关切换策略

    单调开关切换策略 台湾成功大学Chun-Cheng Liu等人提出 单调开关切换策略:所谓单调,指的是在CDAC的上极板(比较器输入)会单调性下降或者上升. 单调开关切换策略和传统开关切换策略的区别 ...

  9. 离散傅里叶变换 (DFT)、快速傅里叶变换 (FFT)

    目录 离散傅里叶变换 (DFT) 离散傅里叶变换的基 离散傅里叶变换 快速傅里叶变换 (FFT) 卷积 线性时不变系统 傅里叶级数 参考文献 离散傅里叶变换 (DFT) 离散傅里叶变换的基 对于周期为 ...

最新文章

  1. Spring、Spring Boot和TestNG测试指南 - @ActiveProfiles
  2. 出现adb连接不上的解决办法(转载)
  3. 【codeforces 807C】Success Rate
  4. Timer定时器控件 1130
  5. ffmpeg mp4 html5,FFMPEG mkv to mp4 conversion lacks audio in HTML5 player
  6. 用SQL在文本文件中追加数据
  7. spark Application report for application_1498032012194_0036 (state: FAILED)
  8. JAVA面向对象编程四大特点简述
  9. Cisco Packet Tracer思科模拟器交换机的HSRP技术
  10. Android判断世界各国手机号码合法性
  11. Gif动态图片怎么做?如何快速生成gif动图?
  12. Android 关于 ActionBarSherlock 的使用
  13. 信号强度和dBm的对应关系
  14. 微信小程序 - 自定义组件中类似页面 onShow 的页面显示就触发的生命周期钩子函数(页面回退时更新数据常用, 例如回退页面更新子组件数据, 回退更新子组件中 data 内容)
  15. python修改图片,Python之修改图片像素值的方法
  16. pyspark RDD详细教程
  17. 自己动手打造深度学习服务器
  18. 机器人建模中移动关节如何建立坐标系_机器人建模
  19. 爬虫 JavaScript 逆向进阶!利用 AST 技术还原混淆代码
  20. ROS从入门到精通0-2:Win10+Ubuntu双系统安装、配置、卸载保姆级图文教程

热门文章

  1. 上市的Uber背后有哪些强大的开源项目
  2. 关于Latex 引用参考文献时,bibliography{}以及bibliographystyle{}位置的问题
  3. sublime text 3 代码比对插件安装使用
  4. 计算机打印稿,计算机如何打印演示文稿?
  5. 二寸照片大小是多少?如何修改制作证件照?
  6. 【智能路由器】让MT7620固件openwrt支持USB
  7. 城市间紧急救援(25 分)
  8. java快速入门之:HelloWorld
  9. 上项线体表位置_心电图导联的体表电极名称及安放位置
  10. 【2-Python基本图形绘制】嵩天《Python语言程序设计》