信号解析 第8回講義録

 

日時:2006年6月19日

講義内容:コーヒーブレイク

担当者:情報知能工学科 小島史男

 

1. はじめに

 

 このところ中間小テストの前後の遅れを取り戻すために、すこしとばしました。急に難しくなったとか、参考図書を読んでいるのだけど難しくてよくわからないといった感想が当方に飛び込んでいます。またこの間の宿題のプログラムが動かないという声も聞こえました。できれば講義の予定どおり突っ走りたいところですが、気がついたら後ろに誰もいなかったというのでは困ります。そこで本日はすこし一服、いままで学習したことを振り返りながら、すこしだけ前に進むことにします。

 

2. 講義の内容を理解するコツ

 

 ここでいうことは、受講者のみなさんすべてにあてはまるかどうかわかりません。あくまでも自身の経験にもとづいていっていることですので、ご承知ください。基礎力をみっちり養ってから先へ進むのが学問の王道かもしれません。しかし、たとえば、確率論の基礎概念を徹底的に理解してから、そして複素積分論を徹底的に学んでからスペクトル解析や信号解析をやるべきだなどといったら、一生この分野の学習はできなくなります。基本的な学習は関連分野があったときに必要な部分だけ見直して一定の理解を得れば十分です。知識を習得する本質はやはり学ぶ必要性を自身が感じるかどうかです。といって、なぜ学習する必要があるのかを、あまり事細かにこちらが教えても仕方がありません。みなさんは、もともと一定の学力を持っているのですが、関心の対象はそれぞれ違います。目的がはっきりしない学習はやはりつらいものがあります。そこで以下に2つのコツをお知らせします。

 

(1)学習した項目はかならず自分自身で確かめよう。

身近な問題を扱えば、ここで学習していることの意味がある程度見えてきます。たとえば、これまでの学習からは以下のようなことを確かめてみるのはいかがですか。

(a) 時系列信号の自己共分散関数を調べることでなにがわかるか?

(b) 自己共分散関数のDFTとピリオドグラムをデータから直接計算した結果とは一致するだろうか。いろいろな事例を調べて検討しよう。また時系列データの不規則性をピリオドグラムからどのように読み取れるか調べよう。

(c) ホワイトノイズを生成するシミュレータをC言語で作ってみよう。

(d) 時系列モデルの信号を生成しましょう。またこのデータから、自己共分散関数、ピリオドグラムを求めましょう。また理論公式とそれらは合致するでしょうか。

 

以上のようなことをひとつひとつ地道にやってみれば、以外に簡単なことをやっていることがわかるかもしれません。試験前に無理につめこむのではなく、普段時間に余裕があるときにこそ学習を積み重ねていくことが大切です。無理をせず上に上げた項目の1つでも2つでもよいですからチャレンジしてみてください。

 

(2)重要な項目は3回繰り返し学習しましょう。

書物を本当に理解するには3回読み返すことが必要といわれています。戦前の首相で海軍大将でもあった米内光政氏が当時の慶應義塾の塾頭小泉信吉氏に当てた手紙に

「第1読は恰も飢えたるものの食を貪るような早さで 第2読は相当咀嚼しつつ漫々的に読了致し候 第3読ではじめてホントウの人間味を味わい得る様な気が致し申し候」

という手紙を書かれています。読書家であった米内氏が小泉氏から送られた著書に対する返礼ですが、学問をするときにもこのような態度は大変効果があります。1回目は復習ですね。みなさんのノート、授業中考えたこと、ホームページから、課せられた宿題をやるには一応何をどうするのか。とにかく物まねです。宿題をやってみると、わかったつもりでいただけのときがよくあります。このときに参考図書をもう一度見直してみましょう。なんとなくわかったら、問題の本質を調べるために、もう一度宿題の内容を自分で確かめてみます。そうすることにより考えがまとまってきたら、今度はもう一度参考図書をひもとくと、なぜこのような説明になっているのかがだんだんとわかってきます。市販の参考図書をむずかしく感じるのは、学問の背景を知らずに、知識の体系化をいきなり理解しようと試みるからだとおもいます。昔から「急がば回れ」ということわざがありますね。

 

3.宿題を解くときの手段

 

この授業では、プログラムを作る負担でかえって内容を理解することがともすればおざなりになることを危惧して、本年はEXCELで問題を解くことを進めています。とはいっても、EXCELを持っていない受講生もいるかもしれませんので、その対策についてここにお知らせします。ただしみなさんは何らかのコンピュータは所有している、もしくは使えること、およびそのコンピュータがネットワークにつながっていることを前提としてお話しします。今回お渡ししたプログラムは一部修正し忘れたりすることもあり、これらは各自で直して使ってください。開発環境によってプログラムがそのままコンパイルできないことは往々にしてあることは承知してほしいとおもいます。Windows XPでは、Visual Studioという優れた開発環境があり、プログラムのデバッガーもすばらしいものです。しかしアカデミックプライスでも安価なものではありません。一般的にフリーの開発環境を望むのであれば以下の2つの方法が考えられます。

(1) Window XPプラットホームでCygwinを使う

これは一番安易で簡単ですが、これをX Windows環境で使うには現状ではあまり安定していません。あくまでもコンソール環境で使うのでしたら、gccというフリーのCコンパイラがありますので、Window XP上の適当なEditor(たとえば 秀丸(シェアウエア)NoEditor(フリー)など)でプログラムを作成しCygwinコンソールでコンパイルして実行することができます。プログラムのダウンロードの方法はたとえば

http://sohda.net/cygwin/setup.html

などで確認することができます。

(2) Linux環境をハードデイスクにつくる

ハードデイスクを増設できるヒト、もしくはハードデイスクのデイスク領域を再設定してWindowXPを入れ直す勇気のあるヒトは是非LinuxOSをいれてください。日本語にこだわるのでしたら、現状ではVineがいいでしょう。Vine Linuxのインストールはたとえば

 http://vinelinux.org/manuals/install-vine.html

を訪問してください。本格的にUNIXをあじわうことができます。

 

さてC言語のコンパイルでは一般的にMakefileを作ります。これは1種のスクリプト言語のようなものですので、その約束事を覚えておくと便利です。たとえば、このあいだの宿題でダウンロードしたプログラム群をコンパイルするには以下のようなMakefileをつくり%プロンプトからmakeとするだけです。

 

fitt: lsqr.o reduct.o regres.o pttpl.o setx.o hushld.o comaic.o recoef.o matrix.o nrerror.o

              cc -o fitt lsqr.o reduct.o regres.o pttpl.o setx.o hushld.o comaic.o recoef.o matrix.o nrerror.o -lm

 

lsqr.o: lsqr.c

              cc -c lsqr.c

reduct.o: reduct.c

              cc -c reduct.c

regres.o: regres.c

              cc -c regres.c

pttpl.o: pttpl.c

              cc -c pttpl.c

setx.o: setx.c

              cc -c setx.c

hushld.o: hushld.c

              cc -c hushld.c

comaic.o: comaic.c

              cc -c comaic.c

recoef.o: recoef.c

              cc -c recoef.c

matrix.o: matrix.c

              cc -c matrix.c

nrerror.o: nrerror.c

              cc -c nrerror.c

 

上記コンパイル命令のなかの-lm<math.h>へのリンクオプションを意味しています。Visual Studioなどの開発環境を持っている場合はもっと簡単にコンパイルすることができます。またEXCELについてもOpenOfficeというフリーソフトの環境がありますので、そちらを使ってもできます。これはWindows版、Linux版ともありますので、興味のある人はダウンロードして使ってください。こちらで動作環境は調べていませんが、たぶんほとんど問題なく動作するとおもいます。

 

3.これまで学習してきたこと、これから学ぶこと

 

信号解析では、最初にまず時系列信号が与えられたとき、その特徴量を求める手段を学習しました。自己共分散関数、その離散フーリエ変換であるピリオドグラムがそうです。次にデータの不規則性を記述する統計モデルと不規則信号の評価法を学びました。カルバックの情報量尤度関数、そしてAICがそうです。続いて今度は不規則信号をシミュレートする手法を学習したところです。ARMAモデルを作るプログラムは是非作ってみてください。Cプログラム例は本日の講義分としてアップしておきますので、参考にしてください。残り3回は時系列信号からARモデルのパラメータ同定手法を紹介し、最後の2回はカルマンフィルタについて説明します。

 

4.宿題について

 

 本日の講義後の質問にもありましたが、いままで宿題を出していない受講生も本日の説明からチャレンジしてみてください。期日後の宿題も受け付けています。要は授業に参加することが大切です。疑問に思ってさらにやり直した結果をまとめてだしてもらってもなお結構です。このあいだのAICの宿題(5月22日分)をやっていない受講生は是非トライしてください。Makefileをつけたプログラムを再アップしておきます。AICの宿題では次元をどんどんあげていって70次元ぐらいまで確かめた受講生がいました。大変結構です。AICの値は何度も周期的に変化したそうです。阪神電鉄の場合秋口に株価が大きく変動しています。このような変動箇所の存在は最適な次元決定を難しくします。試しに、この大きな変化の時期の前後だけでAICを求めてみると大きくことなってくるはずです。次元決定は設計者の判断で決めるものですから、最適な次元は一般には簡単に求まることはないのです。ただ参考値としての値も調べてみてください。この値が小さいほど振れ幅が小さく信頼度が高くなります。いろいろな角度から宿題の内容を考察してみることは内容を理解するもっとも良い方法です。

 

本日の宿題:プログラムをアップしておきますので、適当なAR,MA,ARMAモデルのシミュレーションをしてみましょう。なおAR係数、MA係数の設定条件にも注意しましょう。この設定条件を確かめる方法については本日説明しましたが、プログラムについては来週説明します。