う〜ん、地味にやばい

後輩に私の研究を引き継いで貰うために、昨年度まで手がけていたアルゴリズムをプログラムで実装して貰ったのですが・・・、どうもうまくいかない。
で、そのソースを見せて貰ったところ、ちょこちょこ間違ってはいたものの、おおよそアルゴリズムに間違いはない。その間違いを直してもなお結果がおかしい。
その日はもう時間も遅かったので一旦打ち切り、私も家で動作を確認してみることに。過去に作成したプログラムもあったのですが、はっきり言って見にくいソースだったのでもう1から作り直すことに。
私は割と研究のプログラムは何度も何度も書き直しているので書き直す作業自体は苦ではありませんし、さして時間も掛かりませんでした。
「割とすっきり書けたかな〜」
なんて思いながら実行したら、なんと結果がおかしい。プログラムを見直すも、こちらが考えているアルゴリズム通りに組んである。今回はFFTにオープンソースのライブラリを利用したため、それが意図した使われ方をしていないのかも、と思いFFT->IFFTで結果を確認するももちろん正しい結果が。
こうなると私がアルゴリズムを誤解している可能性があるわけですが、過去に作成したプログラムのフローをソース上で確認しても誤解はなさそうな感じ。過去のプログラムをデバッグでフロー確認もしてみましたがこちらが考えている動作をしておりました・・・。
FFTを行う系列の順序が逆なのかも、と思ってそれも試してみましたが結果は黒。どうも原因が掴めない・・・。
後輩君に解決して貰うという手はありますが(私は他のアルゴリズムに手を付けているし、このアルゴリズムには長く触れていない)、さすがにそれは無責任というものでしょうしねぇ・・・。
と、いうことで今日も動作を確認しては居たのですが解決せず。ちょいと困ったもんだなぁ・・・。

続きを読む

いやーここまでやれたら面白いよな

このところSO3を楽しんでやってる訳なのですが、こんな動画を見つけました。

いやーこのゲーム、極めればここまでやれるのねw 私は無印版だからこの通りの動きをまねることはできないのですが(連続プロテクトができない)、けど二人ともマニュアルでうまく操作するというのはありかもな、と思ったり。
NPCはどうしても人間が扱うより死亡率が高くなるから、DEFを上げたり、プレイヤーキャラが敵を挑発して敵をおびき寄せたりするわけですが、なるほど自分で操作したらそりゃ(うまくやれば)死亡率も下がるわな、と。
にしてもこれは貴重な情報ではあったかな。なるほどエイミング・デバイスだとほぼ間違いなく敵は上空に浮くし、すぐさまフェイトの近距離大攻撃をぶち込めば蹴り上げることができる。その間にマリアに切り替えて小攻撃を出したら特殊攻撃の4回攻撃のできあがり(あれ近距離扱いなんだよなー)。しかもエイミング・デバイスをキャンセルしてレディエーション・デバイスを仕込むんだからなるほど賢いよなぁ・・・。
ついでにダウン効果も得られることだし、ゲットアイテムつけてレナス戦で私もこの戦法使わせて貰おうかしら(笑) 無印版では2人だけでパーティを構成できないから、3人目にはソフィアでも入れておこう。「味方を補助せよ!」ってな作戦にしておけばまぁ余計なことはしないでしょうし。もともと敵には余り近づかないだろうけど。仮に倒されてもフェイトがおそらくは怒り状態になるだろうし、むしろお得だ(ぉ
いやーそれにしてもマニュアルをここまで使いこなせるとは・・・。私もガブリエ・セレスタ相手に練習してこようかしら(笑)

続きを読む

なんだったんだろう・・・?

どこの家庭でも、冷蔵庫とかによくメモ貼ってたりしませんか?
うちも貼ってありまして(冷蔵庫じゃなくて食器洗い乾燥機にだけど)、大概は
「シャンプー・リンス」
とか
「しょうゆ・みりん・ジョイ」
とかが書いてあるわけです。買い物リストがうちでは多いかな?
でも、昨日は違ったんです。決して買い物リストではない、ましてメモ書きとも考えにくい記述。
ピンチ [emoji:v-42]」
あれが炎の絵だったのか、それは定かではないですが、ピンチの横になんかそれっぽく書いてありました。
一体何のピンチなんだ・・・。うちの家計ってそんなにやばいのか!?火の車なのか!?
今日にはそのメモはなくなっていましたが・・・、一体何だったのか。気になるなぁ・・・。

続きを読む

ちょいと自分の首を絞めちまったか・・・?

今日も企業の方とミーティング。こちらは予定されていたことだったのでそれなりの心構えで赴きました^^ こちらの研究についての話を突っ込んで行ったので結構疲れた・・・。
教授も同席してくださっていたけれど、あんまり発言してなかったんだよなぁ・・・。むしろ黙って隣におられる方が緊張するんですが(苦笑
で、企業側の方の今後のマイルストーンを示していただきました。それに応じて、私の方も現在のプログラムを5月中にはα版程度には仕上げると宣言してしまった・・・。う〜ん、完成にどの程度掛かるかとかいうおおざっぱな予測を立てられないのはまだまだ未熟だからとは分かっているものの、相手は企業さん。なるだけ具体的な数字を提示しないことにはコトが進みませんからねぇ・・・。ちょいと自分の首を絞めるような格好になって気もしなくはない^^;
なにせ、企業の方の行動の早さはこちらとは雲泥の差。やっぱ学生ってーのは甘ちゃんなんだなと認識いたしましたですはい。以前こちらの研究のプログラムをお渡ししたことがあるのですが、それの解析を即座に行って結果の是非をこちら側へ問い合わせてこられました。私達が検討していなかった点まで綿密になされた解析に私はただただ驚きました。
にしてもあれはいい経験になった。企業の動く速度とこちらの動く速度は全然違うのだということを実際に体験できたわけですし。実社会に出るときに心構えがあるか無いかはきっと大きいはず。活かさなくちゃね。
とにかく私は今手がけているプログラムを早いとこ完成させなくっちゃ。今作っているルーチンは明日最終段階まで持って行こう。安定条件がどうも気に掛かる・・・。論文に書かれている条件よりもきつめに縛っておかないと安定動作しないんじゃなかろうか。速度が犠牲になるから気分は良くないんだがなぁ・・・。改良版のアルゴリズムが提示されてたからそちらも視野には入れるとしよう。入出力は変わらないから差し替えは簡単だし。
ついでにC#のFFTライブラリも見つかった。うん、オープンソース万歳(笑) 中で使っているアルゴリズムはささっと確認する必要はあるけど、まぁとりあえず動かすだけなら支障はないでしょう、うん。最悪、FFTWあたりのソースをコピペしてManagedC++のDLL作ろうかと思ってたし、手間が省ける。
さらにさらに、C#からASIOをドリブンできる可能性が出てきた。PortAudioというこれまたオープンソースのサウンドAPIがあって、これがASIOに対応してるんですね。が、こいつはCで書かれてるんだっけかな、確か。だから直接C#からは呼べないんだけれど、それをバインディングする形でライブラリを開発してる人がいた。まだ超初期の開発段階で、バグだらけだと書いてあるし、ASIOにも対応できてないけど、将来性に期待。
まぁこれまたManagedC++でラッパークラスを作ってそれをDLL化してC#から呼び出してもいいんだけど。そもそもそう言う予定だったし。必要なのは入出力だけでそれ以外のPortAudioの便利機能は必要としてないから最悪ラッパークラスを実装するかな。今のプログラムをC++に書き直そうかとも考えたけど結構手間そうだし・・・。
あぁでもリアルタイム処理を考えたら最適化されたライブラリを使う方が有利か・・・。ふむ、最低限ネイティブC++にはコンバートする必要がありそうだな・・・。
ま、そんときはそんときで考えよう、うん。大事なのはアルゴリズムであって実装じゃないし。IPPに固定長循環バッファあったっけなぁ・・・^^;

続きを読む

なんて初歩的なミスを・・・Orz

今日、ようやく詰まっていた研究のプログラムの間違いを発見できました。
ずっとアルゴリズムの実装が悪い、そう思っていたのですが、原因はもっと根本的な部分にありました。
シミュレーションを行う際、配列に乱数を詰める処理を複数回施すのですが、その乱数の種がすべて同じでしたOrz
おかげで全部異なっていなくてはいけないはずの乱数配列が全部同じ値となってしまっていました・・・;; いやまぁそれでも導き出された結果というのには納得しにくい面もあるのですが、少なくとも間違った結果を出してしまった原因の大部分を占めていましたね。乱数の種をきちんと設定してやったらそれらしい結果を返してきましたし。
これで大体今作っているプログラムのライブラリは出そろったかな。まだ挙動に関して怪しい部分が残っているからそこを詰めてみるけれど、もうおおかたできあがっていると見て大丈夫だろう。それに今から推し進めるアルゴリズムに限って言えばそのルーチンはあろうとなかろうと使わないから関係ないし。いや間違ったままおいとくとえーことなさそうやからきちんと動くようにしておくけどさ^^;
さて、いよいよ本丸だ。ライブラリを組み合わせてシステムを構築しなくては。結構複雑なシステムになりそうだから慎重に組み合わせないとな。
う〜ん、C#からASIOが使えたら今のプログラムをそのまま移植するんだけどなぁ。無理なんかしら^^;
げ、しまった。C#ではまだFFTを用意してないんだっけ。どっかに転がってないかのぅ?(ぉ

続きを読む

[mixi]6400人御礼〜

mixiからのお知らせです。code_air_ edge さんのページ全体のアクセス数が
6400アクセスを超えました。記念すべき6400アクセス目の訪問者は
はましん さんでした!
ということで、6400ヒット! 気が向いたらmixiのプロフとかも変えてみるか。月1くらいのペースで。せっかくmixi経由で見に来てくれてるなら、見に来る楽しみくらい提供したいものだしね。
なんかネタは考えておこう。
さて、毎度恒例前後賞! 今回はこのようなラインナップとなりました!
2007年04月24日 06:55 ひでと
2007年04月23日 23:30 角
2007年04月23日 20:56 はましん
2007年04月23日 18:48 Attsun
2007年04月23日 16:30 カツヲ。
見事なまでのSugar組w なんだこのチームプレーは(笑)
ちなみにその前後にはエセ整備士とさんのへがおりました。なんだこのJ4のチームプレー(ぇ
まぁマイミクの半数がJ4なんだから固まるのは当たり前か。コレに懲りずに遊びに来てください(笑)

続きを読む

数式処理

研究の関係で、6元、ないし8元の連立方程式を解かなくちゃ行けなかったりしたんですよね。まぁその作業自体は研究の副次的な作業で、本質には余り関わってこないため、ここであまり時間は掛けたくない。
とはいえ、未知数6の連立方程式(まー1次式だからまだましっちゃーまし)なんて手計算で解いてられないんですよね。解けなくはないけれど、間違わずに素早く解くような自信はからっきしない。
おまけに、それを解いて終わりじゃなくて、その解をまた別の式に代入しなくちゃならないと来た。その式というのが分母分子がそれぞれ2次式の分数。ちなみに連立方程式を解いて出てくる解は分母分子がそれぞれ1次式の分数。分数の分母分子にこれまた分数があらわれるとかもう悪夢。
おまけにその式をプログラムに書き下す必要があるんですね。信号処理、しかもリアルタイム処理を目指す関係上、乗除算はあまり多くなって欲しくない。だから分数の分母分子に分数があるってのは頂けない。だから分母を払って整理してできるだけ簡単な形(演算量の少ない形)に変形しなくてはいけない・・・。
こんだけの作業を全部手計算でやるとかやってらんないので、連立方程式を解いてその解を別の式に代入するところまでを全部数式処理ソフトに吐かせました。いやぁ、多少なりとも数式処理ソフトの扱い方を知っていて良かった。こんなところで役に立つとは夢にも思っていなかったけれど(苦笑
ただ、それを使っても計算量が少なくなるような式の形への変形はさすがにやってくれませんから、手作業で整理します。まぁ分母を払うところまでやってくれてあるわけですから、作業としてはだいぶましなところまで進めてくれてますよね。しんどいですけど^^;
そいでまぁ整理してみたのですが、見にくい。ひっじょーに見にくい。なんせ数式がA4用紙横置きで軽くはみ出るんですから(ぁ
これは仮に学会へ提出したときに、査読委員が見る気なくすだろうということで式を行列で表現することに。
連立方程式はクラメルの公式を使えば行列式で表現できます。それを利用して表現だけはすっきりさせておきました(笑) 結局3×3の行列式を解かなくちゃ行けないので骨は骨なのだ。サラスの法則使うか、掃き出し法を使うか、まぁ汎用性を持たせるなら掃き出し法の方がいいかな? なんせそれで分母と分子の係数を求めなくちゃいけないけどさ。
で、今日のミーティングにて式の整理までできましたよと報告。いよいよプログラムでシミュレーションをしようとあいなりました。
まーまだクラスが全部完成はしてないんですよねぇ。とりあえずマルチチャネルシステム同定はある程度動いていそうだから収束条件に即した係数更新はおいとくとして(あの条件もう少し工夫はしたい。すげー抽象化しにくい^^;)、連立方程式法のクラスを作っていこうかな。マルチチャネルシステムのフィルタクラスは今日である程度形になったし、マルチチャネルシステム同定クラスはそれを継承させることでいいだろう、うん。
けど連立方程式法のクラスはメンバをどう持たせるかなぁ・・・。入出力ははっきりしてるけど公開メソッドをどうするかやなぁ・・・。まぁ見える分にはマルチチャネルのfirと係数更新メソッドくらいでいいか。後はパラメータを設定するプロパティ作っとくくらいやな。
まぁ明日クラス構成をもう少し練って紙に書き起こしておこう。こりゃ中々綺麗に書くのは難しそうだ^^;

続きを読む