本文讨论如何在LTspice 模拟中使用flat()、gauss() 和mc() 函数生成伪随机数和真随机数,并介绍如何使用设置面板Hacks 部分中的Use the Clock to reseed the MC Generator 选项。本文探讨了伪随机数和真随机数之间的权衡,并比较了蒙特卡罗统计模拟和更有针对性的最坏情况模拟之间的差异。
有多种方法可以在LTspice 原理图中模拟随机性。 LTspice 中的flat()、gauss() 和mc() 函数支持在LTspice 模拟中引入随机性。本文以mc() 函数为例,说明如何模拟无源元件值的容差。打开LTspice后,选择Help LTspice帮助(“帮助”“LTspice帮助”,或按F1)打开《帮助手册》,了解有关flat()和gauss()的更多信息。
图1中的示例使用mc()来设置R1和C1的标称值和公差。例如,R1 的标称值为10 k,容差为5%。 mc(x,y) 函数将生成在x*(1-y) 和x*(1+y) 之间均匀分布的伪随机数。请继续阅读以了解有关伪随机数和真随机数之间的差异以及如何强制LTspice 生成真随机数的更多信息。STEP 指令用于指示LTspice 运行仿真的迭代次数。在下面的示例中,STEP 指令以1 为增量将虚拟参数从1 步进到100,从而导致100 次仿真运行,其中R1 和C1 的值是随机生成的。
图1. RC 电路使用mc() 来设置无源元件的值和容差
观察每次迭代时mc() 函数的行为:图2 显示了一个仅使用电压源的简单示例。此示例使用mc() 将标称电压设置为10 V,并将容差设置为100%。因此,预计电压在0 V 和20 V 之间均匀分布。从波形查看器和SPICE 输出日志中的结果可以看出,在10 次迭代中,电压变化范围为2.7 V 到19.92 V。分布并不完全均匀,但更多迭代将有助于确保结果在统计上更加合理。
图2. 电压源使用mc() 生成随机电压
让我们仔细看看并重复运行模拟。在这些模拟过程中,这些值有变化吗?在我的计算机上,每次运行模拟时,每次迭代都会得到相同的电压值。这也能叫“随机”吗?
您所看到的是生成随机数时代码和计算机的典型行为。编程语言中的随机数生成器有一个与之关联的可选seed()方法。要获得真正的随机数(即每次运行程序时获得不同的随机数),需要调用seed()方法并指定一个动态变化的种子值。通常,程序员会将当前系统时间传递给seed()方法来实现这种随机性。
这与我们的LTspice 模拟有何关系?如果您希望每次运行模拟时获得不同的随机值,则必须在设置面板的Hacks 部分中启用使用时钟重新播种MC 生成器选项(参见图3)。
图3. LTspice 设置面板的Hacks 选项卡,显示如何实现真正的随机性
使用时钟重新设定MC 生成器选项也适用于flat() 和gauss() 函数。这些函数可以用在使用mc() 的地方。
但是,请仔细考虑是否需要有意实现这种模拟行为。您希望您的模拟真正随机吗?如果是这样,您的模拟将失去可预测性和可重复性。
为了说明这一点,让我们回顾一下图2 中的示例。如果目标是模拟均匀分布在0 V 和20 V 之间的电压怎么办?当前的示例并没有完全达到预期。然而,通过将迭代次数从10 增加到100,我们可以使模拟结果更接近目标(图4)。这种调整使模拟更接近预期的分布范围。
图4. 使用mc() 进行多次迭代的电压源
现在有两点很清楚:(a) 迭代运行mc() 100 次将得到一个相当好的数值分布; (b) 如果您不启用重新种子MC 生成器功能,则每次运行模拟时都会得到可重复的结果。
如果电路中很多地方都使用了mc()怎么办?是否保证通过100 次迭代能够覆盖所有公差?图5 说明了这种尝试,其中显示了使用mc() 的两个电压源。将V(out1)绘制为y轴,V(out2)绘制为x轴,可以清楚地看到V1和V2的组合呈现出高度随机的坐标分布(右键单击x轴标题,将x轴从步骤虚拟参数更改为V(out2))。但从技术上来说,这些电压的最小值和最大值并不是同时达到的,导致对极端(角)情况的覆盖有些不足。
图5. 绘制一次仿真中两个mc() 电压的结果
如果目标接近完全覆盖,则需要更多迭代(图6)。
图6. 绘制更多迭代的结果
对于这个简单的示例,模拟运行得相当快,可以运行1,000 次而不会出现任何问题。但是,如果模拟运行时间很长,需要数小时或数天才能运行多次迭代,该怎么办?您应该考虑启用使用时钟重新设定MC 生成器选项是否有帮助。如果mc() 生成的值在一次模拟运行中令人满意,那么目标是使这些结果在每次运行中都可重复,还是随机变化?在启用此功能之前,这是一个需要考虑的好问题。
为了显着减少模拟时间,让我们看看一种不太随机的方法。
图7 中所示的示例可确保仿真涵盖无源元件容差的所有边缘情况,同时保持整体仿真时间尽可能短。本示例迭代R1 的三个值和C1 的三个值,执行九次模拟并涵盖组件值同时达到最小值(或最大值)的情况。
图7. 为组件设置特定值以模拟因公差而导致的行为
如果目标是探索极端工作条件下电路的行为,那么随机性较低的方法可能更合适。相反,如果目标是对一系列变化下的模拟行为进行统计分析,那么使用大量模拟并通过随机函数引入随机性可能是更好的方法。但无论哪种情况,您现在应该更好地了解如何在LTspice 模拟中引入(或不引入)随机性。
标题:如何在LTspice仿真中实现伪随机数和真随机数的生成
链接:https://yqqlyw.com/news/sypc/68681.html
版权:文章转载自网络,如有侵权,请联系删除!