実際に使える制御工学:寄り道編(5)「システム同定時の入力信号。どんな信号が正解か?」
<この記事で伝えたい事>
適切な信号を入力しないと、正しくシステム同定するのは難しいです
例えば、$${1_{[Hz]}\sim 1_{[kHz]}}$$の範囲でシステム特性が知りたいなら、$${1_{[Hz]}\sim 1_{[kHz]}}$$の成分を持つ信号を入力して動きを見る必要があります。
(動きを見ないことには、特性を知りようがないので)システム同定によく使われる入力は、見たい範囲の周波数成分をまんべんなく含む信号です
私が知る範囲では、チャープ信号、M系列信号、インパルス信号の3つが、この特徴を持ちます。
大抵、システム同定には、これらのうちどれかが使われます。
1. はじめに
自己紹介はこちらです。
この記事は、正しくシステム同定できる入力信号の紹介・解説のために書いています。
2. チャープ信号
チャープ信号には、スイープ信号(掃引信号)という別名があります。
これは、SIN波の周波数がリアルタイムに変わっていく信号です。
開始時周波数を$${f_{0[Hz]}}$$、
終了時周波数を$${f_{1[Hz]}}$$、
開始から終了までの時間を$${T_{[s]}}$$、
チャープ信号の振幅を$${A}$$、
とすると、チャープ信号$${x}$$は以下の数式で生成できます。
$$
x_{(t)}=A\cdot sin\left(2\cdot\pi\cdot\left(f_0\cdot t+\cfrac{f_1-f_0}{2\cdot T}\cdot t^2\right)\right)
$$
$${f_0}$$が$${f_1}$$より小さいと、時間経過と共に周波数が上がっていきます。
逆に、$${f_0}$$が$${f_1}$$より大きいと、時間経過と共に周波数が下がっていきます。
$${f_0,f_1,T,A}$$は、かなり自由に決められますが、いくつか制約があります。
$${f_0<f_1}$$のときの制約は以下のとおりです。
$${\bm{T}}$$は$${\bm{1/f_0}}$$以上でなければならない
コンピュータで信号生成する場合、$${\bm{f_1}}$$はナイキスト周波数$${\bm{f_n}}$$以下でなければならない
下2図は、$${f_0=1_{[Hz]},f_1=500_{[Hz]},T=1_{[s]},A=1_{[-]}}$$としてコンピュータに生成させたチャープ信号と、その周波数解析結果です。
(サンプル周期は$${1_{[ms]}}$$)


上側の図から、時間経過と共にSIN波の周波数が上がっていく様子が分かります。
また、下側の図から$${f_0(=1_{[Hz]})\sim f_1(=500_{[Hz]})}$$までの成分をまんべんなく含むのが分かります。
(端の方は除いて)
記事の冒頭で述べたとおり、
「指定した範囲の周波数成分をまんべんなく含む」
という性質が、システム同定においてチャープ波がよく使われる理由です。
なお、開始から終了までの時間を$${T_{[s]}}$$を長めにすると、チャープ信号の周波数解析結果の端の凹みが緩和します。
(下図は$${T=5_{[s]}}$$にしたときのチャープ波の周波数解析結果)
![チャープ信号の周波数解析結果(T=5[s]のとき)](https://assets.st-note.com/img/1785633670-vk53B6UGLu1JEigbT9Zop4X0.png?width=1200)
このため、開始から終了までの時間はなるべく長くとった方が、精度良くシステム同定できます。
ただ、振幅は小さくなるので、定数ゲインを掛けるなどして、振幅を大きくすることも同時にやる方が良いです。
3. M系列信号
M系列信号とは、擬似的なホワイトノイズ(白色雑音)信号です。
ホワイトノイズとは、全ての周波数成分の振幅が同じであるノイズです。
この特徴は、チャープ信号のそれと同じです。
よって、M系列信号は、チャープ信号と同じ理由でシステム同定によく使われます。
また、M系列信号には、$${0}$$と$${1}$$だけで成り立つという特徴があります。
このため、M系列信号はコンピュータとの相性が良く、基本的にコンピュータで生成します。
M系列信号生成用のバッファ数が$${n}$$のとき、M系列信号$${x}$$は以下の数式で生成できます。
($${x_{(k)}}$$は現在のM系列信号データ、$${x_{(k+n)}}$$は$${n}$$サンプル未来のM系列信号データ)
$$
x_{(k+n)}=h_n\cdot\left((h_{n-1}\cdot x_{(k+n-1)}+\cdots +h_0\cdot x_{(k)}) mod 2\right)
$$
$${X mod 2}$$は、$${X}$$を$${2}$$で割ったときの余りを意味します。
例えば、$${3 mod 2=1}$$です。
($${3}$$を$${2}$$で割ったときの余りは$${1}$$のため)
$${X mod 2}$$は、$${1}$$か$${0}$$にしかなりません。
M系列信号を生成するには、欠かせない特徴です。
$${h_n\sim h_0}$$は原始多項式と呼ばれる数式の係数です。
原始多項式$${f_{(a)}}$$を数式で表すと、以下になります。
$$
f_{(a)}=h_n\cdot a^n+h_{n-1}\cdot a^{n-1}+\cdots +h_1\cdot a+h_0
$$
信号処理分野での原始多項式とは、因数分解できない多項式のうち、ある特別な性質を持つものです。
しかし、数学分野での原始多項式とは、$${h_n\sim h_0}$$の最大公約数が1の多項式です。
ややこしいですよね。
本記事でいう原始多項式は、信号処理分野におけるそれです。
それは一旦置いておくとして、M系列信号を生成する上で重要なのは、
原始多項式係数$${h_n\sim h_0}$$はいくつか?
ということです。
付録1に一覧表を載せておくので、必要な方は参照ください。
下図は、M系列信号の生成方法をブロック線図で表したものです。
個人的には、M系列信号生成方法については、数式よりブロック線図の方が分かりやすいと思います。
(ちなみに、$${h_n}$$は必ず$${1}$$)

このブロック線図から分かるように、M系列信号生成の数式は、$${n}$$サンプル未来のデータをあらかじめ計算しておくものです。
計算結果はバッファに溜めておき、$${n}$$サンプル経過した後に出力します。
このため、バッファは全部で$${n}$$個あります。
M系列信号は擬似的なランダム信号ですが、$${2^n-1}$$サンプル周期で同じ波形を繰り返します。
(バッファの初期値が全て$${0}$$だと信号が生成されないので、どれか1つは初期値を$${1}$$にする必要あり)
例えば、$${n=10}$$とすると、$${1023(=2^{10}-1)}$$サンプル周期で同じ波形が繰り返されます。
1サンプルを$${1_{[ms]}}$$とすれば、$${1023}$$サンプルは$${1.023_{[s]}}$$です。
このとき、同定できる最低周波数は$${0.9775(=1/1.023)_{[Hz]}}$$です。
より低い周波数の特性を見たい場合、$${n}$$を$${10}$$より大きな数字にする必要があります。
下2図は、$${n=10}$$としてコンピュータに生成させたM系列信号と、その周波数解析結果です。
(サンプル周期は$${1_{[ms]}}$$)


M系列信号は、あくまで疑似的なホワイトノイズ信号です。
このため、チャープ信号と比べて各周波数の振幅がバラつきます。
また、パルス状の信号のため、チャープ信号より滑らかさに欠けます。
動きが滑らかな方が機器を傷めにくいので、これもチャープ信号に対するデメリットですね。
チャープ信号と比べるとデメリットの目立つM系列信号ですが、メリットもあります。
それは、論理演算で生成可能なことです。
論理演算は、コンピュータの得意とする計算です。
論理演算を使うと、M系列信号を生成する処理の負荷が小さくて済みます。
計算リソースの限られた工業製品(ロボットコントローラ)にとっては、有難い特徴です。
詳細については、付録2を参照ください。
4. インパルス信号
意外かもしれませんが、インパルス信号は全ての周波数成分をまんべんなく含みます。
このため、インパルス信号を使ってシステム同定をするケースもあります。
下2図は、コンピュータで生成したインパルス信号と、その周波数解析結果です。
(コンピュータ生成のため、擬似的なインパルス信号であり、1サンプルだけ数値を「1」にして、他はゼロにしました)


下側の図を見てのとおり、各周波数の振幅が完全にフラットです。
その点だけ見ると、システム同定に使う信号として理想的に思えます。
ただ、インパルス信号は一瞬だけ立ち上がるものなので、全体的な振幅は小さくなります。
(チャープ信号やM系列信号に比べると、おおむね1桁小さい)
結果、あまり制御システムが動かない・摩擦のせいで全く動かない、という状態に陥りやすいです。
そのとき、高精度な同定は期待できません。
高精度にシステム同定したい場合、インパルス信号はあまり使われない印象があります。
5.信号の入力箇所
さて、どんな信号を入力するのが良いか分かったなら、次に考えるのは
「それをどこに入力するか?」
ではないでしょうか?
ただ、それを深く考える前に、ざっくりとした制御システムを把握しておくのがベターと思います。
その「ざっくりとした制御システム」のブロック線図が下図です。
(ケースバイケースで、別の形を想定した方が良い場合もありますが)

$${C_{(s)}}$$は制御器の伝達関数、
$${R_{(s)}}$$は制御対象の伝達関数、
$${G_{d(s)}}$$は遅延要素の伝達関数(主にセンサ遅延)、
$${H_{(s)}}$$はフィードバックフィルタ伝達関数(仮称)
です。
また、
$${x^{ref}}$$は指令信号、
$${\tau}$$はトルク(制御入力信号)、
$${y}$$はセンサ検出信号、
です。
コントローラはサーボON(通電中・制御有効)なことを前提とすると、私が良いと思う信号の入力箇所は2つあります。
1つめのオススメ入力箇所は、下図のトルク信号部分です。
($${\tau_d}$$がシステム同定用の入力信号)

$${x^{ref}}$$は、システム同定開始時の$${y}$$と同じにします。
すると、$${\tau_d-y}$$間伝達関数は以下になります。
(入力信号を$${\tau_d}$$、出力信号を$${y}$$として同定)
$$
\cfrac{y}{\tau_d}=\cfrac{P_{(s)}\cdot G_{d(s)}}{1+C_{(s)}\cdot P_{(s)}\cdot G_{d(s)}\cdot H_{(s)}}
$$
2つめのオススメ入力箇所は、下図のセンサ検出信号後段部分です。

このとき、$${y_d-y_2}$$間伝達関数は以下になります。
($${y_2}$$がセンサ検出信号$${y}$$と$${y_d}$$との和である点に要注意)
$$
\cfrac{y}{\tau_d}=\cfrac{1}{1+C_{(s)}\cdot P_{(s)}\cdot G_{d(s)}\cdot H_{(s)}}
$$
これら伝達関数から、以下のように制御対象+遅延要素の伝達関数を求められます。
$$
\begin{array}{ll}
\cfrac{y}{\tau_d}\cdot \cfrac{y_d}{y_2}&=\cfrac{P_{(s)}\cdot G_{d(s)}}{1+C_{(s)}\cdot P_{(s)}\cdot G_{d(s)}\cdot H_{(s)}}
\cdot\cfrac{1+C_{(s)}\cdot P_{(s)}\cdot G_{d(s)}}{1}\\
\\
&=P_{(s)}\cdot G_{d(s)}
\end{array}
$$
センサで制御対象の出力を検出する以上、$${P_{(s)}}$$と$${G_{d(s)}}$$は不可分です。
$${P_{(s)}}$$と$${G_{d(s)}}$$の切り分けをしたい場合、数理モデルで$${P_{(s)}}$$を導出し、それで説明のつかない位相遅れを$${G_{d(s)}}$$によるものと考えるのが良いでしょう。
また、工夫すれば、制御器$${C_{(s)}}$$やフィードバック信号フィルタ$${H_{(s)}}$$の特性を同定することも可能です。
$${C_{(s)}}$$や$${H_{(s)}$$が設計どおりの特性を持つよう実装できているか確認するには役立つ使い方です。
6. おわりに
この記事では、システム同定時の入力信号を紹介・解説しました。
前回の寄り道編(4)でシステム同定方法を紹介・解説しましたが、どういう信号を使うべきかまでは話していませんでした。
このままだと片手落ちになるかなと思えたので、今回の記事を書くことにました。
ちなみに、私はチャープ信号派です。
その理由は2つあります。
1つめは、他信号に比べて波形が滑らかで、機器を傷めにくいという実務的なものです。
2つめは、面白い音が鳴るからです。
仕事はキッチリやるという前提あっての話ですが、楽しめる要素はあった方が良いでしょう?
さて、寄り道編で書けることはまだいくつかありますが、次に何を書くかは未定です。
それでは、次回もよろしくお願いします。
付録1. 原始多項式係数表
下表は、次数3~7までの原始多項式係数をまとめたものです。
原始多項式係数は1パターンだけではありませんが、M系列信号を生成するには1パターンだけ分かれば十分です。
(“-”(ハイフン)はデータなしの意味)

下表は、次数8~20までの原始多項式係数をまとめたものです。
当然と言えばそうですが、多項式の次数分だけ係数も存在します。
(次数8なら、多項式係数はh0~h8まで存在)
それをそのまま1つの表にまとめるのは大変なので、この形を取りました。

それでは、この表の読み方を説明します。
例えば、次数11の場合、多項式係数は16進数でEF3です。
これを2進数に変換すると、1110 1111 0011になります。
一番下の桁の数が原始多項式係数$${h_0}$$で、1番上の桁の数が原始多項式係数$${h_{11}}$$です。
仮に、サンプル周期$${10_{[μs]}}$$という高速処理をしても、20次あれば約$${0.1_{[Hz]}}$$まで同定可能です。
実用上、20次まで分かれば問題ないと思います。
付録2. 論理演算を用いたM系列信号の作り方
下図は、論理演算を用いたM系列信号生成器のブロック線図です。

⊕はXOR(排他的論理和)演算です。
(足し算ではありません)
XORは、2つの入力が同じなら$${0}$$を、違うなら$${1}$$を出力します。
これで3章と同じM系列信号を生成できます。
前回:寄り道編(4)「システム・パラメータ同定」はこちら
次回:寄り道編(6)「制御の小技や豆知識」はこちら
