はじめに
まず信号処理や古典制御では信号とシステムの畳み込み演算が頻出します。この畳み込み演算はそれ相応に計算が面倒なのですが、実はこれがフーリエ変換(あるいはラプラス変換)した後ならば、ただの掛け算になるということで計算がだいぶ楽になるのです。
それが分かればフーリエ変換とラプラス変換の性質をしっかり見定めていき、フーリエ変換前に対する操作と、フーリエ変換後に対する操作にどのような関係があるのかを調べ尽くせば便利になりそうです。
といった具合で、だいたい突如として数式に入っていってしまうのですが、
まず畳み込み演算がなぜに現れ、何をしているのか、というところを見ないことには、数式でゴチャゴチャ変形していったところで結局イメージがつかめないということになってしまいます。
歴史的な経緯では当然連続信号(アナログ)の方が先で(例えば電流などはアナログ信号です)、教科書などもそれに沿って連続から入っていくケースが多いと思われます(制御の本は大抵連続しか話が載っていないのではないでしょうか)。連続だと極限がどうたらこうたらで、なんだか難しい議論に発展しがちです。
応用上はそういう話よりも、結局のところ何そしており、どんな旨味があるのかを知るのが先決だと考え、まず離散の場合から入ってイメージをつかむところから始めましょう。
ちなみにこの手の話は離散の方が連続より断然簡単であります。
離散信号と離散システム
離散信号
離散信号とは簡単に言えば数字の列(いわゆる数列)のようなものです。多くの場合は信号のindexは時間(電流(t)や電圧(t)など)ですが、光学系の場合は位置(光(x)など)であることも多いです。
離散信号の物理的意味合いは分野に応じて変わるものの、とにかく数字の列であって、今回は列に対するindexとしてを採用します。例えば離散信号とは、
(
は整数)
と書かれており、基本的には一次元配列のようなものだと思ってもらっていいでしょう(ただしは一般に負の値を取りますし、定義域は負の方にも正の方にも無限に広がっています)。
例えば以下のようなものはステップ信号として知られています。
何も難しいことはなく、の地点から永遠に
であり、それ以外では
となっている信号です。これがもっとてんでんばらばらでも構いません。こういうものを離散信号と呼びます。
離散システム
ここで、離散信号を入れたらそれを上手く加工して
に変化させてくれる装置があるとしましょう。仮に、この加工を自分の好きなように定めることができたらいろいろと便利だと感じるはずです。まさにこのように、離散信号から別の離散信号へ変換する装置を離散システムと呼びます。
形式的に書けば、入力をとして
を出力するシステムについて
などと書きます。ここでがシステムを表しています。
ということは先ほどのステップ信号について、信号の値を2倍にするような簡単な処理も「離散システム」と呼べることになります。その場合、単純に
という形で表現されることになります。こうやって見ると、なるほど「システム」というのはつまるところ入力を受け取ったら、別の出力を吐き出す関数みたいなものなのか、と思えてきます。実を言うと、そうかもしれませんし、そうじゃないかもしれません。今はそれがどんな呼び名であるかはさておいて、システムとは信号を別の信号に変える何かだということでとりあえず解釈しておきましょう。
システムと信号の応用上の扱い方
まず信号処理においては、「入力信号を○○な出力信号に変えたい」という要望があり、それを達成するシステムを構築しようと考えます。例えば、「入力信号には何かしらノイズが乗っており、ノイズが取り除かれた出力信号を得たい」というのは基本的な問題です。
この場合、入力信号は既知であり、出力信号は目標値として定められ、それを達成するシステムを求めるのが解きたい問題になります。
制御工学においては、「とあるシステムがあり、システムが狙い通りの出力をしてくれるような入力信号を獲得したい」という問題を考えることになります。例えば、「ロボットアームというシステムに望み通りの動きを機敏に正確に行って欲しいため、それを達成するような上手い入力電力を考える」というのは基本的な問題です。
この場合、システムは既知であり、出力信号は目標値として定められ、それを達成する入力信号を求めるのが解きたい問題になります。
いずれの問題意識にしても、入力信号とシステム
、出力
の関係
について解析する手段が必要になります。それらがフーリエ変換やラプラス変換として出てくるのですが、更にもう少し初歩的なところを見ていきましょう。
具体的なシステム
システムについて具体的なものを何個か見てみることにしましょう。今はどのようなシステムがどのような働きをするのかということはそれほど気にしません。とりあえず入力と出力を適当に記述してみましょう。
入力信号とシステム
、出力信号
との関係は
でした。とりあえず先ほど見たような
は入力信号の各indexにそれぞれ作用して値を2倍にするシステムだと言えます。次に、少し自分で考えたシステムを作ってみましょう。「入力信号において、ひとつ前のindexの値と現在のindexの値の和を取って出力するシステム」を考えてみましょう。これはとても簡単です。
と書くことができるでしょう。このシステムがどのように働くのか、入力信号がステップ信号である場合について具体的に見てみましょう。ステップ信号とは以下のような信号でしたね。
システムの出力を見たければ、をいろいろ変えて実際に見ていけばいいだけです。とりあえず
のところを見てみましょう。
同じようにから
まで調べて行っても出力は
になっているはずです。そしていよいよ
の地点から
出力が出てきました。さて同じように調べてみると
と続いて、どうやらこれ以降はずっとを出力してくれそうです。おおよそ以下のように動作するようです。
今見たのは、「手元の入力とシステムが分かっている時、どんな出力が得られるのか?」という問題に対する解です。そして実際には「手元の入力信号を望みの出力に変えるようなシステムはどんなふうに表せばいいんでしょうか?」とか、「システムと望みの出力があるときどんな入力が必要か?」という問題を考えていくわけです。
どの立場に経つことになっても、私達が知らなければならないのは「どんな信号が入った時に、どんなシステムが、どんな出力を行うか」です。
さて、今後どんな立場に立つかは分かりません。そして信号としてどのようなものを考えなければならないのかも分かりません。そのような場合において上手く、簡単に議論ができるような方法が必要になります。
以下では、問題を単純化するための手段を見ていきましょう。
何らかの信号のステップ信号による表現方法
ここで信号についてもうちょっと詰めて考えてみましょう。ここでの信号は入力の話なのか出力の話なのかは問いません。信号なるものを一旦広く考えてみましょう。
仮に以下のような信号を数式で表現するにはどうすればいいでしょうか。
とりあえず場合分けをしてやることにすれば、
で表現できそうです。ここで、一旦さっきまで見ていたステップ信号を詳しく見てみましょう。ステップ信号とは
というものでした。すなわち「indexが0以上になったときに1の値を取る信号」です。ここで重要なのは「indexが0以上になったとき」という点です。の中身が
になるタイミングが重要なのです。もしも1になる開始地点をずらしたければ、indexを平行移動してやればよく、
というものを考えてやることにすれば、indexの中身が0になるのはの地点からになります。式で表しておけば
と言うことになります。もっと一般に
という信号を考えることができます。これはでindexが0になるので、
の地点から信号が
に立ち上がるということです。このような一般化されたステップ信号を導入してやれば、先ほどの信号をよりスマートに表現することができます。
としてしまうのです。これは要するに、以下のようにステップ信号の開始地点をずらしたものを足し合わせていくということになります。
+)
=
おい!どこがスマートなんだ!!なんだか余計面倒になっているじゃないか!!という気がするかもしれません。
しかし、この簡単な信号の足し合わせで表現しておくというのが、実は信号処理でも制御工学でも肝になってくる考え方です。
インパルス信号
もう少し我慢してお付き合いください。
実は他にも表現方法はあります。以下のような信号を導入しましょう。
これはindexがの時のみ値を取るということを意味しています。つまり、
のような形になります。
このようなある地点でのみ値という値を持つ信号を、インパルス信号と呼びます。
もしも以下のように場所がずれたインパルス信号を考えてやりたければ、再びindexを並行移動してやることを考え、
というふうに記述しておけば良いのです。こいつは確かにでindexが
を取るので、上記の信号を表してやることに成功しています。さて、こちらも一般化してやれば
としてやることで、でindexが
を取る事になります。こいつを使えば、なんだかどんな信号でも
で表してやれそうです。が地点
における値を表していますので、結局、私達は各地点
毎に
の値を調節してやることだけを考えれば良いことになります。
もしも以下の信号
を考えるならば、地点においては
という値を持っているのがすぐに分かります。ですので、
という形で表現できます。一度具体的なについてシグマを書き下しておきましょう。
こいつは右辺でのindexの中身が0になることは無いので、値は0です。
こいつは第一項のだけが1となり、その係数が1なので、1という値を取ります。他の
は0になって寄与しません。
こいつは第二項ののみが寄与してきます。以下同様に計算を進められます。このように寄与する
をindexによって操作しておくことで、いろいろな信号
が
との足し合わせで表現できるようになるのです。
しかし、またもやなんだか見かけ上は非常に複雑になってしまったように見えます。というか、むしろ、「が
に代わっただけじゃないかい!!!」と思うところでしょう。
それは実際のところそうです。本来のindexであるの方は
に肩代わりしてもらって、とある固定された
を考えて、足しあわせているだけに過ぎません。しかし、このように足し合わせる形にできることが極めて重要なのです。
次に、なぜこのように、一見複雑に見える形で表現しておくのか、その理由を以下に見ていきましょう。
システムの重大な性質「線形性」と「時不変性」
線形システム
新たな言葉を導入します。「線形システム」というものです。
線形システムとは、入力信号が
]複数個あった時に、これを適当な線型結合した信号
を入力した場合に
となるようなシステムのことを指します。Σ記号を使えば
と書き表すことができます。 これはつまるところ何をいっているのかというと、線形システムについて、何か複雑な入力
について考えなければいけない時には、線型結合される前の簡単な入力1つ1つについて
というものを考えてやって、後からを掛けてやり、
ということで済ましてやっても全く同じになるということです。これは非常に便利です。なぜなら、
複雑な入力信号が得られて、これが全く手に負えなさそうだったとしても、それを簡単な信号の集まりであると考える事ができたならば、私達はその簡単な信号に対するシステムの振る舞いを知りさえすれば、それで問題が解決するからです。
線形システムの振る舞いを知る方法
さて、入力信号をindexをずらしたインパルスの集まりであると考えることができることを先ほど見ました。これは線形システムに取っては重大なことです。
何らかの信号があった時、とりあえず
と書けるわけですから(がどんな具合になるのかはわからなくても、とにかく上のように文字でおいておくことはできる)、こう表しておいた信号を線形システム
に入力すると
というふうに、右辺まで変形することができ、実際にシステムについて考えなければいけないのはだけということになるのです。繰り返しになってしまいますが、これは驚くほど問題が単純化されたことを意味しています。
入力信号
については信号がどんなものであるかを記述することになりますが、それがどのようなものであれ、入力信号をシステム
に入れた場合には、システムが関与するのは
に対してのみであるということです。
私達が線形システムについて知りたいのならば、
システムがインパルス
に対してどのように振る舞うのかさえ知るだけでいいのです。
時不変システム
線形という言葉は至るところで出てきますので、きっとそこまで抵抗はないでしょう。しかし時不変という言葉は中々聞き慣れないのではないでしょうか。まずは時不変システムの定義を先に与えてしまいます。
まず信号に対するシステム
の出力が
となっているとしましょう。このとき信号に対する
の出力が
となるようなシステムを時不変システムと言います。これは要するに、入力信号を平行移動してからシステムに入れることと、入力信号をシステムに入れてから平行移動することが同じ操作になってなっているということです。
結構、「一体これは何のことだ?アタリマエのことじゃないか?」と思う人がいます。
どんなシステムでも時不変というわけではないのです。全く同じ形の信号を入れているにも関わらず、入れるタイミングが異なるだけで出力信号の形が変わってしまうようなシステムもあるのです。そのようなたちの悪いシステムのことを時変システムと言います。
図で見ておきましょう。時不変システムとは例えば以下のように振る舞います。
入力信号のindexが2だけ右にずれていたら、出力も右に2だけずれています。これは、この記事の最初のほうで見た
というシステムです。一方で時変システムとしては以下のようなものが考えられます。
このシステムは以下のように振る舞うことは簡単に確認できます。
これは入力を右に2ずらしたからといって、出力もそのまま右に2だけずれるわけではないのです。(似た形にはなっているが、indexの外に出ているが効いてる)
なぜ、この時不変なる概念をわざわざ考えるのかを見ましょう。
線形時不変システムの振る舞いを知る方法
まず時不変システムについては入力信号を平行移動した場合に新たにシステムの振る舞いを解析する必要はありません。入力を平行移動する前のシステムの出力を平行移動したものが出てくるに決まっているからです。
さて入力信号というのは
で書き表せるのでした。これに対する線形システムの出力は
と表せました。システムに関与しているのはの部分でしたが、このシステムが更に時不変性を有するのであれば、いろいろな
に関して
を考えてやる必要など無くなります。
なぜならを
だけ右にずらしたものが
であることが分かっているからです。
線形時不変システムにおいて知らなければならないのはインパルス信号に対する振る舞いだけなのです。これをインパルス応答と言います。
このインパルス応答が分かれば、任意の入力信号について、インパルス応答を平行移動し、線形結合したもがシステムの出力になります。したがって、信号処理や(古典)制御工学では、インパルス応答が非常に大事になってくるのです。
一応式を書いて説明しておくと、インパルス信号を入力した時のシステム
の出力(インパルス応答)を
と書き表しておけば、任意の入力信号に対して、その出力
は
を平行移動して足したり引いたりすれば、表せるということです。
畳み込み演算
さて、信号処理でも制御工学でも必ず登場するのが「畳み込み演算」です。と
の畳み込み演算の結果を
とすると
と表されます。さて、なんだか奇妙な式です。大抵の場合、これが突如として出てきて、一体何を意味しているのか謎のまま終わってしまいます。しかし、線形時不変システムのことを思い出すと、このような計算が非常に自然に現れます。
とある線形時不変システムのインパルス応答を
とします。これはもはや具体的な信号になっています(インパルス信号に対する出力でした)。そして任意の入力信号を
とします。これに対するシステムを
書き下してみましょう。
これはこれまでの説明を、単に数式で述べていくだけです。
そして、任意の信号は以下のような形をしているのでした。
システムは線形であるので
となります。ところでシステムは時不変であるので、
です(平行移動されたインパルス信号の出力は、インパルス応答を平行移動するだけ)。よって
と表せます。畳み込み演算が出てきました。ここでの方というのは決して本質的なindexではありません。
によって足し合わされた暁には消えてしまうものです。単に信号のある地点を指し示すために使われるダミーindexです。
は一応
から
まで動いてもらうことにしましょう。仮に地点
において、
の値が
になっていれば、そこの和は無視できるし、プログラム上は意味のある範囲だけを考えればいいです。
今、上記のような式で
というさらなるダミーindexを準備すると
と表すことができます。ちなみにこの場合もの動く範囲は
から
です。この式を上記の式に代入してあげれば、
であり、このも結局は足し合わされた際には消えるダミーindexなので、
と書こうがなんと書こうが左辺に影響はなく、こちらも
で書くことにして
という重大な結論が得られます。
まあ、だいたい、というのは
の
の地点の値のことであり、(線形性の議論を見るために、インパルスを導入してきたが)ここまでこれば
としてしまっても構わないでしょう(そういう意味では今回の記事はかなり回り道しました)。
最後に
まとめ
線形時不変システムの入力
と出力
の関係について考えるときは、システム
に関することはインパルス応答
のみを考えておけばよく、
で表されるということになります。
更に勉強をすすめるために
線形時不変システムについては
を解析すれば良いということになりますが、実問題においては「入力信号が手元にあり、希望する出力を勝手に決め、上手いシステムを作る(これはつまり上手いインパルス応答を作る)」ということや「システム(インパルス応答)が既知であり、希望する出力を勝手に決め、それを達成する入力を考える」ということになってきます。
単に既知システムと手元の入力から出力を得るという方法は、上記の式を実行するだけで終わりですが、実問題では大抵右辺のか
を上手く作りたいということになり、これは中々一筋縄にはいかなそうです。
しかし、フーリエ変換やラプラス変換というものを用いると、右辺の畳み込み演算が単なる掛け算になるという驚異的な事実が見られます(大体ここもあっさり終わる)。単なる掛け算になってしまえば、当然、の形や
の形にするのもだいぶ容易になってきます。
周波数解析
これが基本的な制御や信号処理の導入部分になるので、ここを把握した上で周波数解析に進んでいくことになります。そこに入る前の補足として、線形システムというのは入力がなんであれ、線型結合で表されれば、個々の信号に対する振る舞いを見てからあとで足し合わせれば良いというのが肝でした。
ということは、入力信号をフーリエ変換を通して三角波の和であると考えることができれば、個々の三角波(違いは周波数だけになるわけ)に対するシステムの振る舞いが分かれば全てが分かったことになるのです(今回は畳み込み演算まで見るために、信号の方をインパルスの集まりだと見ましたが、三角波の集まりだと見てしまってもいいのです。そして入力信号を人間がどう見ようが、線形時不変システムの振る舞いが、インパルス応答だけで分かるという事実は覆りません)。
周波数解析では、インパルス応答がシステムの全容を表してくれるのに加え、正弦波を入力した際のシステムの振る舞いも見るようになります。しかし、フーリエ変換は二乗可積分に対してのみしか値を持てません。そこでラプラス変換というのは、任意の信号を二乗可積分に無理やり抑えこんでからフーリエ変換を行います。
後から二乗可積分に押さえ込んだという謎の操作を無効化することも可能(抑えこむ操作をしてないのと同じ操作をしたことにする)であるため、基本的には制御ではラプラス変換の方を主体的に使っていきます。
連続の場合
連続の場合、形式上はシグマがインテグラルに変わるだけで、単に和が積分になりましたという話なのですが、これを数学的にしっかりやるのは意外と面倒です。数学が厳密性を必要とするようになったのは極限絡みが多く、今回で言うところのインパルス信号(ある地点にのみ瞬間的に生じている信号)を考えるのが難しいです。
フーリエ変換自体もかなり込み入った話であり、超関数だとか無限次元だとかの関数解析の必要性はこの辺りから生じてきます。
が、多分、工学的な応用上、ひとまず放っておいていいと思います。