如何找到非线性信号的总谐波失真。例如,Forced Van der pol Oscillator,代码如下所示。我已经尝试过这个' thd'在matlab中运行,但我想我错过了一些东西。 这是等式 的 X'' -mu(1-x ^ 2(t))的 X'(T)+ X(t)= P COS(W * t)的
function vdpo()
t=0:0.001:10
mu=2
x0=-2;
v0=2;
p=10; w=7;
[t,x]= ode45(@f, t, [x0,v0])
function dxdt=f(t,x)
dxdt1=x(2); dxdt2= mu(1-x(1)^2)*x(1)+p*cos(w*t);
dxdt=[dxdt1 ;dxdt2];
end
end
答案 0 :(得分:2)
尝试下面的代码,其中函数f(t,x)
是我们的ODE方程,我们调用函数ode45
来使用Runge-Kutta方法来解决它。
function [x]=vdpo()
t=0:0.001:10
mu=2
x0=-2;
v0=2;
p=10; w=7;
[t,x]= ode45(@f, t, [x0,v0])
function dxdt=f(t,x)
dxdt1=-x(2)-x(1)+(x(1)^3)/3; dxdt2=-x(1)+p*cos(w*t);
dxdt=[dxdt1 ;dxdt2];
end
end
然而,它实际上是一个数学问题而不是编程问题。我们要做的第一件事是通过定义y=x'+((x^3)/3-x)*mu
将方程转换为更方便的形式,然后我们有2 First Order Ordinary Differential Equations
所以我们可以调用ode45
来解决它。我在here(page2)看了他们。
致电
X=vdpo();
x=X(:,1);
thd(x)
P.S。不是关于THD部分。