Matlab 如何找到非线性信号的总谐波失真。雷达系统分析与设计

Matlab 如何找到非线性信号的总谐波失真。雷达系统分析与设计,matlab,matlab-guide,distortion,nonlinear-functions,matlab-engine,Matlab,Matlab Guide,Distortion,Nonlinear Functions,Matlab Engine,如何找到非线性信号的总谐波失真。例如,强制范德波尔振荡器的代码如下所示。我在matlab中尝试了“thd”函数,但我想我遗漏了一些东西。 这就是方程式 x'-mu(1-x^2(t))x'(t)+x(t)=Pcos(w*t) 尝试下面的代码,其中函数f(t,x)是我们的ODE方程,我们调用函数ode45来使用龙格库塔方法求解它 function [x]=vdpo() t=0:0.001:10 mu=2 x0=-2; v0=2; p=10; w=7; [t,x]= ode45

如何找到非线性信号的总谐波失真。例如,强制范德波尔振荡器的代码如下所示。我在matlab中尝试了“thd”函数,但我想我遗漏了一些东西。 这就是方程式 x'-mu(1-x^2(t))x'(t)+x(t)=Pcos(w*t)


尝试下面的代码,其中函数
f(t,x)
是我们的ODE方程,我们调用函数
ode45
来使用龙格库塔方法求解它

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个
一阶常微分方程
,因此我们可以调用
ode45
来求解它。我看着他们

打电话

X=vdpo();
x=X(:,1);
thd(x) 
我们可以得到如下答案:


p、 不确定THD部分。

你检查过了吗?是的,我检查过THD,给出的例子是线性方程组。但这是一个二阶非线性方程。你能编辑你的帖子并添加这个方程吗?我们大多数人都是
程序员
,有这样的背景也许我们能帮上忙。好的,我就这么做。是的,谢谢。但是如何应用thd来计算总谐波失真呢?我知道matlab有一个查找thd的函数,但它只适用于方程的线性形式。例如t=0:0.001:10;u=sin(2*pi*t);thd(u)给出了分贝的答案,但我如何将其应用于二阶微分方程?另一个数学问题,正在研究它@SamuelI看了一些材料,在我看来,当我们有一个输入波和一个输出波时,THD可以计算出来,但我们只有ODE方程的解。你能告诉我是什么吗?输入还是输出@SamuelIt是一个输入方程。然而,在关闭函数dxdt,thd(x(:,1)后,我尝试使用这行代码,我有一个分贝的答案。请注意,x(:,1)的值是根据时间绘制的值。一定要让我知道你对此的感受。信不信由你,我也在做同样的事情,因为我们只有那个数据。但我不确定。@Samuel
X=vdpo();
x=X(:,1);
thd(x)