chakokuのブログ(rev4)

日々のごった煮ブログです

OpenBCI用アプリの開発再開

SharpDX.XAudio2を使って音が自由に出せるようになったので、、次はOpenBCIの脳波データを耳で聴ける音に変換するアプリに取り組み中(Windows版アプリ、C#で実装中)。過去に作ったOpenBCIによる計測データをUSB/Serialドングル経由で取得してグラフ化するアプリを改めて動かしてみた。見て分かる(?)ように、、波形はほとんど変化しておらず一定で、計測値は最大値(符号付き24bit)からすると変動幅はめちゃくちゃ小さい(=増幅必要)、また、波形は0V中心ではなくて、それぞれの計測位置毎に異なるバイアスがかかっている(=AC成分のみ取り出し必要)

このデータ見て分かった、これからやるべきこと

  • 増幅率をうまくやって波形が見えるよう(聴こえる音圧)にする
  • 計測波形にはバイアスがかかっているので、DC成分をカットするフィルタを作る
  • 50Hz/60Hzのフィルタを入れる(多分)
  • 1秒ごとの波形をN倍して可聴域に周波数変換する

本気でデジタルフィルタを作るのはめちゃくちゃむつかしいので、、ひとまず1秒間の平均値がバイアス電圧であるとみなして、次の1秒は先に計算したバイアス電圧分を引く演算をして、なんとか振幅の中心を0Vに戻せるようにフィルタを試作してみます。

■追記(150921)

やるべき事で書いた、1秒間の計測データ(計算を楽にするため128サンプル)の平均値を算出してバイアス電位と見なし、次の計測データから引き算することで、振幅の中心を0Vにシフトさせた。また、計測データの増幅率を上げて波形を見えるようにした。(たしか、OpenBCIの回路設計上、AD変換の基準電位は4Vだったはずで、、そんな高い電位差が頭の上で計測できるはずもなく。。)。波形は上からch1,ch2, ... , ch8となっています(波形が7本しか描画されていないのは何かのバグによるもの)。ch1,ch2は眉毛の上辺りの電極であり、時折スパイク状の波形が観察されるのは、瞬きをするときに筋電位を拾ってノイズとなったため。ch7,ch8は明らかにノイズです。脳波計測の分野では、外部から入ってくるノイズをアーティファクトと呼ぶらしい。。ch7,ch8は電極が皮膚から浮いてしまい、ノイズを拾ってると思われる。多分。

残るは、50Hz/60Hzのフィルタだけど、、ちょっと面倒なので、一旦このまま音として再生させてみる予定。(20倍速ぐらいに再生速度を上げて、1秒分のデータを20回繰り返し再生する)
■追記(150921_b)
しばらく経って再度脳波を計測してみたら、ノイズが乗りまくっていた。8chすべてに同期して波形が乗っているので、これは明らかに外部からのノイズだ。作業している机に手が着いた状態だと波も消えるけど、机から手を放すとこのようにノイズが乗る。多分、、100VのACの波形と思われるが。。(周期はあっていませんが)。だからやっぱりノッチフィルタのようなもので不要な周波数成分を除去する必要がある。(そうしないと、これも音として再生されてしまう)

■ご参考URL
石川高専 山田洋士様 研究室ホームページ
ディジタルフィルタ設計プログラム集 DF-Design
http://momiji.i.ishikawa-nct.ac.jp/dfdesign/