替代采样范围不同的样本函数

时间:2016-12-14 15:08:35

标签: modelica dymola openmodelica

我想知道Openmodelica中是否有示例函数的替代方法,它接受的参数不是type parameter。也就是说,替代方案应该允许在模拟期间对可变范围的值进行采样。

最终目标是创建一个类,通过该类我可以在模拟过程中测量实际信号的RMS值。 RMS值用作控制变量。实际信号具有连续变化的频率,因此为了获得更好的测量结果,我希望能够在模拟过程中连续变换采样范围,或者在振荡的某些部分/周期内离散地进行采样。

是否也可以运行RMS"功能使输出连续?

简而言之,我想计算可变采样范围内的RMS值,并且样本每次迭代应该只有一个新的术语或值,而不是一组全新的值。

我是modelica平台的新手,欢迎所有有用的提示。

谢谢!

1 个答案:

答案 0 :(得分:3)

一些可能的解决方案(您可能应该检查我的数学并将它们用作灵感;还要检查标准库中的RootMeanSquare块,由于某种原因,它会对Mean块进行采样):

从时间开始运行RMS(无频率)。

model RMS
  Real signal = sin(time);
  Real rms = if time < 1e-10 then signal else sqrt(i_sq / time /* Assume start-time is 0; can also integrate the denominator using der(denom)=1 for a portable solution. Remember to guard the first period of time against division by zero */);
  Real i_sq(start=0, fixed=true) "Integrated square of the signal";
equation
  der(i_sq) = signal^2;
end RMS;

使用固定窗口,f:

model RMS
  constant Real f = 2*2*asin(1.0);
  Real signal = sin(time);
  Real rms = if time < f then (if time < 1e-10 then signal else sqrt(i_sq / time)) else sqrt(i_sq_f / f);
  Real i_sq(start=0, fixed=true);
  Real i_sq_f = i_sq - delay(i_sq, f);
equation
  der(i_sq) = signal^2;
end RMS;

使用变量窗口f(受f_max限制):

model RMS
  constant Real f_max = 2*2*asin(1.0);
  constant Real f = 1+abs(2*asin(time));
  Real signal = sin(time);
  Real rms = if time < f then (if time < 1e-10 then signal else sqrt(i_sq / time)) else sqrt(i_sq_f / f);
  Real i_sq(start=0, fixed=true);
  Real i_sq_f = i_sq - delay(i_sq, f, f_max);
equation
  der(i_sq) = signal^2;
end RMS;

同步Modelica中的可变采样时间:https://trac.modelica.org/Modelica/ticket/2022

旧Modelica中的可变采样时间:

when time>=nextEvent then
  doSampleStuff(...);
  nextEvent = calculateNextSampleTime(...);
end when;