SAR ADC系列2:DFT离散傅里叶变换
目录
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离散傅里叶变换相关推荐
- DFT 离散傅里叶变换
DFT 离散傅里叶变换 latex公式在线编辑: https://www.latexlive.com/home## 公式: f ^ k = ∑ j = 0 n − 1 f j e ( − 2 π i ...
- SAR ADC系列26:系统设计
目录 串一下知识点: 设计一个高速异步SAR ADC 设计目标: 电路架构:(具体电路看前文) 采样网络: 采样电容: CDAC开关切换策略: CDAC阵列冗余设计: SAR 逻辑 比较器方案: 串一 ...
- DFT离散傅里叶变换【针对工科生,基础版本】
傅里叶分析告诉咱们任何周期信号都可以被表示成一组正弦(这里正弦包括余弦)函数的线性组合. 而离散傅里叶变换是想告诉咱们这些线性组合的各个分量的频率.幅值.还有相位. 那它是如何做到的呢? 首先我对两个 ...
- SAR ADC系列12:CDAC传统开关切换策略
目录 一.传统的开关切换策略 传统的CDAC切换策略:采样阶段--同时进行一次比较 传统的CDAC切换策略:第一次比较阶段 传统的CDAC切换策略:第二次比较阶段 总体框图 传统开关切换策略:能耗 一 ...
- SAR ADC系列16:CDAC上机实践+作业
目录 作业和上机实践: 通过仿真确定桥接电容Ca的尺寸 采样技术和CDAC相结合 电容校正 为什么在100...0和011...1之间最差:电容的瓶颈在MSB上面 为什么INL最差也发生在中间Code ...
- 理解DFT(离散傅里叶变换)
文章目录 DFT做什么? DFT怎么做到这个的呢? 详细查看配对过程 这个时候就可以把X数组画出来了 把得到X的公式明确一下 DFT的公式 是为了保留相位信息 如何解决相位问题 现在看看这个复数代表啥 ...
- SAR ADC系列11:分段式CDAC
一.分段CDAC 分段CDAC的结构 图中的Cd1和Cd2为上极板寄生电容,LSB的单位电容为Cu,MSB单位电容为k*Cu,MSB有M位,最大的电容 2^(M-1)*k*Cu,LSB有L位,最大的电 ...
- SAR ADC系列13:单调开关切换策略
单调开关切换策略 台湾成功大学Chun-Cheng Liu等人提出 单调开关切换策略:所谓单调,指的是在CDAC的上极板(比较器输入)会单调性下降或者上升. 单调开关切换策略和传统开关切换策略的区别 ...
- 离散傅里叶变换 (DFT)、快速傅里叶变换 (FFT)
目录 离散傅里叶变换 (DFT) 离散傅里叶变换的基 离散傅里叶变换 快速傅里叶变换 (FFT) 卷积 线性时不变系统 傅里叶级数 参考文献 离散傅里叶变换 (DFT) 离散傅里叶变换的基 对于周期为 ...
最新文章
- Spring、Spring Boot和TestNG测试指南 - @ActiveProfiles
- 出现adb连接不上的解决办法(转载)
- 【codeforces 807C】Success Rate
- Timer定时器控件 1130
- ffmpeg mp4 html5,FFMPEG mkv to mp4 conversion lacks audio in HTML5 player
- 用SQL在文本文件中追加数据
- spark Application report for application_1498032012194_0036 (state: FAILED)
- JAVA面向对象编程四大特点简述
- Cisco Packet Tracer思科模拟器交换机的HSRP技术
- Android判断世界各国手机号码合法性
- Gif动态图片怎么做?如何快速生成gif动图?
- Android 关于 ActionBarSherlock 的使用
- 信号强度和dBm的对应关系
- 微信小程序 - 自定义组件中类似页面 onShow 的页面显示就触发的生命周期钩子函数(页面回退时更新数据常用, 例如回退页面更新子组件数据, 回退更新子组件中 data 内容)
- python修改图片,Python之修改图片像素值的方法
- pyspark RDD详细教程
- 自己动手打造深度学习服务器
- 机器人建模中移动关节如何建立坐标系_机器人建模
- 爬虫 JavaScript 逆向进阶!利用 AST 技术还原混淆代码
- ROS从入门到精通0-2:Win10+Ubuntu双系统安装、配置、卸载保姆级图文教程
热门文章
- 上市的Uber背后有哪些强大的开源项目
- 关于Latex 引用参考文献时,bibliography{}以及bibliographystyle{}位置的问题
- sublime text 3 代码比对插件安装使用
- 计算机打印稿,计算机如何打印演示文稿?
- 二寸照片大小是多少?如何修改制作证件照?
- 【智能路由器】让MT7620固件openwrt支持USB
- 城市间紧急救援(25 分)
- java快速入门之:HelloWorld
- 上项线体表位置_心电图导联的体表电极名称及安放位置
- 【2-Python基本图形绘制】嵩天《Python语言程序设计》