如何在Mathematica中计算和绘制瞬时相位

时间:2011-02-15 08:30:19

标签: wolfram-mathematica

我想要一个频率扫描驱动器和它正在驱动的非线性振荡器之间的瞬时相位差图。下面的x [t]是振荡器的瞬时位移,plotx提供了一个图。

谢谢, 凯里

s =
 NDSolve[{x''[t] + x[t] - 0.167 x[t]^3 == 
    0.005 Cos[t - 0.5*0.0000652*t^2], x[0] == 0, x'[0] == 0}, 
  x, {t, 0, 3000}, MaxSteps -> 35000]

plotx = Plot[Evaluate[x[t] /. s], {t, 0, 3000}, PlotPoints -> 10000, 
  Frame -> {True, True, False, False}, FrameLabel -> {"t", "x"}, 
  FrameStyle -> Directive[FontSize -> 15], PlotLabel -> "(a)", 
  Axes -> False]

2 个答案:

答案 0 :(得分:3)

(回应,2)

您可以使用

获得合理的相位近似值
f[tt_?NumericQ] := -(ArcTan @@ ({x[t], x'[t]}/
    Sqrt[x[t]^2 + x'[t]^2]) /. s[[1]]) /. t -> tt

以下是一些情节。首先,我们一起展示驾驶条款和结果。这表明它们有点不同步。

plotx2 = Plot[
  Evaluate[{x[t], Cos[t - 0.5*0.0000652*t^2]/5} /. s], {t, 0, 100}, 
  Frame -> {True, True, False, False}, FrameLabel -> {"t", "x"}]

enter image description here

现在我们一起展示两个阶段。这次我的情节略有不同。

phaseangles = 
 Plot[{f[t], Mod[t - 0.5*0.0000652*t^2, 2*Pi, -Pi]}, {t, 100, 120}, 
  Frame -> {True, True, False, False}, FrameLabel -> {"t", "x"}]

enter image description here

最后我们展示了相位差异。

phasediffs = 
 Plot[{f[t] - Mod[t - 0.5*0.0000652*t^2, 2*Pi, -Pi]}, {t, 100, 120}, 
  Frame -> {True, True, False, False}, FrameLabel -> {"t", "x"}]

enter image description here

可能我被一些添加剂(那些Mod []术语变得令人烦恼),但这应该让人知道如何进行添加。

Daniel Lichtblau Wolfram Research

答案 1 :(得分:1)

我会密切关注method of averaging。在Strogatz's implementation中,找到了非线性振荡器的平均包络和相位。既然你正在寻找一些超出第一顺序的东西,我会考虑从空军学院看这个paper