SFDR 参数分析

SFDR是信号系统处理中常用的一项参数,对于评估系统的噪声水平和ADC/DAC的性能有一定参考意义。

SFDR,英文全称是 Spurious-Free Dynamic range,意为无杂散动态范围。SFDR是指基波强度与最大杂波或谐波的强度之比,所以SFDR值越大则说明系统的噪声水平越低,灵敏度越高。

下面我们用一个示例看下不同量化位数对SFDR的影响。

matlab代码:

close all;clear all;clc;
%%
N = 1000;                   %总采样数1000
t = -pi : 2*pi/N : pi;      %一个完整周期 

x1 = 7*sin(2*t);            %幅值7,圆频率2
% 进行定点量化
qpath = quantizer(‘fixed‘,‘round‘,‘saturate‘,[5,0]);
fix_x1 = quantize(qpath,x1);

figure;
subplot(221)
stairs(x1);title(‘浮点精度(double)信号‘);

subplot(222)
stairs(fix_x1);title(‘定点精度(fix5-0)信号‘);
%%
% 进行DFT变换,求模
X1 = abs(fft(x1));
X1 = fftshift(X1);

subplot(223)
semilogy(X1);grid on;title(‘浮点DFT变换结果‘);
X11 = abs(fft(fix_x1));
X11 = fftshift(X11);
subplot(224)
semilogy(X11);grid on;title(‘定点DFT变换结果‘);

这是运行后的结果,对比之后可以看到,double类型的正弦信号底噪极小,而经过量化之后的信号,底噪十分明显。

下面计算一下浮点信号的SFDR,在Matlab中,SFDR的基本过程为加窗DFT变换,选取杂波或谐波最大值求出比率,结果单位为dB。在频率轴经过归一化,采样率1Hz。

图中黑色部分为DC信号,蓝色部分是基波信号,红色部分是杂波信号。灰色区域是SFDR计算范围。

基频信号的峰值是12.73dB,杂波的最大值是-291.4dB,二者比率为304.13dB,即是SFDR的值。

再来计算一下经过定点量化信号的SFDR值。

基频信号的峰值是12.78dB,与浮点结果基本一致,杂波的最大值是-19.53dB,二者比率为32.31dB,远小于浮点信号的SFDR值。

实际上,信号量化位数越多,信号底噪越干净,SFDR值也越大。

这是进行fix_10_5量化的结果,保留5bit小数,可以看到时间曲线已经没有明显锯齿,非常光滑。

SFDR为63.94dB,大于fix_10_5的28.69dB,小于浮点数的304.14dB

关于定点化

定点化按四舍五入进行取舍,当量化位数不够时,进行饱和处理。

定点格式[fix_w_b]表示,这是一个有符号数,总位宽w,小数位宽b。它能表示的范围为:[ -2w-b-1  + 1/2b  ,  +2w-b-1 - 1/2 ],分辨率为1/2b.

举例来讲[fix_5_0]能表示的范围在[-2^(5-0-1)+1,+2^(5-0-1)-1]之间,即[-15 ,+15]之间,分辨率1。

关于点数/采样频率的影响

点数越多,采样率越高则SFDR的值也越大

这是N=10000点的结果,比N=1000点时提高了5.37dB

关于噪声来源分析

从时域信号来看,相当于一个纯正弦信号乘以一个周期方波信号,在频域就是进行周期卷积。而方波包含有多次谐波,基本之后的都可以视为噪声。这些噪声,最后都通过ADC的量化过程表现出来。

参考资料:

https://en.wikipedia.org/wiki/Spurious-free_dynamic_range

http://blog.sina.com.cn/s/blog_4b2c39e20100z8tu.html

http://cn.mathworks.com/help/signal/ref/sfdr.html?searchHighlight=sfdr&s_tid=doc_srchtitle

http://cn.mathworks.com/help/signal/examples/spurious-free-dynamic-range-sfdr-measurement.html

时间: 2024-10-21 08:48:58

SFDR 参数分析的相关文章

【运维基本功】centos6.5下巧用netstat命令的参数分析TCP连接与关闭过程,图文详解

前言 使用centos6.5系统自带的 netstat,grep,watch等命令,来分析网络连接状态,要求对 TCP 有限状态机的概念有较深入的理解. 同时,这也是除了使用强大的专业第三方协议分析器,如 wireshark 以外,最有效的办法. 写本博文的目的其中之一就是要告诉大家,不使用 wireshark 等第三方工具,自己也能做到一定粒度的网络连接,状态分析,调试等等. 用到的命令总结如下: watch -n 1 -d 'netstat -antupeo | grep --color 8

cocos2dx tolua传递参数分析

cocos2dx tolua传递参数分析: tolua_Cocos2d_CCNode_addChild00 == void CCNode::addChild(CCNode *child) tolua_Cocos2d_CCNode_addChild01 == void CCNode::addChild(CCNode *child, int zOrder) tolua_Cocos2d_CCNode_addChild02 == void CCNode::addChild(CCNode *child,

html学习 - javascript事件监听以及addEventListener参数分析

事件监听 在Javascript中事件的监听是用来对某些操作做出反应的方法.例如监听一个按钮的pressdown, 或者获取鼠标左键按下时候鼠标的位置.这些都需要使用监听来完成.监听的函数很简单:addEventListener. 这里解释一下一个网页的嵌套关系:最外层:window 包含:document 包含:html 包含: body 包含:div等等... addEventListener监听方法 按钮监听事件响应 首先我们需要获取一个按钮的handle,获取的方法很简单,代码如下: v

深入理解Java虚拟机-常用vm参数分析

Java虚拟机深入理解系列全部文章更新中... 深入理解Java虚拟机-Java内存区域透彻分析 深入理解Java虚拟机-常用vm参数分析 深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别JVM内存分配文盲 深入理解Java虚拟机-如何利用JDK自带的命令行工具监控上百万的高并发的虚拟机性能 深入理解Java虚拟机-如何利用VisualVM对高并发项目进行性能分析 深入理解Java虚拟机-你了解GC算法原理吗 话不多说,今天就分析一下一些常用的Java虚拟机的参数设置,以及如何更好

jQuery构造函数init参数分析(二)

接着上一篇随笔讨论. 如果selector是其他字符串情况就比较多了比较复杂了 // Handle HTML strings if ( typeof selector === "string" ) {...} 开始分不同的情况处理 // Are we dealing with HTML string or an ID? if ( selector.charAt(0) === "<" && selector.charAt( selector.le

View的add过程,布局参数分析

1.假如父View是 <LinearLayout android:id="@+id/ll_indicator" android:orientation="horizontal" android:layout_height="@dimen/size40" //40dp android:layout_width="match_parent" > <!-- 存放三个indicator --> </Lin

对线程等待函数pthread_join二级指针参数分析

分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地址.一级指针承接的话就是这个地址. 那既然二级指针保存了,我们如何访问那?开始我觉得直接来个二级指针,然后*访问算了,但是下面的东西.让你不能那么干了!其实非要那样也可以 malloc呗! 线程创建函数pthread_create的函数原型如下: int pthread_create(pthread

mysqldump主要参数分析

mysqldump是逻辑备份,较适合备份数据量小的库.今天我们来看看几个比较常用的重要参数,并分析它们都做了什么,需要打开general_log. set global general_log = 1; +------------------+--------------------------------------+ | Variable_name | Value | +------------------+--------------------------------------+ |

iOS_ @property参数分析

@propert的相关参数 因为现在Xcode都是默认使用ARC所以现在分析主要是以ARC为主. [email protected]有哪些参数? 第一组: 内存管理特性 retain  assign  copy  strong    weak     unsafe_unretained     autoreleasing 第二组: 读 /写特性 readwrite  readonly 第三组: 多线程特性 nonatomic  atomic 第四组: 方法名特性 setter  getter 2