2007年6月17日日曜日

ポーティング捗らないなぁ

まぁ昨日はTAもありーの月曜日のミーティングの資料作りもありーのラピュタもありーの(ぇ でポーティング作業等は全然進みませんでした^^;
他の理由としては、ライブラリ探しに熱中してしまったというのもあるんですが(苦笑 私がC#でFFTのライブラリとして利用しているのがMath.NET Projectにある線形代数ライブラリです。で、これのうちFFTの部分しか使っていなかったのですが、昨日よくよくドキュメントを調べてみるとなんと行列演算なんかも持ってるではないですか! おぉこれはひょっとして使えるんじゃね? と思って早速読んでみると、なんと実数型にしか対応していませんでした・・・Orz 複素数型に対応してくれていたら文句なしだったのに;;
まぁ実数型しか対応していなかったとしても使い所はありそう。マルチチャネルのANCだから時間領域の作業は多いし。来週そのあたりの話は聞けそうだから良く聞いておこう。
ついでに上記のサイトには信号処理用ライブラリまであったのよね・・・。知らなかった。しかも中身は結構充実。インパルス応答生成やらサイン波、ステップ応答波はもとより、正規乱数生成、指数減衰型乱数生成(多分)まであったり。固定長循環バッファまであったよ;; このあたり全部自作したんだがなぁ・・・。あるなら使っておけば良かった・・・。後でこれらのライブラリに差し替えてみるのもいいかも。同じグループの作ってるライブラリだし、擦り合わせはしやすそうだ。実際、ここが提供してる信号処理ライブラリは線形代数ライブラリが提供する複素数型を使ってたりするし。FIRフィルタだけじゃなくてIIRフィルタまであったなぁ。バンドパスフィルタやらローパス、ハイパスフィルタのメソッドとかもあったから持ってて損はなさそうだ。工程は短くできそう。
しかも行列に複素数は対応していなかったけど、それはFeaturesに入ってた。まだせんけいだいがバージョン0.3、信号処理ライブラリがバージョン0.2だしね。これからに期待。
C#でこーゆー処理してる人が少ないのか、Web上での情報はかなり少ないなぁ。まぁ信号処理も線形代数も速度が求められる場面だし、CLRよりもネイティブで実行することが多いというのは仕方ないか。
けど私のように大学で研究をやったりするには向いていると思うんだよなぁ。メモリ管理から解放されて余計なこと考えずに済むし、C/C++で多く使われている線形代数ライブラリに比べてかなり簡潔なインタフェースになってるし。今のプログラムをC/C++にポーティングするためにいいライブラリないかな〜と思って調べてるけど、CLAPACKにしろBLASにしろGELにしろ、インタフェースがすげーとっつきにくいんだよな・・・。まぁGELはともかくCLAPACKは元々FORTRANで作られてるから引数が多いのも仕方ないのだけれど^^; その分めっさ速いが。
ただ、研究で速度も大事だけど考えた原理が正しいかの実証を行うためだったら、組みやすさが大事だと思うのよね。最適化はDSPに載せるときでいいですよと。
うちの研究グループはとりあえず全部1から組ませるからなぁ。畳み込みとかFFTとかは原理を知っておくことは大事だと思うけど何もプログラムまで全部1から組まなきゃいけないことはないと思うんだ、うん。ライブラリを使ったりしたら余計なデバッグ作業をせずに本来考えたい研究内容に集中できると思うんだけどな・・・。いやまぁライブラリの使い方を覚える労力は必要だけど^^;
ふむ・・・。うちの後輩にもC#とライブラリの組み合わせを教えてあげたいとは思うけど教授から完全に異端児扱いされてるからなぁ(苦笑 楽でいいのに・・・。
一応C/C++で使えるせんけいだいすうを探してみたけど、無料で使える分はインタフェースがえげつないと思った。研究室にはIntel MKLがあったはずだからそいつをちょいと月曜日くらいに調べてみるか。
さて、そいじゃ今からFFTWの複素数型を使って複素数の演算ができるようにオーバーロードを用意してきますかね。