在 Modelica (SystemModeler) 中生成白噪声

2024-03-18

我正在尝试将测量噪声添加到模拟中。这可以在 Simulink 等中完成,但在 Modelica 和 SystemModeler 中似乎更困难。

关于如何做到这一点有什么想法吗?


您可以通过外部 C 代码在 Wolfram SystemModeler 中添加白噪声。

Modelica 代码(我已从代码中删除了图表注释,以便更容易阅读):

package WhiteNoise "Package for generating white noise"
  extends Modelica.Icons.Library;

  block NoiseNormal "Normally distributed random noise"
    parameter Real mean=0 "Mean value of random noise";
    parameter Real stdev=1 "Standard deviation of random noise";
    parameter Real tSample=0.01 "Noise sample time";
    Modelica.Blocks.Interfaces.RealOutput y;
  equation 
    when initial() then
      WhiteNoise.initRandomNormal();
    end when;
    when sample(0, tSample) then
      y=mean + stdev*WhiteNoise.RandomNormal(time);
    end when;
  end NoiseNormal;

  function initRandomNormal
    external "C" ext_initRandomNormal()   annotation(Include="#include \"ext_initRandNormal.c\"");
  end initRandomNormal;

  function RandomNormal
    output Real y;
    input Real u;
    external "C" y=ext_RandomNormal(u)   annotation(Include="#include \"ext_RandNormal.c\"");
  end RandomNormal;

end WhiteNoise;

外部代码:

ext_intRandNormal.c

#include <math.h>
#include <limits.h>

void ext_initRandomNormal()
{
    srand(time(NULL));
}

ext_RandNormal.c

#include <math.h>
#include <limits.h>
double ext_RandomNormal(double timein)

{
    unsigned int seed = 0;
    double v1, v2, r;

    timein /= 100;
    seed = (timein - floor(timein)) * UINT_MAX;

    do
    {
        v1 = 2 * ((double) rand()) /((double) RAND_MAX) - 1;
        v2 = 2 * ((double) rand()) /((double) RAND_MAX) - 1;
        r = v1 * v1 + v2 * v2;
    } while((r >= 1.0) || (r == 0.0));

    return v1 * sqrt( - 2.0 * log(r) / r );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Modelica (SystemModeler) 中生成白噪声 的相关文章

  • 第四讲 系统建模方法

    系统建模一般流程 实际系统的分析方法大致类似 但对于实际系统的模型实现方式则有多种 1 面向方程 图框 的因果建模 基于图框进行系统模型实现 的软件很多 如Simulink AMESim 应用于控制领域 等 2 面向对象 非因果 的物理建模
  • 如何在 Openmodelica 中指定介质?

    我正在 Modelica 中模拟热泵热水系统 我附上了我的模特的照片 但是 当我运行模型时 出现错误 Medium 是部分的 部分类中不允许进行名称查找 您能告诉我吗 我该如何指定水箱 热泵冷凝器和管道中的水 我应该如何指定热泵蒸发器中的空
  • OpenModelica 建模库仑摩擦:翻译错误,优化后模块 findZeroCrossings(模拟)失败

    我正在尝试在 Modelica 中模拟库仑摩擦力 基本概念是检查表面之间的相对速度是否小于常数 并且试图使表面相互滑动的外力是否小于最大静摩擦力 法线力 静摩擦系数 则摩擦力等于负值的外部剪切力 否则 摩擦力等于滑动方向相反方向的动摩擦力
  • 两相 Modelica Media 示例

    我正在尝试在 OpenModelica 中开发具有单一物质 液体或蒸汽 的流动模拟 Modelica Media Water 模型确实有两个阶段 但极其复杂 并且很难用完全不同的物质来重现 我想找到一个我可以使用的两相介质的简单示例 有一个
  • modelica 中的功能集成

    我想在 Modelica 中对时间以外的变量函数进行积分 但我不知道该怎么做 例如 如何计算上限为 5 下限为 2 的 x dx 的积分 x dx x 2 2 Modelica 并不是像 Maple Mathematica 或 Matlab
  • 如何在 Dymola (Modelica) 中使用 /bigobj 进行编译

    我正在将一个相对较小的有限元 FE 模型集成到 Modelica 中 为此 我创建了一个模型 Modelica 类 它可以读取 Matlab 二进制文件格式的质量 M 和刚度 K 矩阵 我将 FE 模型与 Modelica 标准库 Mode
  • 外部函数:从 C 脚本使用 .dll 的替代方法

    这是一个伴随问题外部函数 在 C 脚本中引用头文件来编译 dll 该堆栈溢出问题是使用 Modelica 外部函数调用 c 脚本 然后 该 c 脚本使用 dll 中包含的 c 函数 以下是我尝试过的最初首选方法和我不喜欢的工作尝试 初步尝试
  • modelica:计算随时间变化的连续变量的最小值/最大值

    如上所述 我希望计算连续变量随时间变化的最小值 和 或最大值 这是一个演示的最小示例 model MinMaxTest Real u Real u min start 10 Real u max start 10 equation u si
  • 使用 python 进行 Modelica 参数研究

    我想使用 python 在不同的 modelica 建筑库 建筑物 IDEAS 中运行参数研究 例如 更改渗透率 我尝试过 simulateModel和simulateExtendedModel zone n50 value 我的问题 为什
  • 外部函数:在 C 脚本中引用头文件来编译 dll

    使用 Dymola 2017 情况 A 调用外部 c 脚本 我已经成功实现了没有 include 语句的简单外部 c 函数 模型功能 function chirp input Modelica SIunits AngularVelocity
  • 如何在 Dymola 中隐藏模拟变量

    模拟模型后是否可以隐藏对象或输出 我有很多东西 我觉得我在浪费时间筛选它们试图找到我的正确答案 如果没有 有没有办法组织我的输出在模拟选项卡中的显示方式 Thanks Dymola 的主要可能性是 使组件受到保护 默认情况下 受保护的组件不
  • 在 Modelica 模拟中包含因果关系会导致模型扁平化时出现平移错误

    我想模拟基于能量工作的质量弹簧模型的控制器 model model parameters parameter Real m 1 parameter Real k 1 parameter Real Fmax 3 parameter Real
  • 使用“在模型中保存起始值”选项来帮助 Dymola 中的收敛

    I build a model in dymola Even though there are some errors during the initialization process but the calculation succee
  • 如何将一个向量的参数插入另一个向量?

    我有一个大小为 5 的 重心 向量 parameter Length barycenters 5 1 2 3 4 5 我想将此向量的参数添加到另一个大小为 7 的向量 b prime 中 这意味着打算让 b prime 0 1 2 3 4
  • 后续问题:Modelica仿真和方程初始化总时间计算

    我正在写这个相关问题this https stackoverflow com questions 61375492 modelica total time calculation of simulation and equation ini
  • 如何在 Modelica 中构建液体平衡连接器?

    帖子状态 200313 得到了代码 DEMO v42 的答案 我接受了赏金 200310 我评论了昨天建议的两篇关键论文 还是不明白如何更新DEMO v41 200309 我想强调的是 关键问题是如何在代码DEMO v41 如果可能的话 中
  • 使用内部/外部传播包

    我想在我的模拟中放置一个 系统 组件 类似于Modelica Fluid System and Modelica Mechanics MultiBody World 所有其他组件都可以从中访问Medium包 以便在整个流程图中仅设置一次工作
  • 理解 Dymola 错误消息时遇到问题

    谁能告诉我 代数环 的含义 以及我应该如何通过添加 预 运算符来应对这种情况 我真的没看懂 Error Failed to generate code for an algebraic loop involving when equatio
  • 如何在自定义 Fluid.System 中定义通用介质?

    我正在设计一组用于流体系统建模的自定义组件 由于整个模型中只有一种介质 因此我希望能够在一个地方定义该介质 这system大多数 Modelica Fluid 系统所需的组件无论如何看起来都是一个好地方 我已经尝试了以下 MWE 但我遇到了
  • 带平方根的 Modelica 测量单位

    在 Modelica 中我试图定义一个专用的数据类型OrifSizingCoeff用于液压孔板的尺寸系数 相应的物理量是体积流量除以压力的平方根 因此 a SI 单位 m3 s除以sqrt Pa b 以 实际 单位 l min除以sqrt

随机推荐

  • 生成多个pandas数据框

    我正在从网站检索 csv 格式的多个数据框 我将数据帧保存在一个空列表中 然后一一读取 我无法将它们附加到单个数据框中 因为它们具有不同的列名称和列顺序 所以我有以下问题 我可以在用于读取文件的循环内创建一个具有不同名称的数据框 这样我就可
  • MinGW 的 msvcrt 替代品? (例如,获得符合要求的 snprintf)

    所以这是一个有趣的 我们有一些 C 库should与平台无关 即使它们是在 Linux 上开发的 因为它们仅依赖于 ISO IEC 9899 1999 中定义的 C 标准库 当我们用 MinGW 编译这些库时 一开始一切似乎都工作正常 但今
  • 这是什么类型的图表?可以使用 ggplot2 创建它吗?

    我有这张图表 我正在尝试复制 它有两个 X 轴和 Y 轴连续变量 并用一条线绘制这两个变量之间随时间变化的关系 我的问题有两个部分 首先 这种类型的图表叫什么 这是不寻常的 因为点之间的线是由第三个变量 年份 决定的 而不是它们在 X 轴上
  • SQL Server集成身份验证模式

    我想知道何时在 Web 应用程序的连接字符串中使用 Windows 身份验证模式 应用程序本身使用 Windows 身份验证进行授权 将使用哪个帐户登录 SQL Server 不是web应用程序池帐号吗 使用 Windows 身份验证登录
  • 突然间无法再在 IntelliJ 中运行 Kotlin 测试

    我有一个大型 Kotlin 项目 其中包含为 KotlinTest 编写的大约 2500 个单元测试 该项目是一个 Gradle 项目 我能够从 Gradle 任务运行所有测试 但通常我从编辑器运行它们 我可以通过单击 运行 图标从编辑器运
  • 运行 android 时出错:Gradle 项目同步失败。请修复您的项目并重试

    Android Studio 1 2 RC0 不断告诉我Error running android Gradle project sync failed Please fix your project and try again 我怎样才能
  • 远程 Web 应用程序调试在 ios 8 beta 中不起作用

    我正在尝试在模拟器上调试 ios 8 beta 下的 Web 应用程序 运行最新版本的 safari 版本 7 0 6 和 Xcode 但我在 safari 中只能看到 没有可检查的应用程序 有什么建议 您需要最新的 Safari 每晚版本
  • 无法在 Web 服务器上启动调试。 Web 服务器找不到所请求的资源

    我在尝试调试 ASP NET MVC 应用程序时遇到此错误 我已将应用程序设置为 使用本地 IIS Web 服务器 并选择 ASP NET 作为调试器 在不进行调试的情况下运行该网站效果很好 但是当我尝试调试时 出现以下错误 Unable
  • Python 文件操作

    我用这个 python 程序得到了一个错误 IOError Errno 0 Error from sys import argv file open test txt a print file tell not at the EOF pla
  • groupByKey(...) 中的 类在其成员中有一个 Map。 groupByKey 操作因“不可比较”问题而失败

    我有课Entreprise具有基元数据类型和另一个类上的 Map Etablissement它仅由原始数据类型组成 public class Entreprise implements Comparable
  • FnBox 示例抛出错误:盒装中没有 FnBox?

    我尝试运行FnBox示例来自官方文档 https doc rust lang org 1 27 0 std boxed trait FnBox html但它会抛出一个错误 error E0432 unresolved import std
  • Android 蓝牙 Le 扫描仪在一段时间后停止

    我正在使用活动的蓝牙 LE 扫描仪运行应用程序或服务 并在日志控制台上显示扫描结果 如果我把手机锁在桌子上不再碰 一段时间后它停止了 并且没有给我更多的扫描结果 如果我按下电源按钮并且屏幕唤醒 它会给我更多扫描结果 如果我再次锁定屏幕或等待
  • 在 macOS 上通过终端启动 Spyder 时出现 kq_init 警告

    我在 Mac 上运行 Spyder High Sierra 我有 2 个使用 Anaconda 定义的虚拟环境 对于 python 2 7 13 虚拟环境是 py27 对于 python 3 65 虚拟环境是 py36 当我转到 py36
  • 使用 dup2 时的竞争条件

    这个联机帮助页 http linux die net man 2 dup2为了dup2系统调用说 EBUSY 仅限 Linux 这可能会在执行期间由 dup2 或 dup3 返回 open 2 和 dup 的竞争条件 它谈论什么竞争条件以及
  • Chart_Series() 是否适用于对数轴?

    有没有办法产生对数 y 轴chart Series 我正在使用实验chart Series 而不是chartSeries 中的方法quantmod 因为在绘图中添加额外的线时更方便 library quantmod POWR lt getS
  • Qt:如何检测是否选择了某个小部件?

    我没有看到任何信号 槽 函数可以告诉我鼠标是否选择了某个小部件 是否可以有这样一个函数来告诉我当前的QWidget是否被选中 我如何区分 当前小部件被选择 和 其子小部件之一被选择 您可以使用以下命令检查小部件的焦点hasFocus 功能
  • C++ 中的 Bron Kerbosch 算法

    我一直在练习我的 C 算法知识 并陷入了标准 BK 实现 该算法输出了太多的派系 我似乎不明白为什么 我将图表示为邻接列表 vector lt list
  • 应用程序未与 iCloud 同步核心数据更改

    我设置了一些 NSLogs 以确保我的应用程序与 iCloud 同步更改 但我已经等了半个小时并且更改没有同步 这是我的核心数据代码 核心数据存储存储在文档目录中 因为我希望它在失去对 iCloud 的访问时能够继续工作 并且不希望它在这种
  • 英文数字的可扩展正则表达式

    我正在尝试创建一个正则表达式认出 英文数字 http en wikipedia org wiki Names of numbers in English 例如one nineteen twenty 一百二十二 等等 一直到数百万 我想要re
  • 在 Modelica (SystemModeler) 中生成白噪声

    我正在尝试将测量噪声添加到模拟中 这可以在 Simulink 等中完成 但在 Modelica 和 SystemModeler 中似乎更困难 关于如何做到这一点有什么想法吗 您可以通过外部 C 代码在 Wolfram SystemModel