Reflect

Reflect

反射是引起SI的一个最基本因素,信号在传输线传播过程中,一旦它所感受到的传输线瞬时阻抗发生变化,那么就必将有发射发生。

反射是由于传输线瞬时阻抗变化而引起的

下面就从理论角度来分析一下反射的机理、反射系数和传输系数的计算

配个简易图来加以说明

图中褐色的为电路板上的大面积铺铜层(GND或者PWR),它是信号的返回路径。绿色和红色是传输线,S1比较宽,S2较窄,很明显在S1和S2的交接处出现了阻抗不连续,根据阻抗计算公式应该是Rs1<Rs2。那么信号传输到这里的时候,从反射的定义来看应该是发生了反射。

那么究竟有多少信号被反射了呢?又有多少信号通过了界面进入S2了呢?

这里就涉及到了反射的计算,即反射系数的计算和传输系数的计算

在交界面,虽然阻抗发生了变化,但是电压和电流一定都是连续的

这个结论一定要能理解,电压和电流不可能出现一个断裂

即在交界面的左边一点和右边一点,他们的电压和电流都是相等的

这里的一点点就像微积分中的那么一小点

在分界面的左边一点点S1中有:Rs1=V1/I1   (1)

在分界面的右边一点点S2中有:Rs2=V2/I2   (2)

其中的V1、V2分别为分界面两侧的电压,I1和I2为分界面两侧的电压

由上面的电压和电流连续性得知:V1=V2,I1=I2   (3)

分析上面的三组方程,如果没有反射,他们是不可能同时成立的

因为Rs1和Rs2是不相等的

所以可以判定在分界面必定存在反射回源端的信号

反射电压设为Vf,反射电流为If

进入S2的电压为Vt,电流为It(称他们为传输电压和传输电流)

信号电压为Vi,电流为Ii(称之为输入电压,从分界面看)

电压关系有:Vi+Vf=Vt

电流关系有:Ii-If=It

这又是很关键的两个关系式

因为Vi/Ii=Rs1

Vf/If=Rs1

Vt/It=Rs2

把这三个关系式代入到上面的两个电压和电流关系方程中可以得到

Vi/Rs1-Vf/Rs1=Vt/Rs2=(Vi+Vf)/Rs2

(Vi-Vf)/Rs1=(Vi+Vf)/Rs2反射系数X定义为反射电压和输入电压的比值,即Vf/Vi

可求的X=(Rs2-Rs1)/(Rs1+Rs2)

传输系数Y定义为传输电压和输入电压的比值,即Vt/Vi

经过X式小变形即可求得

可求的Y=2Rs2/(Rs1+Rs2)

反射是经常遇到的SI问题,我们只能无限地缩小它,却不能完全消除它,在波形能够接受的情况下尽量做到最大限度的抑制反射,这就是我们要做的工作。

最重要的就是匹配电阻的阻值确定,匹配的端接确定即采用何种匹配。源端串接和接收端并接的匹配方式是不一样的。

反射系数,即X=(Z2-Z1)/(Z1+Z2),Z1和Z2分别为传输线阻抗失配分界面前后的瞬时阻抗。

那么这就有3种情况

1.Z1=Z2,即阻抗相等,X=0,即没有反射

2.Z2=无穷大,X=1,即完全正反射,很多接收端的情况

3.Z2=0,X=-1,即完全负反射,末端短路了,接地了,阻抗为0,反射信号即可以理解为返回路径上的回流

源端串联电阻R,和驱动端的源电阻R0,串联后的总电阻R+R0,总电阻值等于或者最接近传输线阻抗Z。那么这时候信号分压,真正进入传输线上传播的只有源信号电压的一半,到接收端时,由于接收端阻抗为无穷大,发生反射,反射系数为1,传输系数Y=2,即进入接收端的信号又等于驱动端的信号了。而返回源端的信号因为阻抗没有变化,到源端时被源电阻和串联匹配电阻吸收了,不再发生反射,这是理想情况。

究竟多大的反射才会引起我们的注意呢?什么样的情况下才需要作阻抗匹配呢?下面就来探讨一下:

我们在SigXplorer中搭建一个简易的Point-Point拓扑结构,开始时对驱动端的源电阻不得而知,使用理想传输线,特征阻抗为50ohm,传输延时为0.1ns,未加任何阻抗匹配元件,仿真频率选择50Mhz

下面来看一下仿真波形,从图示中的放大部分可以看到驱动端和源端都有明显的振铃存在,并且过冲比较大

从上面的仿真结果看,源端内阻抗和传输线阻抗不匹配的确造成的反射,产生了过冲并生成了振铃,这时我们就猜想这一切的产生是否和传输线的长度有关系呢?下面修改传输线延时为0.01ns

仿真频率仍然为50Mhz,看下仿真波形,惊讶地看到那些毛刺不见了,接收端和驱动端的波形接近重合,似乎没有发生一点变形。到这里有人也许会下这样的结论,传输线足够短的时候,就不发生反射了。那么这种论断正确么?从反射的经典理论来看这个论断是不正确的,因为理论中提到:只要信号探测到的阻抗发生变化,那么就会发生反射。理论和我们实际从表面上看似乎是发生了冲突,那么究竟是什么原因呢。我们接下来继续分析...

先不急着下结论,按照反射的经典理论为指导依据来处理反射问题,把传输线的延时改为1ns,在源端添加串联电阻,阻值为0~50ohm,10ohm为步进进行扫描仿真。

红色波形所对应的串阻阻值为0ohm,往下依次递增,从接收端波形上看,这组取值中40ohm所对应的波形要好于其他波形

将40ohm对应的波形取出来单独分析,从波形上看,接收端的波形比较好,而驱动端的波形有一个明显的阶梯状,形成这个阶梯状的原因是什么呢?

为了便于分析驱动端波形发生了阶梯状,我们换一种仿真工具Hyperlynx,它可以设置探针测试点,更方便我们分析问题。我们在拓扑结构上选择了4个测试点,其中红色和紫色箭头所指的波形应该是完全一致的,主要就是想看一下黄色箭头处的波形和接收端的波形之间的关系。

仿真频率为50Mhz,传输线特征阻抗为60ohm,传输延时为1ns,仿真波形如下。青色波形呈现出明显的半阶梯形状,图中看到阶梯维持在0.9V位置大约2ns左右,因为源端必须等待接收端的反射波回来后才能达到满摆幅电压,等待的时间是2倍的传输延时(1ns)。

相对于信号上升时间,传输延时越长,这里的阶梯持续时间就越久。如下图所示:

接下来分析一下这里的几个波形,青色和紫色波形都出现了阶梯。我们可能会有一个很不解的地方,就是为什么紫色波形出现的阶梯那么的不可捉摸,有点怪怪的,其实它和青色波形产生的机理是一样,而我们在SiXplorer中仿真,然后在Sigwave中看到的波形就是这里的紫色和黄色波形,没有青色波形。所以习惯使用SQ的同志对驱动端波形出现的阶梯可能会有不解的情况,在这里应该至少有一个感性的认识。

我们假定这里的驱动端源电阻和串联电阻之和等于传输线的阻抗,那么信号传播到串阻和传输线的分界点处,首先感受到的阻抗没有变化,没有发生反射,但是要分压,真正进入传输线的电压为信号电压的一半(串联分压),注意这里说的是信号电压,而不是驱动端的电压,这两者还是有区别的。

驱动端的等效电路如下:

其中R0是驱动端的内阻,这里的A点才是信号电压,B点其实是驱动端的输出电压,而仿真出现的不可捉摸的阶梯波形其实是B点的波形,形成机理和黄色波形一样,但由于源电阻较小,所以此处的分压(即紫色波形的阶梯处电压)应该为

V=Vi*(Rs+Z0)/(R0+Rs+Z0)    其中Vi为信号电压,R0为源内阻,Rs为串联电阻,Z0为传输线阻抗

代入值计算的V=1.8×(60+38)/(22+60+38)=1.47V,与仿真波形基本吻合。

Reflect,布布扣,bubuko.com

时间: 2024-10-10 01:50:29

Reflect的相关文章

java.lang.reflect操作对象属性(域)的值

import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /*2015-10-28*/ public class RefactorDemo { /** * @param args * @throws NoSuchFieldException * @throws SecurityException * @throws Ill

js-ES6学习笔记-Reflect

1.Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API.Reflect对象的设计目的有这样几个. 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上. 修改某些Object方法的返回结果,让其变得更合理.比如,Object.defineProperty(obj, name, desc)在无法定义属性时,会抛出一个错误,而Reflect.defineProperty(obj, name, de

Swift缩水版MJExtension - Reflect的基本使用

github:https://github.com/CharlinFeng/Reflect 直接拖拽Reflect文件夹到您的项目中即可,无任何第三方依赖!文件夹结构说明:.Coding 归档相关.Reflect 反射核心包.Dict2Model 字典转模型.Model2Dict 模型转字典 这里使用plist作为数据源, plist存储的是一个数组, 数组中存储的是字典 plist的结构如下: 将plist数组中的每一个字典转换为模型, 代码如下: RPTableViewController.

自己写一个java.lang.reflect.Proxy代理的实现

前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口.代理内容,生成代理. 抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好的,写一遍和看一遍真的是两个不同的概念,写一遍既加深了对于这些类的理解.提升了自己的写代码水平,也可以在写完之后对比一下自己的实现有哪些写得不好

利用java.lang.reflect.Constructor动态实例化对象

1 public class Student { 2     private String name; 3     private Integer age; 4     private Student(String name,Integer age){ 5         this.name=name; 6         this.age=age; 7     } 8     public String getName() { 9         return name;10     }11 

关于java reflect

反射的基石 Class类 对比提问: Person类代表人,它的实例对象就是张三,李四这样一个个具体的人, Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class.对比提问:众多的人用一个什么类表示?众多的Java类用一个什么类表示? 人 Person Java类 Class Class类代表Java类,它的各个实例对象又分别对应什么呢? 对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等. 一个类被类加载器加载到内存中,

Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWo

1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help | start | stop } 2014-7-12 14:19:28 org.apache.catalina.core.AprLifecycleListener init 信息: Loaded APR based Apache Tomcat Native library 1.1.29 using

sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class异常解决方法

package com.wzs; import java.lang.reflect.ParameterizedType; public class T1<T> {     private Class classt;     public T1() {         ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();         this.classt = (Class)

GO_09:GO语言基础之reflect反射

反射reflection 1. 反射可以大大的提高程序的灵活性,使得 interface{} 有更大的发挥余地 2. 反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息 3. 反射会将匿名字段作为独立字段(匿名字段本质) 4. 想要利用反射修改对象状态,前提是 interface.data 是 settable,即 pointer-interface 5. 通过反射可以"动态"调用方法 示例一: 举例说明反射使用 TypeOf 和 ValueOf 来取得传入类型的