0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在LTspice仿真中实现伪随机数和真随机数的生成

ADI智库 来源:ADI智库 2026-01-09 14:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文讨论如何在LTspice仿真中利用flat()、gauss()和mc()函数来实现伪随机数和真随机数的生成,并介绍如何使用设置面板的Hacks部分中的Use the clock to reseed the MC generator(使用时钟重新设置MC生成器的随机种子)选项。文章探讨了伪随机数和真随机数之间的利弊权衡,同时比较了蒙特卡罗统计仿真与更有针对性的最坏情况仿真之间的差异。

在LTspice原理图中,有多种方法可模拟随机性。LTspice中的flat()、gauss()和mc()函数支持在LTspice仿真中引入随机性。本文以mc()函数为例,说明如何模拟无源元件值的容差。打开LTspice 后,选择Help > LTspice Help(“帮助”>“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的值都是随机生成。

f7628542-eab5-11f0-92de-92fbcf53809c.png

图1. RC电路使用mc()来设置无源元件的值和容差

观察mc()函数在每一步迭代中的行为:图2显示了一个仅使用电压源的简单示例。此示例使用mc()将标称电压设置为10 V,并将容差设置为100%。因此,预计将得到一个在0 V和20 V之间均匀分布的电压。从波形查看器和SPICE输出日志中的结果可以看到,在10次迭代中,电压变化范围是2.7 V至19.92 V,分布并不完全均匀,但更多次迭代将有助于确保结果在统计上更加合理。

f7cb9dde-eab5-11f0-92de-92fbcf53809c.png

图2. 电压源使用mc()生成随机电压

我们不妨更仔细地观察,并反复运行这个仿真。在这些仿真过程中,数值是否发生了变化?在我的计算机上,每次运行仿真时,每一步迭代都得到相同的电压值。这称得上“随机”吗?

您所看到的是代码和计算机在生成随机数时的典型表现。编程语言中的随机数生成器有一个与之关联的可选seed()方法。想要获得真随机数(即每次运行程序时得到不同的随机数),需要调用seed()方法,并为其指定动态变化的种子值。通常,程序员会将当前系统时间传递给seed()方法来实现这种随机性。

这与我们的LTspice仿真有何关系?如果希望每次运行仿真时获得不同的随机值,则必须在设置面板的Hacks部分中启用Use the clock to reseed the MC generator选项(参见图3)。

f833d9a8-eab5-11f0-92de-92fbcf53809c.png

图3. LTspice设置面板的Hacks选项卡,显示了如何实现真随机性

此Use the clock to reseed the MC generator选项也适用于flat()和gauss()函数。这些函数可以用在mc()所使用的地方。

不过,请慎重考虑否是需要刻意实现这种仿真行为。您希望仿真过程是真随机的吗?倘若如此,您的仿真将失去可预测性和可重复性。

为了说明这一点,让我们回顾图2中的示例。如果目标是模拟一个在0 V和20 V之间均匀分布的电压呢?当前的示例不太符合预期。然而,通过将迭代次数从10次增加到100次,我们可以使仿真结果更接近目标(图4)。这种调整使得仿真更接近实现预期的分布范围。

f89af340-eab5-11f0-92de-92fbcf53809c.png

图4. 使用mc()且迭代更多次数的电压源

现在有两点已经很明确:(a)mc()迭代运行100次,便能得到一个相当好的数值分布;(b)如果不启用reseed the MC generator(重新设置MC生成器的随机种子)功能,则每次运行仿真将得到可重复的结果。

如果电路中多处使用mc()呢?能否保证通过100次迭代能够覆盖所有容差?图5展现了这一尝试,其中显示了两个使用mc()的电压源。将V(out1)作为y轴、V(out2)作为x轴进行绘图,可以清楚地看到,V1和V2的组合呈现出高度随机的坐标分布(右键单击x轴标题,将x轴从步进虚拟参数更改为V(out2))。但从技术上讲,这些电压的最小值和最大值并非同时达到,导致极端(角落)情况的覆盖有些不足。

f9a0bb62-eab5-11f0-92de-92fbcf53809c.png

图5. 绘制一次仿真中两个mc()电压的结果

如果目标是接近完全覆盖,则需要更多次迭代(图6)。

fa0b850a-eab5-11f0-92de-92fbcf53809c.png

图6. 绘制更多次迭代的结果

对于这个简单的例子,仿真运行速度相当快,即便运行1000次也毫无问题。但如果仿真运行时间很长,运行多次迭代需要数小时或数天时间呢?应考虑启用Use the clock to reseed the MC generator选项是否有帮助。如果在一次仿真运行中,mc()生成的值令人满意,那么接下来的目标是让这些结果在每次运行时可重复,还是随机变化呢?启用此项功能之前,这是一个值得考虑的好问题。

为了大幅缩短仿真时间,我们来看一种相对不太随机的方法。

图7所示的例子确保了仿真能够覆盖无源元件容差的所有边缘情况,同时保持总体仿真时间尽可能短。这个例子遍历了R1的三个值和C1的三个值,进行了九次仿真,并覆盖了元件值同时达到最小值(或最大值)的情形。

fa856398-eab5-11f0-92de-92fbcf53809c.png

图7. 设置元件的特定值以模拟容差导致的行为

如果目标是探索电路在极端工况下的行为,则相对不太随机的方法可能更为合适。相反,如果目标是对仿真在一系列变化下的行为进行统计分析,则使用大量仿真并通过随机函数引入随机性可能是更好的方法。但无论哪种情况,您现在应该已经对如何在LTspice仿真中引入(或不引入)随机性有了更好的理解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    55

    文章

    4567

    浏览量

    138813
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    68034
  • 随机数
    +关注

    关注

    0

    文章

    20

    浏览量

    12304
  • LTspice
    +关注

    关注

    2

    文章

    133

    浏览量

    14701

原文标题:LTspice中的随机数是真随机数吗?

文章出处:【微信号:ADI智库,微信公众号:ADI智库】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问LTspice中能否支持随机数函数如何实现

    想在LTspice仿真中,把一个参数(比如电容值)设计为一个变量,这个变量在一定的范围内是一个随机数。如电容C的值为[20n,30n]之间的一个随机数。产生100个点,且这100个点服
    发表于 09-25 17:00

    关于STM32随机数算法的问题

    rand是随机数随机数配合定时器time()计算产生随机数,但是如果我想上电初始化的时候要产生一个
    发表于 11-13 10:12

    什么是随机数

    做开发的工程师们应该或多或少都接触过随机数,可能认为它就是一个随机生成的数字嘛,使用时也很简单,只要调用开发语言提供的函数即可。但实际上随机数后面还是有着比较复杂但也有趣的知识点的。根
    发表于 07-22 09:42

    C语言中随机数的产生及性能检验

    系统仿真或加密算法中常需要产生满足一定分布函数的 随机数 ,高级程序设计语言中的库函数采用线性同余法产生一个在[0,32767] 服从均匀分布的
    发表于 07-07 16:35 70次下载

    神经网络的随机数生成方法

    的输入输出,改善了混沌退化对随机数的性能影响,同时,通过与Logistic映射所生成随机序列和可变参数进行异或处理,有效避免了生成序列的重复出现,扩大了密钥空间和输出序列的周期。以新
    发表于 02-02 15:49 0次下载

    随机数生成算法

    在计算机上用数学的方法产生随机数列是目前通用的方法,它的特点是占用的内存少,速度快.用数学方法产生的随机数列是根据确定的算法推算出来的,严格说来并不是随机的,因此一般称用数学方法产生的随机数
    发表于 04-03 10:25 6次下载

    何在C语言中使用随机数

    通常情况下,使用最多的方法的就是使用rand函数随机生成随机数来完成随机数生成工作。注意这里
    的头像 发表于 11-09 16:46 5976次阅读

    如何使用随机数生成器来生成私钥

    ,尤其重要。 说到随机,有两个必须要搞清楚的概念:“随机数生成器”(TRNG)和
    发表于 03-18 10:40 5891次阅读
    如何使用<b class='flag-5'>随机数</b><b class='flag-5'>生成</b>器来<b class='flag-5'>生成</b>私钥

    DApp的随机数为什么会被黑客破解

    随机数可以分为随机数随机数随机数需要同时满
    发表于 10-18 10:59 3179次阅读

    如何利用SystemVerilog仿真生成随机数

    采用SystemVerilog进行仿真则更容易生成随机数,而且对随机数具有更强的可控性。对于随机变量,在SystemVerilog中可通过r
    的头像 发表于 10-30 10:33 1.3w次阅读
    如何利用SystemVerilog<b class='flag-5'>仿真</b><b class='flag-5'>生成</b><b class='flag-5'>随机数</b>

    何在200 smart中生成随机数

    上文写了博途中生成随机数的几种办法,现在试着使用其中简单的线性同余法实现在200 smart中完成类似功能。
    的头像 发表于 03-23 13:51 9444次阅读
    如<b class='flag-5'>何在</b>200 smart中<b class='flag-5'>生成</b><b class='flag-5'>伪</b><b class='flag-5'>随机数</b>

    FPGA的随机数发生器学习介绍

    随机试验的结果,产生随机数有多种不同的方法。这些方法被称为随机数生成器。随机数最重要的特性是它在产生时后面的那个数与前面的那个数毫无关系。
    的头像 发表于 09-12 09:13 3307次阅读

    如何使用雪花算法生成真正的随机数

    以前用rand和srand生成随机数随机数的序列是固定的,今天学习生成真正的
    的头像 发表于 10-09 10:05 2640次阅读

    何在FPGA中实现随机数发生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7中实现4位随机数发生器(PRNGs)。
    的头像 发表于 08-06 11:20 2032次阅读
    如<b class='flag-5'>何在</b>FPGA中<b class='flag-5'>实现</b><b class='flag-5'>随机数</b>发生器

    随机数随机数的区别

    随机数在当前程序运行环境中是一种常用参数,目前主要分为两种,随机数随机数,本期我们就来讲一下二者的区别。
    的头像 发表于 08-27 17:46 2992次阅读