番外13:使用ADS进行容差分析(蒙特卡洛分析、灵敏度分析、良率分析、良率优化),以带通滤波器设计为例

news2025/1/13 10:15:11

番外13:使用ADS进行容差分析(蒙特卡洛分析、灵敏度分析、良率分析、良率优化),以带通滤波器设计为例

资源下载

https://download.csdn.net/download/weixin_44584198/88210327

技术背景

容差分析是当前电子可靠性设计中最先进的技术之一,代表着电子可靠性设计的一个重要发展方向。蒙特卡洛分析是容差分析的一个主要技术。它是分析电路器件在误差情况下,电路性能会不会超过电路性能的规格要求。

简单来说,电路里面的大部分器件器件,比如说电容电阻都会有一定的的误差(比如说5%),但是这些误差的组合会对最终的性能产生怎样的影响呢?众所周知,这是一个小概率问题,但对于成批次、成产量出货的产品,这样的误差是需要被专门分析的,一般大公司或者质量要求高的产品在设计时都会被要求做容差分析,在此介绍使用ADS进行容差分析的方法。

1、设计指标

假设在此我们需要设计一个带通滤波器,滤波器的主要性能指标如下所示:
截止频率1:8MHz
通带1:9.5MHz
通带2:10.5MHz
截止频率2:12MHz
通带波纹:<0.5dB
阻带衰减:>20dB

假设设计使用的集总参数元器件的误差为5%,事实上对于大多数常见的贴片器件,这个5%的误差是非常合理的。

2、带通滤波器设计

先按照要求设计一个带通滤波器,新建原理图并命名为BasicFilter,在库中找到Filter DG - ALL选项并打开:
在这里插入图片描述
找到其中的带通滤波器设计模组并插入到原理图中(DT):
在这里插入图片描述
对于插入后的元器件,合理设置其参数,具体要求按照上面的设计指标来就行:
在这里插入图片描述
插入相关的仿真控件,主要是S参数控件,并设置其仿真频率:
在这里插入图片描述
在菜单栏选中DesginGuide,找到Filter选项并打开:
在这里插入图片描述
选择第一个Filter Control Window选项,点击OK:
在这里插入图片描述
选择第二个选项卡Filter Assistant(默认打开时Overview),点击Design按钮即可:
在这里插入图片描述
等待几秒钟后,设计就完成了,虽然表面看不出啥,但是点击按钮深入到器件中查看:
在这里插入图片描述在这里插入图片描述
可以发现电路中已经存在相关的电阻电容了:
在这里插入图片描述
回到上一层点击仿真按钮,可以看到理想情况下的仿真结果如下,性能好像不错:
在这里插入图片描述

3、容差分析(此处使用蒙特卡洛分析)

新建一个原理图,命名为MonteCarlo_Filter,将之前设计好的电路放进去并插入相关的S参数控件:
在这里插入图片描述
从Optim/Stat/DOE选项中寻找相关的仿真控件(MC,蒙特卡洛缩写),插入后需要设置蒙特卡洛控件的相关参数,如下所示:

在这里插入图片描述在这里插入图片描述
其中Numlter设置成了100,代表一共分析100次,在开始仿真之前,还需要设置器件的误差范围,双击器件并点击Tune/Opt/Stat/DOE Setup按钮:
在这里插入图片描述
使能Stattistics并设置误差5%:
在这里插入图片描述
设置完成后点击仿真,查看结果,可见器件误差对电路的最终性能影响较大,频率偏移、匹配性能波动,但是图中看不太清除具体性能:
在这里插入图片描述
构建如下的观察视窗,观察10MHz时的S11和S21性能,发现蒙特卡洛分析表示在第33次和第74次实验中性能较差,在此时10MHz时的S11大于-1dB,S21小于-6dB,电路功能几乎完全丧失了:
在这里插入图片描述
移动鼠标滑钮,查看第33次实验结果和其对应的电阻电容的数值:
在这里插入图片描述
可见电路性能在实际的大规模生产时可能问题很大。

4、良率分析与良率优化

从Optim/Stat/DOE选项中寻找相关的仿真控件(YIELD SPEC和YIELD控件),注意到注释掉原来的蒙特卡洛分析控件,还要合理的设置YIELD SPEC和YIELD控件的数值,观察下面的YIELD SPEC控件,此处设置为在9.96MHz到10.1MHz处S11小于-10dB的器件为良好器件,实际上这个要求已经非常低了:
在这里插入图片描述
运行仿真,可见在器件误差5%的情况下,整个带通滤波器的良率为20%。这是非常恐怖的,因此在实际设计时应该充分留有余量,比如说我上面的指标,如果将通带范围设置为8MHz到12MHz,器件的S11良率性能可能要好不少:
在这里插入图片描述
下面进行良率的优化,从Optim/Stat/DOE选项中寻找相关的仿真控件(YIELD ORTIM…控件),插入后如下所示,可见设置的良率的优化次数为100:
在这里插入图片描述
在运行良率优化前,需要设置器件Optim,在此设置器件的优化范围为50%:
在这里插入图片描述
点击仿真运行良率优化,值得注意的是,每次运行良率测试得到的结果可能并不一致,因为实际上这是一种随机实验而已,最终得到的结果,可见初始的良率为12.8%,优化后为27%,这边看似误差比较大,实际上可以通过增大实验次数使其收敛,但是这样运行比较慢,在此就不专门演示了:
在这里插入图片描述
对于优化后的结果,可以在Simulation中的相关选项进行更新,如下所示:
在这里插入图片描述

5、灵敏度分析

注释掉良率分析相关的控件,从Optim/Stat/DOE选项中寻找相关的灵敏度分析控件,插入和如下所示:
在这里插入图片描述
其中Goal需要专门设置,此处测量的是电路在10MHz时S11<-10dB要求下的灵敏度,运行仿真:
在这里插入图片描述
可见C1、C3、L1、L3对电路的S11性能贡献较大。

6、结论

设计时留有余量,确保万无一失!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/870013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker安装ElasticSearch/ES 7.4.0

目录 前言安装ElasticSearch/ES安装步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 安装步骤2&#xff1a;拉取ElasticSearch镜像1 拉取镜像2 查看已拉取的镜像 安装步骤3&#xff1a;创建容器创建容器方…

nodejs+vue+elementui多媒体素材管理系统

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 多媒体素材管理系统的设计与实现&#xff0c;最主要的是满足使用者的使用需求&#xff0c;并且可以向使用者提供一些与系统配套的服务。…

SpringMVC 的基本概念(一)

1.1 关于三层架构和 MVC 1.1.1 三层架构 我们的开发架构一般都是基于两种形式&#xff0c;一种是 C/S 架构&#xff0c;也就是客户端 / 服务器&#xff0c;另一种是 B/S 架构&#xff0c;也就 是浏览器服务器。在 JavaEE 开发中&#xff0c;几乎全都是基于 B/S 架构…

图像处理技巧形态学滤波之膨胀操作

1. 引言 欢迎回来&#xff0c;我的图像处理爱好者们&#xff01;今天&#xff0c;让我们继续研究图像处理领域中的形态学计算。在本篇中&#xff0c;我们将重点介绍腐蚀操作的反向效果膨胀操作。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 膨胀操作原理 膨胀操作…

C语言 二级指针和多级指针

什么是二级指针&#xff1f; 假设&#xff1a; int a 10;int * p &a;如上&#xff0c;p是指针变量&#xff0c;寄存的是a的地址&#xff0c;指向的是元素a 那么&#xff0c;指针变量p有地址吗&#xff1f;指针变量p的指针指向的是&#xff1f; int * * pp &p; …

《系统架构设计师教程》重点章节思维导图

内容来自《系统架构设计师教程》&#xff0c;筛选系统架构设计师考试中分值重点分布的章节&#xff0c;根据章节的内容整理出相关思维导图。 重点章节 第2章&#xff1a;计算机系统知识第5章&#xff1a;软件工程基础知识第7章&#xff1a;系统架构设计基础知识第8章&#xff1…

数据结构——单链表的实现(c语言版)

前言 单链表作为顺序表的一种&#xff0c;了解并且熟悉它的结构对于我们学习更加复杂的数据结构是有一定意义的。虽然单链表有一定的缺陷&#xff0c;但是单链表也有它存在的价值&#xff0c; 它也是作为其他数据结构的一部分出现的&#xff0c;比如在图&#xff0c;哈希表中。…

JZ32 从上往下打印二叉树(Java)

题目地址&#xff1a;从上往下打印二叉树_牛客题霸_牛客网 题目回顾&#xff1a; 不分行从上往下打印出二叉树的每个节点&#xff0c;同层节点从左至右打印。例如输入{8,6,10,#,#,2,1}&#xff0c;如以下图中的示例二叉树&#xff0c;则依次打印8,6,10,2,1(空节点不打印&…

keil下载程序具体过程2:硬件链路

引言 本篇博客将介绍keil下载程序的过程中&#xff0c;镜像文件将经过哪些硬件&#xff0c;以及简单的介绍他们之间的协议。 一、硬件连接 图1 硬件连接 将PC、jlink、芯片使用ubs线、swd线连接好之后&#xff0c;在PC上的keil软件中&#xff0c;我们选择对应的仿真器&#xf…

滤波器必须掌握的关键知识

一个理想滤波器应该是在通频带内具有均匀且稳定的增益&#xff0c;对信号的其余频带则具有无穷大的衰减。然后&#xff0c;各种实际的频率响应曲线从阻带或从通带到阻带总有一个逐渐过渡的过程&#xff0c;距离理想情况有一定距离&#xff0c;不像其那样跳跃变化&#xff0c;因…

大O表示法表示算法运行时间

大O表示法用来度量一个算法的运行时间。书写为O(n)&#xff0c;其中n为一个算法所执行的操作次数。当我们讨论算法的运行时间时&#xff0c;说的是一个算法在给定的输入列表增加的情况下算法执行操作数的增速&#xff0c;也就是运行时间的增速。 二分查找算法 下面介绍两种简…

Matlab的Filter Designer工具设计二阶低通滤波器

Matlab版本&#xff1a;2018b 本文要求&#xff1a;设计一个二阶巴特沃斯低通滤波器用于嵌入式软件滤波&#xff0c;传感器采样频率是20KHz&#xff0c;截止频率是333Hz&#xff0c;获取滤波系数&#xff0c;本文不包括二阶滤波推导和代码编写。 打开Matlab->APP->Filt…

多线程中常见的成员方法

1.常见的成员方法 如果没有给线程设置名字&#xff0c;线程也是有默认名字的&#xff0c;格式&#xff1a; Thread-X&#xff08;X序号&#xff0c;从0开始的&#xff09; 2.创建名字的线程构造 用构造方法给线程设置名字 当JVM虚拟机启动之后&#xff0c;会自动的启动多条…

shell脚本开发

shell脚本语言属于弱类型的语言&#xff0c;无需声明变量类型&#xff0c;直接定义使用 shell语言定义的变量&#xff0c;数据类型默认都是字符串类型 调用历史记录命令&#xff1a;&#xff01; 历史记录id

ipconfig显示的内容分析(二)子网掩码

在cmd中输入ipconfig&#xff0c;经常会看到子网掩码。如下&#xff1a; 子网掩码225.225.225.0的二进制数是[1111 1111].[1111 1111].[1111 1111].[0000 0000]。 子网掩码225.225.224.0的二进制数是[1111 1111].[1111 1111].[1111 1110].[0000 0000]。 子网掩码的作用是什么…

C语言 ——函数指针变量

1、概念&#xff1a; 数组指针 - 是指针-是指向数组的指针&#xff0c;是存放数组地址的指针 函数指针 - 是指针 是指向函数的指针 - 是存放函数地址的指针!! 如上所示&#xff0c;函数也是具有地址的&#xff0c;而存放函数地址的指针变量成为函数指针变量。 而有如上所示&a…

奇舞周刊第502期:CSS 的 will-change,为什么有时候能优化几十倍的性能?

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ CSS 的 will-change&#xff0c;为什么有时候能优化几十倍的性能&#xff1f; will-change 一个既陌生又熟悉的属性&#xff0c;以前在使用这个属性的时候&#xff0c;单纯是因为要…

VS Code中C++程序的调试(Debug)功能

有一个.vscode文件&#xff0c;存放当前工作区相关配置文件的目录。 launch.json {"version": "0.2.0","configurations": [{"name": "gcc.exe - 生成和调试活动文件", // 该调试任务的名字&#xff0c;启动调试时会在待…

智能优化算法:猎豹优化算法-附代码

智能优化算法&#xff1a;猎豹优化算法 文章目录 智能优化算法&#xff1a;猎豹优化算法1.猎豹优化算法1.1 初始化1.2 搜索策略1.3坐等策略1.4攻击策略 2.实验结果3.参考文献4.Matlab5.python 摘要&#xff1a;CO算法是Mohammad AminAkbari等人于2022年受自然界猎豹狩猎启发而提…

linux学习(进程管理)[8]

创建进程 myproc.c #include <stdio.h> #include <unistd.h>int main() {printf("我是父进程\n");pid_t id fork();if(id < 0){printf("创建子进程失败\n");return 1;}else if(id 0){while(1){printf("我是子进程&#xff1a; pid…