主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

信号伝送システム:オプションの入力引数を使用してc mexファescルモデリング

この例では,idnlgreyモデルにオプションの入力引数を設定する方法を説明します。ここではC墨西哥人タイプのモデルファイルに対して実行する方法を中心に説明しますが,MATLABファイルモデリングと類似している部分についても少し取り上げます。

ここでは,次の図で示す信号伝送システム(電信)をもとに説明します。

図 1:信号伝送システムの概略図

信号伝送モデリング

電信の距離x(入力電圧が印加された場所から算出)で,時刻tで電流我(t, x)が流れます。対応する電圧はu (t, x)で電流と電圧の関係は2つの組み合わせた偏微分方程式(PDE)で記述できます。

$ $ - \压裂{\偏u (t, x)} {x} \部分= L \压裂{\部分我(t, x)}{\部分t} $ $

$ $ - \压裂{\部分我(t, x)} {x} \部分= C \压裂{\偏u (t, x)}{\部分t} $ $

上記の方程式は”電信方程式”(その変種)と呼ばれることが多く,LとCはそれぞれ単位長あたりのインダクタンスとキャパシタンスです。

電信方程式は,通常の微分方程式系によって近似できますが,離散距離0,h, 2h,…, Nhでの電流と電圧を考慮する場合に限ります。ここで,hは離散距離で,Nは距離の合計数です。この近似を行った後,電信は互いにチェーン状に接続された,構造が同一の区間で構成されると考えられます。文献では,このタ。

距離x = kh (k = 0,1,…,N)、時刻 t での電圧と電流をそれぞれ、u_k(t) と i_k(t) とします。d/dx u(t, x) と d/dx i(t, x) を、以下の単純な差分近似で近似します。

d u (t, x) u_ {k + 1} u_k (t (t) ) --------- ~ ------------------- 向前逼近。dx h
我(t, x) i_k d (t)——i_ {k - 1} (t ) --------- ~ ------------------- 落后的近似。dx h

X = kh

d / dx u (t, x)に前進近似を使用する理由は,i_N (t) = 0(裸電線)として,残りのN個の離散電流を次のN個の微分方程式でモデル化できるようにするためです。

d i_k (t) 1  -------- = - -- ( u_ {k + 1} (t) - u_k k (t)) = 0, 1, 2,…N-1 dt Lh

同様に,u_0(t)は既知の入力信号で記述には微分方程式は不要なので,点h, 2h,…, Nでのd/dx i(t, x)をモデル化するためには後退近似法を使用するのが便利です。

d u_k (t) 1  -------- = - -- ( i_k (t) - i_ {k - 1} (t)) k = 1, 2,…, N-1 dt Ch
d u_N (t) 1 1  -------- = - -- ( i_N (t) - i_ {n} (t) = (i_ {n} (t) dt Ch Ch

これによって図1に示すモデル近似に達し,方程式は相互に連結されたコイルとコンデンサの数で表現されます。

次に2 * N個の状態,x1 (t) = i_0 (t) x2 (t) = u_1 (t) x3 (t) = i_1 (t) x4 (t) = u_2 (t)…,x2N-1 (t) = i_ {N} (t) x2N (t) = u_N (t)を導入します。また,入力u (t) = u_0 (t)出力を電線端部の電圧y (t) = x2N (t) = u_N (t)とします。自明な代入により,次の状態空間モデル構造が得られます。

x1 (t) = 1 / (Lh) * (x2 (t) - u (t)) x2 (t) = 1 / (Ch) * (x3 (t) - x1 (t)) x3 (t) = 1 / (Lh) * (x4 (t) - x2 (t)) x4 (t) = 1 / (Ch) * (x5 (t) - x3 (t))…x2N-1 (t) = 1 / (Lh) * (x2N (t) - x2N-2 (t) x2N (t) = 1 / (Ch) * x2N-1 (t)
y(t) = x2N(t)

一般に,上記の数学的操作によって標準の線形状態空間モデル構造が得られ,IDNLGREYの線形版であるIDGREYでうまく処理できます。ここではIDGREYモデリングは行いませんが,オプションの入力引数をIDNLGREYで使用してモデリングの柔軟性を高める方法を説明します。

Idnlgrey信号伝送モデルオブジェクト

柔軟性を得るため,任意の長さLの電線をすぐに取り扱えるIDNLGREYモデルオブジェクトを用意することが望まれます。モデリングの品質を高めるためには,集約ブロックNの数を変化させ,良好なシステム近似を得られるようにすると便利です。これらの要件はIDNLGREYオブジェクトのFileArgumentプロパティのNとLを渡すことで処理できます。FileArgumentプロパティは细胞配列でなければなりませんが,この配列には任意の種類のデータを格納できます。このアプリケーションでは,構造にNとLを指定子,長さ1000の電線に対して3つの異なる値のN, 30100を試します。3次のつのFileArgumentがその後,IDNLGREYモデリングを実行するときに使用されます。

FileArgument10 = {struct(“N”10“L”, 1000)};% N = 10——> 20个状态。FileArgument30 = {struct(“N”30岁的“L”, 1000)};% N = 30—> 60个状态。FileArgument100 = {struct(“N”, 100,“L”, 1000)};% N = 100——> 200个状态。

FileArgumentに含まれるデータの解析とチェックは,IDNLGREYモデルファイルで実行しなければならず,モデルファイル設計者がこの機能の実装を担当します。エラ,チェックのない関数でhとNを得るには,次のコマンドを使用できます。

N = varargin{1}{1}.N;h = varargin{1}{1}.L/N;

ここでFileArgumentはモデルファイルに渡される最後の引数である变长度输入宗量{1}に対応します。ファesc escルsignaltransmission_m。Mは信号伝送モデルを実装します。“signaltransmission_m类型。M”と入力して,ファe e eル全体を表示します。

C mexモデルファesc escルを使用するとき(後に実行)よりも状況は多少複雑です。この場合,状態Nxの数は前もってわかりませんが,メインインターフェイス関数で計算され,入力引数としてcompute_dxとcompute_yに渡すことができます。これらの関数の宣言は,次のようになります。

无效Compute_dx (double *dx, int nx, double *x, double *u, double *p,常量mxArray* auxvar)无效Compute_y (double *y, int nx, double *x)

ここでt変数(方程式では使用されていません)を省き,正数nxを両方の関数への2番目の引数として使用しています。さらに,出力の計算には使用されないため,compute_yの標準の末尾の3つの引数を削除しました。これらの変更によって,compute_dxとcompute_yはメインインターフェイス関数から次のようにして呼び出されます。

/*状态导数更新调用函数。*/ compute_dx(dx, nx, x, u, p, auxvar);
/*调用输出更新函数。*/ compute_y(y, nx, x);

compute_dxの最初の部分を以下に示します(“类型signaltransmission_c.cを入力すると,MATLAB®コマンドウィンドウにファイル全体が表示されます)。

/*状态方程。*/ void compute_dx(double *dx, int nx, double *x, double *u, double *p, const mxArray *auxvar){/*模型参数和中间变量的声明。*/ double *L, *C;/*模型参数。*/双h, Lh, Ch;/*中间变量/参数。*/ int j;/*方程式计数器。* /
/*检索模型参数。*/ L = p[0];/*单位长度电感。*/ C = p[1];/*单位长度的电容。* /
/*获取并检查FileArgument (auxvar)。*/ if (mxGetNumberOfElements(auxvar) < 1) {mexrmsgidandtxt ("IDNLGREY:ODE_FILE:InvalidFileArgument", "FileArgument应该至少包含一个元素。");} else if (mxIsStruct(mxGetCell(auxvar, 0)) == false) {merrmsgidandtxt ("IDNLGREY:ODE_FILE:InvalidFileArgument", "FileArgument应该包含一个结构。");} else if ((mxGetFieldNumber(mxGetCell(auxvar, 0), "N") < 0) || (mxGetFieldNumber(mxGetCell(auxvar, 0), "L") < 0)) {mexrmsgidandtxt ("IDNLGREY:ODE_FILE:InvalidFileArgument", "FileArgument应该包含字段'N'和'L'的结构。");} else{/*跳过进一步的错误检查以获得执行速度。*/ h = *mxGetPr(mxGetFieldByNumber(mxGetCell(auxvar, 0), 0, mxGetFieldNumber(mxGetCell(auxvar, 0), "L"))) / (0.5*((double) nx));} Lh = -1.0/(L[0]*h);Ch = -1.0/(C[0]*h);...

FileArgumentは変数auxvarのcompute_dxに渡されることに注目してください。モデルパラメーターの宣言と取得の後(および,hなどの中間変数の宣言の後),いくつかの外部インターフェイスルーチン(mx-routineと呼ばれる)によってauxvarの整合性がチェックされます。これらのMATLABルーチンによって,mxArray変数を作成,アクセス,操作,破壊できます。この詳細については,外部インターフェイスについてのMATLABドキュメンテーションを参照してください。最後のelse句は,すべてのチェックが合格した場合に実行されます。この場合,auxvarフィ,ルドの値Nを使用してhの値を判定します。このhとモデルパラメーターLとCが使用され,必要なパラメーター量Lh = 1 / (L * h)とCh = 1 / (C * h)が計算されます。FileArgumentについての詳細は,“非線形グレーボックスモデルの同定に関するチュートリアル:IDNLGREYモデルファイルの作成“を参照してください。

LhとChを計算すると,compute_dxの2番目の部分は次のようになります。特に,nxがcompute_dxのfor循环で使用され,現在のモデルの状態数を定義する方法に注意してください。

.../* x[0]:当前i_0(t)。*/ /* x[1]: Voltage u_1(t).输出说明*/ /* x[2]: Current i_1(t).输出说明*/ /* x[3]: Voltage u_1(t).输出说明*/ /*…*/ /* x[Nx-2]: Current i_Nx-1(t).使用实例*/ /* x[Nx-1]: Voltage u_Nx(t).输出说明*/ for (j = 0;J < nx; j = j+2) { if (j == 0) { /* First transmitter section. */ dx[j] = Lh*(x[j+1]-u[0]); dx[j+1] = Ch*(x[j+2]-x[j]); } else if (j < nx-3) { /* Intermediate transmitter sections. */ dx[j] = Lh*(x[j+1]-x[j-1]); dx[j+1] = Ch*(x[j+2]-x[j]); } else { /* Last transmitter section. */ dx[j] = Lh*(x[j+1]-x[j-1]); dx[j+1] = -Ch*x[j]; } } }

出力更新関数compute_dyは,状態更新関数よりも単純です。

/*输出方程。*/ void compute_y(double *y, int nx, double *x) {/* y[0]:发射机端电压。*/ y[0] = x[nx-1];}

上記の情報を3つの異なるIDNLGREYオブジェクト(N = 10, N = 30, N = 100にそれぞれ1つずつ)に入力できる準備ができました。これらのファイルを作成する際の違いは,順序,初期状態ベクトル,使用されるオプションの入力引数だけです。

文件名=“signaltransmission_c”描述模型结构的文件。参数= struct(“名字”, {“单位长度电感”...初始参数。“单位长度的电容”},...“单位”, {“H / m”“F / m”},...“价值”, {0.99e-3},...“最低”, {eps(0) eps(0)},...% 1, c > 0!“最大”, {Inf Inf},...“固定”, {false false});% A. N = 10的信号传输模型;Order10 = [1 1 2*FileArgument10{1}.N];%模型订单[ny nu nx]。InitialStates10 = 0 (2*FileArgument10{1}.)N, 1);初始状态。nlgr10 = idnlgrey(FileName, Order10, Parameters, InitialStates10, 0,...“FileArgument”FileArgument10,...“名字”“十块”“TimeUnit”“年代”);% B. N = 30的信号传输模型;Order30 = [1 1 2*FileArgument30{1}.N];%模型订单[ny nu nx]。InitialStates30 = 0 (2*FileArgument30{1}.)N, 1);初始状态的初始值。nlgr30 = idnlgrey(FileName, Order30, Parameters, InitialStates30, 0,...“FileArgument”FileArgument30,...“名字”“30块”“TimeUnit”“年代”);N = 100时的信号传输模型;Order100 = [1 1 2*FileArgument100{1}.N];%模型订单[ny nu nx]。InitialStates100 = 0 (2*FileArgument100{1}。N, 1);初始状态的初始值。nlgr100 = idnlgrey(FileName, Order100, Parameters, InitialStates100, 0,...“FileArgument”FileArgument100,...“名字”“100块”“TimeUnit”“年代”);

3 .。入力は電線に印加される電圧,出力は電線端部の電圧です。

集(nlgr10,“InputName”“文”“InputUnit”“V”...“OutputName”输出电压的“OutputUnit”“V”);集(nlgr30,“InputName”, nlgr10。InputName,“InputUnit”, nlgr10。InputUnit,...“OutputName”, nlgr10。OutputName,“OutputUnit”, nlgr10.OutputUnit);集(nlgr100,“InputName”, nlgr10。InputName,“InputUnit”, nlgr10。InputUnit,...“OutputName”, nlgr10。OutputName,“OutputUnit”, nlgr10.OutputUnit);Nlgr10 nlgr30 nlgr100
nlgr10 =连续时间非线性灰盒模型由'signaltransmission_c' (mexo -file)定义:dx/dt = F(t, u(t), x(t), p1, p2, FileArgument) y(t) = H(t, u(t), x(t), p1, p2, FileArgument) + e(t)有1个输入(s), 20个状态(s), 1个输出(s), 2个自由参数(s) (out of 2)。名称:10块状态:由直接构造或转换创建。不估计。nlgr30 =连续时间非线性灰盒模型由'signaltransmission_c' (mexo -file)定义:dx/dt = F(t, u(t), x(t), p1, p2, FileArgument) y(t) = H(t, u(t), x(t), p1, p2, FileArgument) + e(t)有1个输入(s), 60个状态(s), 1个输出(s), 2个自由参数(s) (out of 2)。名称:30块状态:由直接构造或转换创建。不估计。nlgr100 =连续时间非线性灰盒模型由'signaltransmission_c' (mexo -file)定义:dx/dt = F(t, u(t), x(t), p1, p2, FileArgument) y(t) = H(t, u(t), x(t), p1, p2, FileArgument) + e(t)有1个输入(s), 200个状态(s), 1个输出(s),和2个自由参数(s) (out of 2)。名称:100块状态:由直接构造或转换创建。不估计。

入出力デ,タ

長さ1000米の信号伝送線からシミュレ,ションを実行した入出力デ,タを使用できます。このデータは,上記の集約モデル構造を使用してシミュレーションを実行したものですが,より大きなN(1500)を使用しています。シミュレションは20秒間行われ,サンプリングレト0.1秒を使用しました。使用されたモデルパラメーターはL = C = 1 e - 3で開始点はゼロ電圧線です(すべての初期状態がゼロです)。両方のモデルパラメーターは通常の信号伝送線よりも明らかに高く,このタイプのシステムで指定される転送された遅延を適切に表現するために選択されています。このデ,タを読み込んで,IDDATAオブジェクトzに格納します。

负载(fullfile (matlabroot“工具箱”“识别”“iddemos”“数据”“signaltransmissiondata”));Z = iddata(vout, vin, 0.1,“名字”信号传输的...“InputName”“文”“InputUnit”“V”...“OutputName”输出电压的...“OutputUnit”“V”“Tstart”0,“TimeUnit”“年代”);

入出力データのプロットによって,印加された電圧から電線端部の出力電圧への伝達遅延が明確に示されます。最初の入力電圧パルス(約1.4秒)が約1秒後に出力に現れます。

图(“名字”[z。的名字':输入输出数据']);情节(z);

図 2:信号伝送システムからの入出力デ,タ

初期信号伝送モデルの性能

これらの3の初期モデルの性能はどの程度でしょうか。比较を使用したモデルシミュレ、ションを実施して、この点を調べてみます。実行の点からは,初期状態が推定されていないため,初期状態ベクトルにゼロを選択する点が重要です。この理由は,特にnlgr100の場合は状態の数が非常に高く(= 200),初期状態ベクトルの推定の計算時間は非常に長くなるということです。

比较(z, nlgr100, nlgr30, nlgr10, compareOptions(“InitialCondition”“零”));

図 3:3の初期信号伝送モデルの実際の出力とシミュレションの出力の比較

一致の点では,予期されるように3つのモデルには大きな違いがあり,最も複雑なモデルはその他の2つのモデルよりも性能が高くなっています。モデル化能力の違いは,各モデルの予測誤差を確認することでよくわかります。

peOpt = peOptions(“InitialCondition”“零”);e = {pe(z, nlgr100, peOpt) pe(z, nlgr30, peOpt) pe(z, nlgr10, peOpt)};Figtitle = {'nlgr100: e@''nlgr30: e@''nlgr10: e@'};图(“名字”[z。的名字“:预测错误”]);I = 1:3 subplot(3,1, I);情节(e{我}。SamplingInstants e{}。OutputData,“r”);标题([“初始”figtitle{我}z.OutputName {1}));轴(“紧”);结束

図 4:3の初期idnlgrey信号伝送モデルで得られた予測誤差

パラメ,タ,推定

実際のシステムの正しいパラメーター値から開始していますが,これらの値から最適なモデル一致を作成できるとは限りません。3つの信号伝送モデルの2つのモデルパラメーターをNLGREYESTを使用して推定し,この点を調べてみます。これらの計算には時間がかかります。

opt = nlgreyestOptions(“显示”“上”“EstimateCovariance”、假);Nlgr100 = nlgreyest(z, Nlgr100, opt);Nlgr30 = nlgreyest(z, Nlgr30, opt);Nlgr10 = nlgreyest(z, Nlgr10, opt);

推定された信号伝送モデルの性能

推定モデルに適用される最終予測誤差(消防工程)基準から,最も複雑なモデルが優れていることがわかります。

Fpe (nlgr100, nlgr30, nlgr10)
0.5228 0.6771 4.7749

推定されたパラメ,タ,値は,開始値と比較してそれほど変更されていません。以下からわかるように,あまり使用されていない2つのモデルのパラメーター値は実際には実パラメーター値から乖離し,最も複雑なモデルとは反対であることが興味深い点です。このようになる理由は複数あります。集約が粗い,最小化手順によって局所的最小値に対応するパラメ,タ,値になる,などです。

disp (' True nlgr100 nlgr30 nlgr10');Ptrue = [1e-3;1 e - 3);流(' %1.7f %1.7f %1.7f\n'...[ptrue ';getpvec (nlgr100)”;getpvec (nlgr30)”;getpvec (nlgr10) '));
真nlgr100 nlgr30 nlgr10 0.0010000 0.0009952 0.0009759 0.0009879 0.0010000 0.0009952 0.0009759 0.0009879

次に,比较をもう一度利用して,3つの推定された信号伝送モデルのシミュレーションを実行します。

图比较(z, nlgr100, nlgr30, nlgr10, compareOptions(“InitialCondition”“零”));

図 5:3の推定された信号伝送モデルの実際の出力とシミュレションの出力の比較

3 .の例すべてで,一致は多少改善されています。パラメ,タ,推定の前後で取得した予測誤差を比較して、小さいながらも改善を認識できます。

peOpt = peOptions(“InitialCondition”“零”);e = {pe(z, nlgr100, peOpt) pe(z, nlgr30, peOpt) pe(z, nlgr10, peOpt)};Figtitle = {'nlgr100: e@''nlgr30: e@''nlgr10: e@'};图(“名字”[z。的名字“:预测错误”]);I = 1:3 subplot(3,1, I);情节(e{我}。SamplingInstants e{}。OutputData,“r”);标题([“估计”figtitle{我}z.OutputName {1}));轴(“紧”);结束

図 6:3の推定されたidnlgrey信号伝送モデルで得られた予測誤差

このチュ,トリアルのまとめとして,推定された信号伝送モデルの単位ステップ応答を調べます。これからわかるように,これらのすべてのモデルで伝達遅延を表現できるように思われます。ただし,これらの線形モデルの極はすべて虚数軸上,まり安定境界上にあります。このようなモデルのシミュレーションの実行には注意が必要で,この図に示すような種類の振動ステップ応答が発生することがあることが,よく知られています。

ここでの主な問題は,この種類の電信方程式は損失をモデル化しないことです。このような効果は”抵抗”(コイルと直列)と”コンダクタンスの抵抗”(コンデンサと並列)を図1の各Lh-Chサブブロックに追加することで付加できます。これによって,モデルはより安定し,シミュレ,ションは簡単になります。

图(“名字”[z。的名字':步骤响应']);Step (nlgr100, nlgr30, nlgr10);网格;传奇(“nlgr100”“nlgr30”“nlgr10”“位置”“西北”);

図 7:3の推定されたidnlgrey信号伝送モデルのステップ応答

まとめ

このチュートリアルでは,IDNLGREYモデリングを実行する際のオプションの入力引数の使用方法を最優先で説明しました。C墨西哥人ファイルタイプのモデル化を中心として,MATLABファイルでの実行方法も説明しました。特定の種類のシステムについて,通常よりも柔軟なモデルファイル(使用する状態の数)を設計すると便利なことがわかります(モデルの再利用)。このチュ,トリアルで扱った信号伝送システムは,このカテゴリでの一例です。