作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试使用 OpenModelica 模拟声学谐振器,我想知道如何稳健/很好地计算它们的谐振频率。
作为一个简化的例子(没有媒体等),我实现了一个双亥姆霍兹谐振器,本质上是由管道(惯性)连接的两个体积(合规性)。真正的系统由连接在一起的更多组件组成。
压力和体积流量(均为复数值)的振荡遵循正弦表达式,具有共振角频率 w
.这产生了 4 个压力和 4 个体积流量的 8 个方程(在端点和柔量-惯性连接点)。
这是我每晚在 OpenModelica 中解决的 Modelica 代码:
model Helmholtz_test "Simple test of double Helmholtz resonator"
constant Complex j = Modelica.ComplexMath.j;
ComplexU U_a, U_b, U_c, U_d "Oscillating volume flow rate";
ComplexPressure p_a, p_b, p_c, p_d "Oscillating pressure";
Modelica.SIunits.AngularFrequency w(start=2000, fixed=false);
Compliance C = 7.14e-9;
Inertance L = 80;
initial equation
p_a.re = 1e+2; //Simulation finishes, values reasonable, only during initialisation we get:
//Matrix singular!
//under-determined linear system not solvable!
//The initialization finished successfully without homotopy method.
equation
//BCs on ends
U_a = Complex(0);
U_d = Complex(0);
//Left compliance a-b;
p_a = p_b;
p_a = -1 / (j * w * C) * (U_b - U_a);
//Inertance b-c
U_b = U_c;
p_c - p_b = -j * w * L * U_b;
//Right compliance c-d
p_c = p_d;
p_c = -1 / (j * w * C) * (U_d - U_c);
//Additional condition for Eigenvalue
der(w) = 0;
//w^2 = 2/(L*C); //The "real" resonance frequency
annotation(
experiment(StartTime = 0, StopTime = 1, Tolerance = 1e-06, Interval = 0.002));
end Helmholtz_test;
operator record ComplexPressure =
Complex(redeclare Modelica.SIunits.Pressure re,
redeclare Modelica.SIunits.Pressure im)
"Complex pressure";
operator record ComplexU =
Complex(redeclare Modelica.SIunits.VolumeFlowRate re,
redeclare Modelica.SIunits.VolumeFlowRate im)
"Complex volume flow rate";
type Compliance = Real(final quantity = "Compliance", final unit = "m3.Pa-1");
type Inertance = Real(final quantity="Inertance", final unit="kg.m-4");
w=\sqrt{\frac{2}{LC}}
(在本例中为 ~1871 1/s)使系统具有非零解。
p_a.re = 1e+2
.
w
是一个额外的变量,我需要引入一个
附加方程,选择 der(w) = 0;
因为在这种情况下谐振频率是恒定的。
Simulation finishes, values reasonable, only during initialisation we get:
Matrix singular!
under-determined linear system not solvable!
The initialization finished successfully without homotopy method.
homotopy
)?
w
的正确值),但我担心对于更复杂/更现实的模型,我可能会遇到更多有问题的数字困难。
homotopy
,但我真的不知道如何在这里应用它。我想将此应用于
w
不知何故,但弗里茨森的书甚至似乎明确警告不要在派生表达式上使用它,除此之外只有
w.start
值(value)似乎出现了。
最佳答案
什么是类(class)ComplexU
, ComplexPressure
, Compliance
和 Inertance
?我尝试运行您的模型,但这些似乎是您正在使用的另一个库的一部分。我用 MSL 或原始类型替换了它们。
此外,我真的不明白该模型应该如何工作,您只定义了一个 initial equation
块,没有实际的方程。我尝试了以下模型:
model Helmholtz_test "Simple test of double Helmholtz resonator"
constant Complex j = Modelica.ComplexMath.j;
Complex U_a, U_b, U_c, U_d "Oscillating volume flow rate";
Complex p_a, p_b, p_c, p_d "Oscillating pressure";
parameter Modelica.SIunits.AngularFrequency w(start=2000, fixed=false);
Modelica.SIunits.AngularFrequency real_w; //The "real" resonance frequency
Real C = 7.14e-9;
Real L = 80;
initial equation
p_a.re = 1e+2;
equation
U_a = Complex(0);
U_d = Complex(0);
p_a = p_b;
p_a = -1 / (j * w * C) * (U_b - U_a);
U_b = U_c;
p_c - p_b = -j * w * L * U_b;
p_c = p_d;
p_c = -1 / (j * w * C) * (U_d - U_c);
real_w = abs(sqrt(2/(L*C))); //The "real" resonance frequency
end Helmholtz_test;
w
与
real_w
.一种是通过求解系统来计算的,一种是通过方程来计算的。
p_d.re = -1e+2;
)所以这可能是正确的值吗?
关于modelica - 如何找到振荡器的共振频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57767293/
我是一名优秀的程序员,十分优秀!