如何提高放大电路信噪比(转)

http://www.deyisupport.com/question_answer/analog/data_converters/f/58/t/617.aspx

 

1 抑制噪声源

*在符合设计规格的前提下,使用最低频率的时钟以及最和缓的上升时间。

*如果时钟电路在电路板外,则将相关之时序电路(如MCU)靠近连接器,否

则,就放在母板中间。

* 将震荡器平放于PCB并接地。

* 尽可缩小时序信号的循环区域。

* 将数位I/O驱动器(digital I/O driver)放置于PCB外缘。

* 将进入PCB的信号予以适当滤波。

* 将离开PCB的噪声信号予以适当滤波。

* 使用碟状陶瓷电容(disk ceramic capacitor)或是多层陶瓷电容(multilayer

ceramic capacitor) 做为数位逻辑IC的削尖电容。

* 尽量将数位IC之despiking capacitor靠近IC旁边。

* 使用排线包装的OP放大器,将”+”端接地,以”-“端作为输入信号端。

* 提供适当的突波阻尼(surge absorber)给继电器线圈。

* 使用45度角(圆弧更佳)的绕线以取代90度角来减少高频辐射。

* 如果需要,在产生高频噪声的电源线用feed-through capacitor连接外部。

* 如果需要,在产生高频噪声的电源线串接陶铁磁珠(ferrite bead)以滤除高频

噪声。

* 将shield cable两端均接地(但并非作为地线),以降低电磁辐射。

2 减少噪声耦合

* 如果经济许可,使用多层电路板来分开PCB上不同性质的电路。4层板

PCB,通常外面的两层为讯号,中间两层为电源层(power layer)与地线层

(ground layer)。如电路板为数位类比混合电路,应将数位与类比的跑线分

别布线,最后再将地线予以单点连接。

* 对单层及双层线路板使用单点电源和接地的布局。如采用双层线路板制作以

微处理器为基础的控制板(数位类比混合电路),则应特别注意数位与类比电

路『电源线』与『地线』的布局。

* 选用芯片组以缩短时序的传输线。

* 将digital I/O芯片组安置于PCB边缘并靠近连接器。

* 高速逻辑闸仅限用于特定功能之电路。

* 对电源和接地使用宽绕线。

* 保持时序绕线、汇流排和芯片致能与I/O脚位和连接器分隔开。

* 尽量将数位信号线路(尤其是时钟信号)远离类比输入和电压参考脚位。

* 当与混合信号转换器并用时,勿将数位和类比线路相交,信号的绕线要彼此

远离。

* 分隔噪声与低阶类比讯号脚位。

* 将时序信号与I/O信号垂直绕线。

* 将时序电路远离I/O讯号线。

二、PCB制版电容选择

印制板中有接触器、继电器、按钮等元件时.操作它们时均会产生较大火花放电,必须采

用RC吸收电路来吸收放电电流。一般R取1~2kΩ,C取2.2~4.7μF

一般的10PF左右的电容用来滤除高频的干扰信号,0.1UF左右的用来滤除低频的纹波干扰,还

可以起到稳压的作用

滤波电容具体选择什么容值要取决于你PCB上主要的工作频率和可能对系统造成影响的谐波

频率,可以查一下相关厂商的电容资料或者参考厂商提供的资料库软件,根据具体的需要

选择。至于个数就不一定了,看你的具体需要了,多加一两个也挺好的,暂时没用的可以

先不贴,根据实际的调试情况再选择容值。如果你PCB上主要工作频率比较低的话,加两个

电容就可以了,一个虑除纹波,一个虑除高频信号。如果会出现比较大的瞬时电流,建议

再加一个比较大的钽电容。

其实滤波应该也包含两个方面,也就是各位所说的大容值和小容值的,就是去耦和旁路。

原理我就不说了,实用点的,一般数字电路去耦0.1uF即可,用于10M以下;20M以上用1到

10个uF,去除高频噪声好些,大概按C=1/f  。旁路一般就比较的小了,一般根据谐振频率

一般为0.1或0.01uF

说到电容,各种各样的叫法就会让人头晕目眩,旁路电容,去耦电容,滤波电容等等,其

实无论如何称呼,它的原理都是一样的,即利用对交流信号呈现低阻抗的特性,这一点可

以通过电容的等效阻抗公式看出来:Xcap=1/2лfC,工作频率越高,电容值越大则电容的

阻抗越小.。在电路中,如果电容起的主要作用是给交流信号提供低阻抗的通路,就称为旁

路电容;如果主要是为了增加电源和地的交流耦合,减少交流信号对电源的影响,就可以

称为去耦电容;如果用于滤波电路中,那么又可以称为滤波电容;除此以外,对于直流电

压,电容器还可作为电路储能,利用冲放电起到电池的作用。而实际情况中,往往电容的

作用是多方面的,我们大可不必花太多的心思考虑如何定义。本文里,我们统一把这些应

用于高速PCB设计中的电容都称为旁路电容.

电容的本质是通交流,隔直流,理论上说电源滤波用电容越大越好。

但由于引线和PCB布线原因,实际上电容是电感和电容的并联电路,

(还有电容本身的电阻,有时也不可忽略)

这就引入了谐振频率的概念:ω=1/(LC)1/2

在谐振频率以下电容呈容性,谐振频率以上电容呈感性。

因而一般大电容滤低频波,小电容滤高频波。

这也能解释为什么同样容值的STM封装的电容滤波频率比DIP封装更高。

至于到底用多大的电容,这是一个参考

电容谐振频率

电容值       DIP (MHz)      STM (MHz)

1.0μF                2.5                     5

0.1μF                 8                     16

0.01μF              25                     50

1000pF             80                    160

100 pF              250                   500

10 pF                800                1.6(GHz)

不过仅仅是参考而已,用老工程师的话说——主要靠经验。

更可靠的做法是将一大一小两个电容并联,

一般要求相差两个数量级以上,以获得更大的滤波频段。

一般来讲,大电容滤除低频波,小电容滤除高频波。电容值和你要滤除频率的平方成反比

具体电容的选择可以用公式C=4Pi*Pi  /(R * f * f )

电源滤波电容如何选取,掌握其精髓与方法,其实也不难。

1)理论上理想的电容其阻抗随频率的增加而减少(1/jwc),但由于电容两端引脚的电感效应

,这时电容应该看成是一个LC串连谐振电路,自谐振频率即器件的FSR参数,这表示频率大于

FSR值时,电容变成了一个电感,如果电容对地滤波,当频率超出FSR后,对干扰的抑制就大打

折扣,所以需要一个较小的电容并联对地,可以想想为什么?

原因在于小电容,SFR值大,对高频信号提供了一个对地通路,所以在电源滤波电路中我们常

常这样理解:大电容虑低频,小电容虑高频,根本的原因在于SFR(自谐振频率)值不同,当然也

可以想想为什么?如果从这个角度想,也就可以理解为什么电源滤波中电容对地脚为什么要

尽可能靠近地了.

2)那么在实际的设计中,我们常常会有疑问,我怎么知道电容的SFR是多少?就算我知道SFR值

,我如何选取不同SFR值的电容值呢?是选取一个电容还是两个电容?

电容的SFR值和电容值有关,和电容的引脚电感有关,所以相同容值的0402,0603,或直插式电

容的SFR值也不会相同,当然获取SFR值的途径有两个,1)器件Data sheet,如22pf0402电容的

SFR值在2G左右, 2)通过网络分析仪直接量测其自谐振频率,想想如何量测?S21?

知道了电容的SFR值后,用软件仿真,如RFsim99,选一个或两个电路在于你所供电电路的工作

频带是否有足够的噪声抑制比.仿真完后,那就是实际电路试验,如调试手机接收灵敏度时,

LNA的电源滤波是关键,好的电源滤波往往可以改善几个dB.

怎样计算磁环电感的饱和电流(转摘)


教程针对铁硅铝电感,其他电感也可触类旁通;
X宝上卖的大电流铁硅铝磁环电感,电流大多是虚标的。标称电流并不是饱和电流,只是根据导线线径估算出来的电流,根本不管磁环的死活。
其实制约电感电流的最大瓶颈在于磁芯,而不是绕线。而电感的饱和电流并没有严格的界限,是可以自己定义的,那么问题来了,学…(误)如何了解磁环的饱和电流呢?

首先要理解两个参数:安匝数 ,电感系数(至于怎么计算出来的,不用去知道),
安匝(A·T) 与磁环的磁场密度大小成正比,安匝数越大,电感储存的能量越多,电感系数(nH/T^2),代表一个电感的相对电感量,同一电感电流越大这个值越小,若电流不断增大,电感系数就会最终减小到0,这代表电感的绝对饱和,但要注意,要使电感绝对饱和的电流几乎是无限大,所以我们通常说的“饱和”是指“相对饱和”。随着电流的增大,电感量是一直缓慢下降的,不存在阶梯状,这就出现了某个电流对应某个感量的情况,所以在选择或制作电感时,一定要知道最小感量限制,留有余量(大电流时),打个比方,我需要的电感不能小于10uH,最大电流10A,那么选取电感的原则就是电流10A下仍然保有10uH的感量,如果用大磁环,那么原始电感量可能是12uH,但如果是小磁环,就可能要用20uH的电感了。大磁环和小磁环的区别就是绕线数量,以及你的应用允许电感量变化的范围。

说到这里,问题又了来,挖…(误)

如何计算呢?————————————————————————————–
进这个网站     铁硅铝磁环选型
看第一行,前三列是:外径,内径,高度  我们很容易就能找到自己想看的磁环大小啦(注意外面显示是喷涂前的尺寸,比实际小一点)
后面一堆都是磁导率,如果不是超过1Mhz的高频应用,我们只需要看125的,也就是最后一列,点进去,以77930A7为例,这就是X宝常见的27mm磁环

点进去下面的链接,弹出一个文档
不用看别的,只看最后一个图

纵轴是电感系数,横轴是安匝数
电感系数相关计算(单位nH),以上面电感为例,最大电感系数约157
1,由电感量算匝数,如需要22uh,乘以1000再除以157,再开方就是你要的匝数。
2,由匝数推算电感量,匝数平方*157/1000就是感量。
注意:以上是理想情况,或小电流,所以电感系数的取值是最大值。

重点是大电流应用:
157的电感系数可以说是电流趋近于0才有这么高,哪怕增加一点电流,系数就变小了,导致电感量减小。
留意图上50%和80%两条线,这两条线就是为了大电流应用而设的!
1,先以80%线来算,对应电感系数126,如果需要10uH,匝数是10000/126开方≈9
所以绕9砸,那么看看现在能过多少电流:80% 对应的安匝是87左右,87/9得到9.6A
那么9.6A代表电感饱和了吗?NO,是指电流达到9.6A的时候,感量恰好是10uH。所以,如果你的应用允许电感下降到8uH,那就请以8uH计算匝数。如果你的应用不允许电感下降到10uH以下,那9.6A就是这个电感的饱和电流,所以饱和电流只能是相对而言,不同应用就会有不同的界定。
回到该例子,绕了9的匝电感空载感量会是多少呢——9^2*157/1000=12.7uH,用仪器测出来的就是这个值。

2,以50%线来算,这个值可以最大限度地利用磁芯,但要用在对感量不敏感的地方如Buck或Boost,千万别用在谐振上。
图中对应系数约79,同样需要10uH的匝数是10000/79开方=11.25,这里出现小数,要进还是舍?可以先反向演算一下,若绕11匝,感量为11^2*79/1000=9.56uH,还是能接受的,所以定为11匝。50%对应安匝数为200,电流200/11≈18.2A 增大了近两倍,同一个磁环,只是匝数不同。
但是为了大电流,我们必须牺牲2样东西,一是初始电感量达到了11^2*157=19uH
二是铜线能不能绕得下,受这两样制约,所以一般不会用比50%更低的系数。

所以使用磁环时最好看图计算,不同的磁环尺寸有不同的曲线,不能一概而论。

下面看看X宝上那些畅销的铁硅铝环形电感(没有别的意思,我只是个工程师不是卖电感的)
案例1:标称 47uH 8A    用的17mm磁环  对应的美磁77120A7

电感系数最大值72,47uH需要的匝数是47000/72开方=25.5理论上需26匝 ,但X宝只有25匝(真够省的)。那么电流达到8A时电感变成多少了呢,8*25=200(安匝)等等!图上没有200啊卧槽!爆表了!(摔)要是真上8A电流不炸鸡才怪啊!
我们把电流减半,4A电流:安匝4*25=100 对应的电感系数44,那么感量变为25^2*44/1000=27.5uH  这就是现实!4A电流感量就下降了如此之多!
假如在应用中电感不得少于40uH,反推系数得64,对应安匝32,电流只有1.28A!多么可怜的电流啊,所以这种情况下,你应该买68uH或75uH而不是47uH。

案例2:标称68uH 28A  用27mm磁环,就是第一图
16uH对应的匝数68000/157开方=20匝   安匝20*28=560又爆表了(摔!)取一半14A,安匝280!卧槽QAQ还是爆表!所以说留多少余量木有底啊~亲们还是乖乖计算吧。
取个50%行了,安匝200,就是说电流只能到10A。
这个68uH的电感,电流到10A的时候感量已经减小了一半!想不炸鸡都难啊

电感的标称感量一定是空载测出来的,至于留多少余量,算算就知道了~
通过这个图可以帮助你了解电感在不同负载下的电感量变化,一般来说,对于DC-DC,推荐取50%的线来计算,这样会使电源满载时发热量大大减小。

另外,如果不是铁硅铝磁环,一定要找到对应磁芯的种类,网站应该都有。

PS:写这篇之前我看到的都是专业复杂的计算,列公式列一大堆,不要说小白了,我有基础都看不懂,直到看到这些图才恍然大悟,分享给DIYer们,共同进步吧

卡尔曼滤波以及MATLAB使用

卡尔曼滤波是一个很常用的滤波算法,与维纳滤波相比有很多长处。这里我们把Kalman Filter简称为KF。KF的基本思想是:采用信号、噪声、状态空间模型,利用前一时刻的状态最优估计值及其误差方差估计和现时刻的量测值来更新对状态变量的估计,求出现在时刻的最优估计值。

说白点就是对现在时刻的估计(可能是同时估计好几个变量)是取决于前一时刻估计误差和现在时刻的某个观测值。通过不断的预测和实测来修正自己的估计值,最后达到一个理想的平稳状态。

卡尔曼滤波的具体原理和推导过程,有点复杂。某些细节我也没弄明白,不过这并不影响我们写程序和使用它。如果你看了我写的这个小分享,表明你对卡尔曼滤波有一定的了解了,否则你也不会看这种玩意。如果真的不了解,那可以查找下相关资料。

卡尔曼滤波的5大公式:

这五个公式公式可要注意他们的下标了,下面我们从上至下依次说下这五个公式的意思

第一个公式就是说我们研究的变量在这一时刻与上一时刻的具体关系。那个Fai矩阵就是系数对应关系。可以看到这里就把卡尔曼滤波的使用范围限定在线性系统中了,基本的卡尔曼滤波器是不能用于非线性系统的。

第二个公式叫方差先验估计,说的这么文艺,其实就是计算估计值和实际值的方差大小,以评估现在的估计的误差是不是合适。

第三个公式叫增益矩阵,前面已经说过,卡尔曼滤波根据当前观测变量的变化趋势来估计一时刻变量的值,这个增益矩阵就是指我们定的这个变化的“度”的大小。

第四个就是求要估计的值了。

第五个是修正估计值与实际值的方差。

这5个公式是卡尔曼滤波的关键,下面就结合一个实例在说下卡尔曼滤波的程序如何写~交大的同学,如果你们选了最优估计这门课,然后看到这个,嘿嘿,便宜你们了。

应用:卡尔曼滤波在目标测量中的应用

某火箭在空中沿直线做匀加速飞行,加速度为  ,发动机推力的波动一定会引起加速度波动,雷达以间隔时间不断测量该火箭距离远点的距离  ,由于雷达的测量噪声使得火箭距离测量值   中含有噪声。现在欲通过雷达对火箭距离的测量数据求得火箭的真实距离、速度和加速度。

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %     设置初始化信息
  3. %  N:设置卡尔曼滤波器追踪点数
  4. %  r:设置估计变量个数,这里r=3
  5. %  s:被追踪的火箭的距离,初始值为1000m
  6. %  v:火箭的速度,初始值为50m/s
  7. %  a:火箭的加速度,初始值为20m/s2,此时加速度默认为不变
  8. %  T: 雷达的扫描间隔,此时设为1秒
  9. %  wt: 系统噪声,方差为20
  10. %  vt: 量测噪声,方差为16
  11. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  12. clear all;
  13. close all;
  14. N = 100;
  15. r = 3;
  16. t = 1:1:N;
  17. T = 1;
  18. s = zeros(1,N);
  19. v = zeros(1,N);
  20. a = zeros(1,N);
  21. a(t) = 20;
  22. s0 = 1000;
  23. v0 = 50;
  24. for n = 1:N
  25.     v(n) = v0 + a(n)*n;
  26.     s(n) = 1000+v0*n+0.5*a(n)*n*n;
  27. end
  28. wt = randn(1,N);
  29. wt = sqrt(4)*wt./std(wt);
  30. s = s + wt;
  31. v = v + wt;
  32. a(t) = a(t) + wt(t);
  33. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34. % 卡尔曼滤波部分,继承之前初始化变量
  35. % A:转移矩阵
  36. % H:量测矩阵
  37. % Qk:系统噪声矩阵
  38. % Rk:量测噪声矩阵
  39. % P0:均方误差矩阵初始值
  40. % Y:火箭的状态矩阵,由k_s,k_v,k_a组成
  41. % Y0:状态矩阵的初始值
  42. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  43. Y0 = [900 0 0]’;
  44. Y = [Y0 zeros(r,N-1)];
  45. A = [1 1 0;0 1 1;0 0 1];
  46. H = [1 0 0];
  47. Qk = [0 0 0;0 0 0;0 0 20];
  48. Rk = 16;
  49. P0 = [30 0 0;0 20 0;0 0 10];
  50. P1 = P0;
  51. P2 = zeros(r,r);
  52. for k = 1:N
  53.     Y(:,k) = A*Y(:,k);
  54.     P2 = A*P1*A’+Qk;
  55.     Kk = P2*H’*inv(H*P2*H’+Rk);
  56.     Y(:,k+1) = Y(:,k)+Kk*(s(:,k)-H*Y(:,k));
  57.     P1 = (eye(r,r)-Kk*H)*P2;
  58. end
  59. k_s = Y(1,:);
  60. k_v = Y(2,:);
  61. k_a = Y(3,:);
  62. subplot(3,1,1);
  63. plot(t,s(t),’-‘,t,k_s(t),’o’);
  64. title(‘距离’);
  65. legend(‘实际值’,’估计值’);
  66. xlabel(‘t’);
  67. ylabel(‘s’);
  68. subplot(3,1,2);
  69. plot(t,v(t),t,k_v(t),’+’);
  70. title(‘速度’);
  71. legend(‘实际值’,’估计值’);
  72. xlabel(‘t’);
  73. ylabel(‘v’);
  74. subplot(3,1,3);
  75. plot(t,a(t),t,k_a(t),’-x’);
  76. title(‘加速度’);
  77. legend(‘实际值’,’估计值’);
  78. xlabel(‘t’);
  79. ylabel(‘a’);
  80. axis([0,N,0,30]);

具体细节不讲了。运行后,就得到我们想要的结果了~

 

一个小总结,希望对你有帮助。

matlab取出示波器波形

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%% 读取ch1的数据
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 初始化变量。
filename_1 = ‘C:\Users\WANJI\Desktop\matlab\adc_test\ch2.txt’;
delimiter_1 = ‘\t’;

%% 每个文本行的格式字符串:
% 列1: 文本 (%s)
% 列2: 文本 (%s)
% 列3: 文本 (%s)
% 列4: 双精度值 (%f)
% 列5: 双精度值 (%f)
% 有关详细信息,请参阅 TEXTSCAN 文档。
formatSpec_1 = ‘%s%s%s%f%f%[^\n\r]’;

%% 打开文本文件。
fileID_1 = fopen(filename_1,’r’);

%% 根据格式字符串读取数据列。
% 该调用基于生成此代码所用的文件的结构。如果其他文件出现错误,请尝试通过导入工具重新生成代码。
dataArray_1 = textscan(fileID_1, formatSpec_1, ‘Delimiter’, delimiter_1, ‘ReturnOnError’, false);

%% 关闭文本文件。
fclose(fileID_1);

%% 将导入的数组分配给列变量名称
RecordLength_1 = dataArray_1{:, 1};
VarName2_1 = dataArray_1{:, 2};
Points_1 = dataArray_1{:, 3};
VarName4_1 = dataArray_1{:, 4};
VarName5_1 = dataArray_1{:, 5};

%% 清除临时变量
clearvars filename_1 delimiter_1 formatSpec_1 fileID_1 dataArray_1 ans_1;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%% 读取ch2的数据
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 初始化变量。
filename_2 = ‘C:\Users\WANJI\Desktop\matlab\adc_test\ch3.txt’;
delimiter_2 = ‘\t’;

%% 每个文本行的格式字符串:
% 列1: 文本 (%s)
% 列2: 文本 (%s)
% 列3: 文本 (%s)
% 列4: 双精度值 (%f)
% 列5: 双精度值 (%f)
% 有关详细信息,请参阅 TEXTSCAN 文档。
formatSpec_2 = ‘%s%s%s%f%f%[^\n\r]’;

%% 打开文本文件。
fileID_2 = fopen(filename_2,’r’);

%% 根据格式字符串读取数据列。
% 该调用基于生成此代码所用的文件的结构。如果其他文件出现错误,请尝试通过导入工具重新生成代码。
dataArray_2 = textscan(fileID_2, formatSpec_2, ‘Delimiter’, delimiter_2, ‘ReturnOnError’, false);

%% 关闭文本文件。
fclose(fileID_2);

%% 将导入的数组分配给列变量名称
RecordLength_2 = dataArray_2{:, 1};
VarName2_2 = dataArray_2{:, 2};
Points_2 = dataArray_2{:, 3};
VarName4_2 = dataArray_2{:, 4};
VarName5_2 = dataArray_2{:, 5};

%% 清除临时变量
clearvars filename_2 delimiter_2 formatSpec_2 fileID_2 dataArray_2 ans_2;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%% 数据处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Data = VarName5_1 + VarName5_2

%% 显示示波器文件
figure(1)
plot(VarName4_1,VarName5_1,’r’)
hold on
plot(VarName4_2,VarName5_2,’b’)
hold off

figure(3)
plot(VarName4_2,Data,’b’)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% fft
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fs = 2500000000

n=size(Data)
%f1=fft(VarName5_2, n)
f2=fft(Data)
mag=abs(f2)

figure(2)
plot(mag(1:n))