复杂振荡的滤波方法
如果我有一个弹簧系统,不是一个弹簧系统,而是例如一些彼此连接的 3 个自由度弹簧系统。我可以建立一个微分方程组,但不可能以通用的方式求解它。问题是,有没有论文或方法可以过滤如此复杂的振荡,从而消除振荡并尽可能获得真实信号?例如,如果我以某种方式连接 3 个弹簧,然后推动它们开始振动,或者在它们上施加一些重量,然后从每个弹簧中获取振动,是否有任何过滤方法可以轻松确定重量(在如果在每个质量的上方放置一些质量,情况会怎样?我对过滤复杂的弹簧类系统感兴趣。
If I have a system of a springs, not one, but for example 3 degree of freedom system of the springs connected in some with each other. I can make a system of differential equations for but it is impossible to solve it in a general way. The question is, are there any papers or methods for filtering such a complex oscilliations, in order to get rid of the oscilliations and get a real signal as much as possible? For example if I connect 3 springs in some way, and push them to start the vibrations, or put some weight on them, and then take the vibrations from each spring, are there any filtering methods to make it easy to determine the weight (in case if some mass is put above) of each mass? I am interested in filtering complex spring like systems.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
三个弹簧,六个自由度?这是使用有限元方法和数值积分的简单解决方案。它是一个由六个耦合 ODE 组成的系统。您可以应用任何形式的数值积分,例如五阶龙格-库塔。
我建议首先对系统进行特征值分析,以了解其频率特性和正常模式。我还会对施加到系统的动态力进行 FFT。您没有提到任何阻尼,因此如果您碰巧以接近共振的自然频率激发系统,您可能会出现一些有趣的行为。
如果动力学方程具有这种一般形式(抱歉,我这里没有 LaTeX 使其看起来不错):
其中 M 是质量矩阵(对角线),a 是加速度(位移相对于时间的二阶导数),K 是刚度矩阵,F 是力函数。
如果您说您知道响应,则必须预先乘以响应函数的转置并尝试求解 M。它是对角线,因此您可以尝试一下。
Three springs, six degrees of freedom? This is a trivial solution using finite element methods and numerical integration. It's a system of six coupled ODEs. You can apply any form of numerical integration, such as 5th order Runge-Kutta.
I'd recommend doing an eigenvalue analysis of the system first to find out something about its frequency characteristics and normal modes. I'd also do an FFT of the dynamic forces you apply to the system. You don't mention any damping, so if you happen to excite your system at a natural frequency that's close to a resonance you might have some interesting behavior.
If the dynamic equation has this general form (sorry, I don't have LaTeX here to make it look nice):
where M is the mass matrix (diagonal), a is the acceleration (2nd derivative of displacements w.r.t. time), K is the stiffness matrix, and F is the forcing function.
If you're saying you know the response, you'll have to pre-multiply by the transpose of the response function and try to solve for M. It's diagonal, so you have a shot at it.
您连接弹簧的方式是否使系统的行为近似线性? (例如,至少与乐器弹簧/琴弦一样接近线性?)这种行为随着时间的推移是否一致? (例如,弹簧不会熔化或断裂。)如果是这样,LTI(线性时不变)系统理论可能适用。给定足够的测量值与 LTI 系统中的自由度数,人们也许能够估计系统响应的零极点图,并从那里开始。或者像线性预测器这样的东西可能会有用。
Are you connecting the springs in such a way that the behavior of the system is approximately linear? (e.g. at least as close to linear as are musical instrument springs/strings?) Is this behavior consistant over time? (e.g. the springs don't melt or break.) If so, LTI (linear time invariant) systems theory might be applicable. Given enough measurements versus the numbers of degrees of freedom in the LTI system, one might be able to estimate a pole-zero plot of the system response, and go from there. Or something like a linear predictor might be useful.
实际上,只要您知道质量等,就可以求解所得的微分方程组。
标准方法是使用 拉普拉斯变换。特别是,您从一组线性微分方程开始。添加变量,直到获得一组一阶线性微分方程。 (因此,如果方程中有
y''
,则需要添加方程z = y'
并将y''
替换为 < code>z'。)将其重写为以下形式:其中
v
是变量向量,A
是矩阵,w
code> 是一个标量向量。 (在w
中结束的一个例子是重力。)现在应用拉普拉斯变换来求解
它,以获得
inv
反转矩阵和I< /code> 是单位矩阵。应用拉普拉斯逆变换(如果您阅读了拉普拉斯变换,您可以找到常见类型函数的逆变换表 - 获取您实际遇到的函数的完整列表应该不那么难),并且您有您的解决方案。 (请注意,这些计算很快就会变得非常复杂。)
现在您可以采用特定的设置并解决未来的行为。您还能够(如果您非常仔细地做事)弄清楚模型如何响应参数的小扰动。但你的问题是你不知道要使用的参数。 但是您确实有能力重复测量系统中的位置。
如果你把这些放在一起,你能做的就是这个。在多个点测量您的位置。首先估计参数的所有初始值,然后在一秒钟后估计所有值。您可以调整参数(使用牛顿法)以足够接近一秒钟后的值。获取 5 秒后的测量结果,并使用该初始估计值作为起点,改进 5 秒后发生情况的计算。以更长的间隔重复以获得所有答案。
编写和调试这应该需要一些时间。 :-) 我强烈建议调查一下 Mathematica 已经知道如何为您做多少事情......
Actually it is possible to solve the resulting system of differential equations as long as you know the masses, etc.
The standard approach is to use a Laplace Transform. In particular you start with a set of linear differential equations. Add variables until you have a set of first order linear differential equations. (So if you have
y''
in your equation, you'd add the equationz = y'
and replacey''
withz'
.) Rewrite this in the form:where
v
is a vector of variable,A
is a matrix, andw
is a scalar vector. (An example of something that winds up inw
is gravity.)Now apply a Laplace transform to get
Solve it to get
where
inv
inverts a matrix andI
is the identity matrix. Apply the inverse Laplace transform (if you read up on Laplace transforms you can find tables of inverse of common types of functions - getting a complete list of the functions you actually encounter shouldn't be that hard), and you have your solution. (Be warned, these computations quickly get very complex.)Now you have the ability to take a particular setup and solve for the future behavior. You also have the ability to (if you do things really carefully) figure out how the model responds to a small perturbation in parameters. But your problem is that you don't know the parameters to use. However you do have the ability to measure the positions in the system at repeated times.
If you put this together, what you can do is this. Measure your position at a number of points. First estimate all of the initial values of the parameters, and then all of the values a second later. You can adjust your parameters (using Newton's method) to come close enough to the values a second later. Take the measurements from 5 seconds later and use that initial estimate as your starting point to refine your calculations for what is happening 5 seconds later. Repeat with longer intervals to get all of your answers.
Writing and debugging this should take you some time. :-) I would strongly recommend investigating how much of this Mathematica knows how to do for you already...