RでFIRフィルタ設計(2)

Rでfir1を使って信号をフィルタリングしてみる
R関連の情報は少ないので、MATLAB関連のページを見て、実際にRに適用してみる。

http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect8.html

上記ページを参考に、Rで10000Hzでホワイトノイズを作成して、2000-3000Hzをフィルタリングするバンドパスフィルタを作成する。

フィルタ対象のホワイトノイズを作成する

> Fs = 10000 # サンプリング周波数
> x = rnorm(10000)
> plot (x)


バンドパスフィルタを作成する

> N = 128 #フィルタの次数
> fil = fir1(N-1,c(2000,3000) / (Fs / 2), type="pass")

第2引数のc(0,1)の1はナイキスト周波数(Fs/2)となるので、Fs/2でスケーリングする。

このフィルタの周波数特性を確認する

> freqz(fil, Fs=Fs)

2000-3000Hzのところにフィルタができていることを確認できる。

ホワイトノイズを時間領域で畳み込み、フィルタリングする

> x2 = convolve(x,fil,type="o")

ここでは、時間領域の畳み込みのために、convolve()を使う。conv()でもいいみたいだが、conv()の戻り値はtsとして返ってくるので扱いに注意が必要。
convolve()のソースを見ると入力信号の2つをフーリエ変換して、積をとっている。
時間領域の畳み込みは周波数領域での積となり、周波数領域ではその逆となる(らしい)。
http://www.wakayama-u.ac.jp/~kawahara/signalproc/CH2cont2discrete/signalshint.html#anchor1831284
ちなみに、typeは”open”にしておく。"circular"や”filter”では所望の信号を得ることができない。

あと、畳み込みにより、信号長が変わっている。これは畳み込みで、n = length(x) + length(fil) - 1の長さで処理が行われるためである。

> length(x)
[1] 10000
> length(x2)
[1] 10127

なので、信号を128から10127の区間にする。

> x3 = x2[128:length(x2)]

フィルタリング結果を確認する

> plot(x3)

これだとあまりよくわからないが、振幅に変化があることはわかる。

フィルタリング結果のパワースペクトラムを見てみる

> plot(abs(fft(x3))^2,type="l")

2000-300Hzでフィルタリングされていることがわかる。
7000-800Hzのところもスペクトルがあるのは、サンプリング定理により、ナイキスト周波数(5000(=Fs/2))でエイリアシングがおきているため。

最後に

なんとか、Rでバンドパスフィルタの作成とその適用をすることができた(ように思う)。あまりにも、これ系のページが少ない+難しくてわかりにくいので、わかりやすいようにやりかたを書いてみた。間違いがあるかもしれないので、そのときは、コメント欄にでも指摘よろしく。

RでFIRフィルタ設計

R言語でFIRフィルタ設計の参考ページがほとんどない。
RってMATLABに似ているからMATLABのページが参考になるけど、少しづつ違うところがある。
RでもFIRフィルタ設計ができることがわかったので書いておく。

> sampleFreq = 128; #サンプリング周波数
> f = fir1(sampleFreq - 1, c(12, 20)/(sampleFreq / 2), "pass"); #12Hzから20Hzをフィルタリング
> freqz(f, Fs=sampleFreq) # 周波数応答表示

一つ目のポイントは、やはりなんといってもポイントはfreqz()の使い方。サンプリング周波数Fsは何も指定しないとπになる。なので、表示される図がなんのことかわからない。サンプリング周波数Fsを指定することで、横軸の周波数軸があう。
二つ目のポイントは、所望のバンドパスフィルタの範囲を指定し、firの第2引数で(sampleFreq/2)で割ってあげること。

間違っているかもしれないが、自分としては思い通りの結果を得ることができた。

Rを使ってみた

統計処理がしたくていろいろソフトを探しているところでRを見つけた。
MTLABっていうのも定評があるみたいだが、Rはフリーだし、いろいろライブラリもあるみたいなので、使ってみた。
なるほど、よくできている。インストールも簡単だし、WindowsでもMacでも動く。R言語自体もそんなにくせはない。
やりたかった分析が2時間ほどでできてしまった。
こんないいソフトがフリーとは・・・世の中変わってしまったんだねぇ。ソフトの価値はどこかへ移ってきていることを久しぶりに痛感した。

ユーザの私生活を丸裸にするAmazon Silk

米国時間9月28日朝のイベントで発表された7インチの「Kindle Fire」。
Kindle Fireは「Amazon Silk」と呼ばれるウェブブラウザが搭載される。Amazon Silkはスプリットアーキ技術を使うことで、ユーザに高速なWeb体験を提供できるそうだ。
このスプリットアーキ技術とはKindle Fire上で動作するクライアントアプリとなるブラウザとAmazonクラウドEC2を連動させ、クラウド側でコンテンツの先読みや圧縮などを行うことでクライアントとなるブラウザ上の処理を速くできる技術だ。
こういったサーバ側で処理をさせるという技術は10年くらい前に山のようにアイデアや特許が出されているし、最近ではOperaMiniとかもサーバと連動するといったアプローチをとっている。そのくらいの時期に次世代ブラウザを考えていた技術者にとって、このスプリットアーキ技術は「えっ、何これ??」といったものであろう。
クライアントの代わりにサーバ側で処理をするという方式は、クライアント側の処理性能が高くなってきたこの時代にはあわないアーキだと思っていたし、どちらかというと当時からキワモノ技術的な扱いをうけていた。
それがAmazonによって生まれ変わろうとしている。スプリットブラウザ技術により性能の悪いマシンでも高速なWeb体験を得ることができるというベーシックな、誰でも考えつく方式*1を実際にAmazonが採用した。「コロンブスの卵」的に流行るのだろうか。それとも「イノベーションのジレンマ」のようにブラウザそのものを再定義するのだろうか*2
何にせよ、ユーザによりよいWeb体験を提供するということは悪いことではない。ユーザから取ったら、裏で何が行われていようが、気持ちよく動けばそれでよい。
という建前はよく聞く話だが、意味もなくAmazonがサーバを使ってまで、ブラウザを革新しようとしているわけではないことは明らかである。
そう、ユーザのブラウザ操作を抑えることにより、「ユーザの行動履歴」を取得しようとしていることはあきらか。ユーザがどのコンテツにいつ、何時、アクセスしたのか、その文脈は何であったか、などなど、Amazonにとっては嬉しい情報が山のように取得できることとなる。まさに、スプリットアーキ技術はユーザの私生活を丸裸にする技術と言えよう。
ユーザの行動履歴をマーケティングに活かすことで、よりよいユーザ体験をユーザへ提供できる。Amazonのマーケットのレコメンドに使えるだけでなく、次の新しいニーズを見つけ出すのにも使える。*3
新しいユーザ体験を提供するという建前のもと、ユーザの行動履歴を搾取するスプリットアーキ技術。どこまでユーザを惹きつけることができるか楽しみだ。

*1:イデア自体はしょーもないが、実際にサービスまで持って行こうとすると恐ろしい技術力が必要とされる

*2:とか言って、もてはやしている輩が多い

*3:とは言え、行動履歴のマイニングは難しくて誰にでもできるものではないが・・・

「それでも、生きてゆく」の最終回を見て

フジTVのドラマ「それでも、生きてゆく」の最終回が終わりました。
内容的には非常に重いドラマでしたが、演者の力でとてもすがすがしいドラマだったと思います。
人はいつまでたっても、何も変わりません。でも、ぶつかる人がいれば、いつか変われるのかもしれません。
深見と双葉は心を通じあわせることができました。同じ明日を見て、生きていくことができました。いつか、双葉の「行ってきます」という言葉に対して、深見が「おかえり」という日が来ることでしょう。
甘ったるい終わり方を選ばなかったドラマでした。とてもよいドラマだったと思います。
ところで、深見が借りていたビデオの延滞料はいくらになったのでしょうか。

アイデアを捻り出す最もシンプルな方法

イデアを出すフレームワークは多々ある。書籍としても多々売られています。
どんなフレームワークを使おうが、最終的には自分の中にしかアイデアはありません。例え、モノマネであっても、自分のモノに仕立て上げないと、モノマネすらできないというのが実情です。モノマネができた上で、ようやく次のステップとして、アイデアを出すフレームワークを活用できるようになるのです。
それでは、自分の中にあるアイデアを自分の中で定着させるための有効な手段は何かわかりますか?
この定着させるという行為を有効なものにする方法が「ひたすら自分の考えていることを文に起こす」という方法です。騙されたと思ってやってみてください。何も書かずにぼーっとしていると、いろいろ考えたんだけど、何も残りませんでした、という結論になることは多々あります。対して、ひたすら、頭に浮かんだことを書き連ねれば、少なくともあとから見直すことができます。たくさんでてきたアイデアをあとで整理しなおすことも可能になります。
新しいアイデアを捻り出したいときは「ひたすら自分の考えていることを文に起こす」という方法をとってみて下さい。これを1週間も繰り返せば、頭の中にアイデアが定着するだけでなく、それまでに考えたことが膨大なデータベースとなり、あとから再利用することが可能となります。
私はこの方法で何度かアイデアを捻り出すことに成功しています。とにかく、書きまくってください。それだけで、変わった世界が見えてくることは間違いありません。

カレログの顛末

前にブログで扱ったカレログ
Macafeeにスパイウェア認定されてしまった。
見守りアプリとか言っちゃえばよかったのにねぇ。
彼を監視するのではなく、子供やお年寄りの見守りをするアプリだって。そっちの方が社会貢献してるっぽいけどね。
その上で、見守りアプリのスピンオフ(裏の使い方)として彼・彼女の監視ってストーリもありなのでは。