<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>DPSVOX.NKのブログ</title>
<link>https://ameblo.jp/dpslab-nk/</link>
<atom:link href="https://rssblog.ameba.jp/dpslab-nk/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>MATLAB EEGLABの使用法で忘れがちなことをメモっておきます</description>
<language>ja</language>
<item>
<title>dipfit -&gt; could not locate MEX for ...</title>
<description>
<![CDATA[ Matlab versionは2007a（7.4.0）<br><br>eeglab7_1_6_18b<br>eeglab8_0_3_4b<br>で検証<br><br>OSはWinXP 64bit<br><br>タイトルにあるようにMEXファイルがみつからない的なことを言われます．<br>この問題は極単純ですがいろんなところの問題がこんがらがっているのでややこしかったです．<br><br>詳しく書いておいていつか何かの足しになれば．<br><br>まずEEGLABでdipfitをやろうとすると出ました．<br>以前に<br><a href="http://ameblo.jp/dpslab-nk/entry-10443503412.html">Mex File のコンパイル</a><br>と題してWindows 64bit環境でdipfitをやろうとするときの注意点を書きました．<br><br>これに付随してまた新たに問題が出たのが今回の報告．<br>EEGLAB bugzillaでも問題になっているので，<br>以下の記述中の言葉で適当に検索すれば出てきます．<br><br>EEGLAB error in function ptriproj()@ line 29<br>ERROR using ==&gt; ptriproj at 29 could not locate MEX for ptriproj<span style="font-family: monospace;"><br><br></span>ここで問題になっているMEXファイルはfieldtripの関数なので，<br><a href="http://fieldtrip.fcdonders.nl/faq/matlab_complains_about_a_missing_or_invalid_mex_file_what_should_i_do"><span style="font-family: monospace;">&nbsp;</span>ここのページ</a><span style="font-family: monospace;"><br></span>が紹介されたりして，以前の記事のようにコンパイルのやり方が示されています．<br>つまりコンパイルされた適切なファイルがないと，<br>あらかじめ用意されたmファイルを読みに行く形になっていて<br>そこに記述されているエラーメッセージが返されるということです．<br><br>しかし今回はコンパイル作業を完璧にこなしてもエラーが出続けました．<br>前回もコンパイルだけではダメで，<br>コンパイルした.mexw64ファイル群をより階層が上のフォルダに入れて，<br>.mexw32との競合を避ける必要がありました．<br><br>今回もそれだろうと，<br>・workフォルダ<br>・マイドキュメントのMATLABフォルダ<br>・そのときのカレントフォルダ<br>とさまざま上位階層と思われるところに入れてみましたがダメ．<br><br> 何か別のパスと競合しているんじゃないかと思って，<br>MATLAB上のパスを一回全部消して，設定しなおしてみてもダメ．<br><br>古いバージョンで使っていたfieldtrip-liteを別から持ってきて，<br>そっちを読みにいくようにしてもダメ．<br><br>とお手上げな感じでした．<br><pre id="comment_text_0">バタバタ色々やっていてやっと動いたのが，非常に基本的な問題でした．eeglabのパス設定です．普段私はeeglabを立ち上げていない状態でも<br>eeglabの関数を利用したりするので基本「サブフォルダも追加」でeeglabのフォルダ以下全てのフォルダをMATLABに登録しています．それがまずいみたいですね．<br>eeglabは「eeglab」とタイプして立ち上げを行ったとき，スタートアップで自分の使うフォルダを自分で設定しなおします．つまりeeglabを使うには，eeglabの最上位のフォルダのみをMATLABにパス登録しておけばきちんと動くようになっているのです．逆に言うとそうやって作られているので「サブフォルダも追加」で全部登録されてしまうと困る仕様になっているということです．今回のMEXが見つからないバグも，この二重登録が混乱を生じて起こったようで，パスを最上位のみにしたら直りました．<br><br>直接どこが競合したか突き止めていませんが，とにかくパス全部登録はダメらしい．特にMEXを使って処理するもので，パス階層の順位で読むファイルが変わるような時には注意する必要がありそうです．関数を使いたいときはその都度パスを通すか，逆にdipfitをやるときなどに限ってパスを外すかなど，で対処しなくてはならない，ということみたいです．</pre>
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10618457872.html</link>
<pubDate>Fri, 13 Aug 2010 15:40:21 +0900</pubDate>
</item>
<item>
<title>差分トポなど③応用編</title>
<description>
<![CDATA[ 差分トポなど②改造編の続きです<br><br><br><span style="color: rgb(255, 20, 147);">std_chantopo(...</span><br><br>はmファイルですから，<br><br><span style="color: rgb(255, 20, 147);">std_chantopo</span><br><br><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);">とコマンドウィンドウに打ってやれば，<br>処理をしてくれるはずです．<br><br>しかしそれを適切に動かすには，<br><br></span></span><span style="color: rgb(255, 20, 147);">std_chantopo(erpdata, 'condnames', STUDY.condition, 'plottopo', fastif(length(allinds)==1, 'off', 'on'), ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                'datatype', 'spec', 'plotmode', opt.plotmode, 'groupnames',STUDY.group, 'unitx', '\muV', ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                 'groupstats', pgroup, 'condstats', pcond, 'interstats', pinter, ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                'chanlocs', locs, 'plotsubjects', opt.plotsubjects, 'topovals',titlestr, plotcurveopt{:});</span><br><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br>の括弧内にあるオプションを全部理解して，<br>適切なデータを引っ張ってこないといけません．<br><br>これはめんどい<br><br>そこで②で作ったmatファイルです．<br>先ほどの状態でstd_chantopoを動かすのに<br>必要な変数を全部保存しておいたんです．<br><br>これをMATLABワークスペース上にオープンしてやれば，<br>まさに<br></span></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br></span></span><span style="color: rgb(255, 20, 147);">std_chantopo(erpdata, 'condnames', condition, 'plottopo', fastif(length(allinds)==1, 'off', 'on'), ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                'datatype', 'spec', 'plotmode', opt.plotmode, 'groupnames', group, 'unitx', '\muV', ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                 'groupstats', pgroup, 'condstats', pcond, 'interstats', pinter, ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                'chanlocs', locs, 'plotsubjects', opt.plotsubjects, 'topovals',titlestr, plotcurveopt{:});</span><br><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br>をそのままベタ貼りするだけで，<br>トポの表示ができてしまいます．<br><br>（ここでは元のプログラムを少し改変していますが，<br>conditionとgroupの前のSTUDY.を抜き取っただけです．<br>状況によってはSTUDY構造体が非常に重くなっている可能性があるので，<br>上記の対処を取りました．）<br><br>でもそれでは一度行ったトポ表示を繰り返すだけ．<br>今回は差分を行いたいわけですから，<br>表示するトポを各条件のモノではなく，<br>条件差のデータに変えたいということになります．<br><br>一目瞭然でわかると思いますが，<br><br></span></span><span style="color: rgb(255, 20, 147);">std_chantopo(...</span><br><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br>のあとの一つ目の引数に<br><br></span></span><span style="color: rgb(255, 20, 147);">erpdata<br></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br>というものがあります．<br><br>まさにこれがデータです．<br>中身をみるとセル扱いですが，<br>条件分のデータが格納されています．<br>3条件であれば，<br><br></span></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><a href="http://stat.ameba.jp/user_images/20100601/14/dpslab-nk/0f/4c/p/o0352045010569591669.png"><img border="0" alt="DPSVOX.NKのブログ" src="https://stat.ameba.jp/user_images/20100601/14/dpslab-nk/0f/4c/p/t02200281_0352045010569591669.png"></a></span></span><br><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br>&lt; 3 x 1 cell &gt;<br><br>です．<br><br>そのままでは使えないので<br><br>a=</span></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);">erpdata{1};<br><br>のように抽出してみると，<br><br>1</span></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"> x </span></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);">64 x 13</span></span><br><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br>のように，<br>1，電極，人数<br>の3次元データになっています．<br><br>あとは色々いじって差分にするなり，<br>なんなり（といっても差分意外にないか）できます．<br><br>3条件なら以下のスクリプトを通すと，<br>条件1-条件2，</span></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);">条件2-条件3，</span></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);">条件3-条件1<br>の三つを出すようにできます．<br></span></span><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br><span style="color: rgb(255, 20, 147);">for i=1:length(condition)</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">     a(i).data=erpdata{i};</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">end</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">erpdata2=erpdata;</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">for i=1:length(condition)</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">     if i==length(condition</span></span><span style="color: rgb(0, 0, 0);"><span style="color: rgb(255, 20, 147);">), erpdata{i}=a(i).data-a(1).data;</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">     else erpdata{i}=a(i).data-a(i+1).data;</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">     end</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">end</span><br><br>erpdata2として元データを残しているので，<br>両方出して確認してみましょう．<br><br>上記を応用すればERP波形を書く，<br><br></span></span><span style="color: rgb(255, 20, 147);">   std_plotcurve(alltimes, erpdata, 'condnames', STUDY.condition, 'plottopo', fastif(length(allinds)==1, 'off', 'on'), ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                    'datatype', 'spec', 'plotmode', opt.plotmode, 'groupnames', STUDY.group, 'unitx', 'ms', ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                    'groupstats', pgroup, 'condstats', pcond, 'interstats', pinter, ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                    'chanlocs', locs, 'plotsubjects', opt.plotsubjects, plotcurveopt{:});</span><br><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 0);"><br>も同じように変数書き出し法で，色々できます．<br><br><br><br><br></span></span>
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10550878965.html</link>
<pubDate>Tue, 01 Jun 2010 14:12:28 +0900</pubDate>
</item>
<item>
<title>差分トポなど②改造編</title>
<description>
<![CDATA[ 差分トポなど①準備編の続きです．<br><br>改造編と称していますが，<br>これはEEGLAB既存のmファイルを書き換えるからです．<br>基本的に悪さをしない書き換えをしていますが，<br>嫌な人はSTUDYファイルを作る際に，<br>差分したデータセットを用意して，<br>それをつかって①をやる，という感じにすればよいと思います．<br><br>では本題．<br><br>「①準備編」で紹介したことができている前提です．<br>先ほどのParam設定の中に<br><br><span style="color: rgb(0, 0, 255);">[Plot scalp map at latency [ms]]</span><br><br>という設定がありました．<br><br>さきほどはスルーしていましたが，<br>ここに数値を入れるとトポグラフィー描画モードになります．<br><br><a href="http://stat.ameba.jp/user_images/20100601/13/dpslab-nk/bf/46/p/o0694025810569543412.png"><img border="0" src="https://stat.ameba.jp/user_images/20100601/13/dpslab-nk/bf/46/p/t02200082_0694025810569543412.png" alt="DPSVOX.NKのブログ"></a><br><br>画像は400-600msの平均電位のトポを出したい場合．<br>単一の数値でも機能します．<br><br>ただ①で紹介した[Sel. all]をやってからでないと，<br>Plot ERPsを押してもエラーが出ます．<br>プログラムで電極が5個以上選択されていないと<br>出してくれないようになっているからです．<br><br>しかしここで出せるのは各条件ごとのトポ．<br>差分など好きなデータでトポを出したい場合は<br>いくつかのmファイルを書き換えます．<br><br>ポイントになるのは<br><br><span style="color: rgb(0, 0, 255);">std_erpplot</span><br style="color: rgb(0, 0, 255);"><span style="color: rgb(0, 0, 255);">std_chantopo</span><br style="color: rgb(0, 0, 255);"><span style="color: rgb(0, 0, 255);">std_readdata</span><br><br>の三つです．<br><br>このうち今回はできるだけ書き込みがバグにならないように，<br>std_erpplotのみを書き換えて，<br>後は手打ちで算出するという方法にします．<br><br><span style="color: rgb(255, 20, 147);">which std_erpplot</span><br><br>とかでどこにあるかを探してeditorで見てみます．<br><br>長いので細かくは見ませんが，<br><br>約330-340行目くらいにある以下の記述を変更します．<br><br><span style="color: rgb(255, 20, 147);">% compute statistics and plot</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">% ---------------------------</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">[pcond pgroup pinter] = std_stat(erpdata, 'groupstats', opt.groupstats, 'condstats', opt.condstats, ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                                     'statistics', opt.statistics, 'naccu', opt.naccu, 'threshold', opt.threshold);</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">locs = eeg_mergelocs(ALLEEG.chanlocs);</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">locs = locs(std_chaninds(STUDY, opt.channels));</span><br><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">if ~isempty(opt.topotime) &amp; ~isnan(opt.topotime)</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">    std_chantopo(erpdata, 'condnames', STUDY.condition, 'plottopo', fastif(length(allinds)==1, 'off', 'on'), ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                     'datatype', 'spec', 'plotmode', opt.plotmode, 'groupnames',STUDY.group, 'unitx', '\muV', ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                      'groupstats', pgroup, 'condstats', pcond, 'interstats', pinter, ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                     'chanlocs', locs, 'plotsubjects', opt.plotsubjects, 'topovals',titlestr, plotcurveopt{:});</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">else</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">   std_plotcurve(alltimes, erpdata, 'condnames', STUDY.condition, 'plottopo', fastif(length(allinds)==1, 'off', 'on'), ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                    'datatype', 'spec', 'plotmode', opt.plotmode, 'groupnames', STUDY.group, 'unitx', 'ms', ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                    'groupstats', pgroup, 'condstats', pcond, 'interstats', pinter, ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                    'chanlocs', locs, 'plotsubjects', opt.plotsubjects, plotcurveopt{:});</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">end;</span><br><br>ここはデータに基づいて統計解析とデータのプロットをするところです．<br>注目するのは<br><br><span style="color: rgb(255, 20, 147);">std_chantopo(erpdata, 'condnames', STUDY.condition, 'plottopo', fastif(length(allinds)==1, 'off', 'on'), ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                'datatype', 'spec', 'plotmode', opt.plotmode, 'groupnames',STUDY.group, 'unitx', '\muV', ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                 'groupstats', pgroup, 'condstats', pcond, 'interstats', pinter, ...</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">                'chanlocs', locs, 'plotsubjects', opt.plotsubjects, 'topovals',titlestr, plotcurveopt{:});</span><br><br>です．<br><br>ここで<br><br><span style="color: rgb(255, 20, 147);">std_chantopo</span><br><br>はトポを表示するmファイルなので，<br>括弧内で指定したパラメータを引数として持って，<br>表示処理に向かう感じです．<br>そこでここで必要になるパラメータをmatファイルに保存してしまいます．<br><br>そのためのスクリプトが以下，<br><br><span style="color: rgb(0, 102, 0);">%% added by Noriaki Kanayama</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">  condition=STUDY.condition;group=STUDY.group;</span><br style="color: rgb(255, 20, 147);"><span style="color: rgb(255, 20, 147);">  save('std_topo_set.mat','erpdata','condition', 'group', 'allinds', 'opt', 'pgroup', 'pcond', 'pinter', 'locs', 'titlestr', 'plotcurveopt','-mat');</span><br><span style="color: rgb(0, 102, 0);">%% added by Noriaki Kanayama</span><br><br>これを<br><br><span style="color: rgb(255, 20, 147);">std_chantopo(...</span><br><br>の直前に貼り付けます．<br>（もちろん%%がついている行はコメントなので任意で．<br>でもmファイル改変なので，後で検索しやすいようにしておくとよいです）<br><br>すると<br><span style="color: rgb(255, 20, 147);"><span style="color: rgb(0, 0, 255);">std_topo_set.mat</span><br></span>というマットファイルを「トポを表示する」たびに<br>カレントフォルダに算出してくれます．<br><br>これで改造は終了です．<br><br>プログラムの途中で変数をファイルに保存しているだけなので，<br>基本的に他のどんな作業にも影響を与えないはずです．<br><br>このmatファイルを使うと，<br>後々楽に色々できます．<br><br>では続きは別で<br><br>
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10550842024.html</link>
<pubDate>Tue, 01 Jun 2010 13:24:12 +0900</pubDate>
</item>
<item>
<title>差分トポなど①準備編</title>
<description>
<![CDATA[ 今回はSTUDYファイルを作った状態が前提です．<br><br>EEGLAB versionは7.1.3.11b.<br><br>STUDYファイルは何かと便利なので作っておきましょう．<br>これまではICAクラスタリングで使う印象でしたが，<br>Channel Baseの解析にも使えます．<br><br>今回は差分トポを出す方法．<br><br>差分波形はEEGLABでも実装されていますが，<br>差分波形をトポ表示したり，色々自由にやるのは難しいです．<br><br>多分開発者は元々のデータの情報量を削減するような<br>ERPの差分表示の方法があまり好きじゃないので（興味がない？）<br>きちんと実装していないのかなぁと思います．<br><br>個人的にもERPレベルで差分してしまうと，<br>（+10μV）-（+8μV）<br>と<br>（+1μV）-（-1μV）<br>の結果が同じになってしまうところとか，<br>ちょっと怖いなぁと思いますが．<br><br>取りあえず準備編<br><br>まずはメニューから<br><br><span style="color: rgb(0, 0, 255);">[Study]-[Precompute channel measures]</span><br><br><a href="http://stat.ameba.jp/user_images/20100601/13/dpslab-nk/ce/fe/p/o0407036310569510004.png"><img border="0" src="https://stat.ameba.jp/user_images/20100601/13/dpslab-nk/ce/fe/p/t02200196_0407036310569510004.png" alt="DPSVOX.NKのブログ"></a><br><br><a href="http://stat.ameba.jp/user_images/20100601/13/dpslab-nk/7c/33/p/o0578034910569511773.png"><img border="0" src="https://stat.ameba.jp/user_images/20100601/13/dpslab-nk/7c/33/p/t02200133_0578034910569511773.png" alt="DPSVOX.NKのブログ"></a><br><br>でERPを算出しておきます．<br><br>Grand Averageを出すだけだと思いますが，<br>カレントフォルダに<br><br><span style="color: rgb(0, 0, 255);">.daterp</span><br><br>という妙な拡張子のファイルがデータセット分できます．<br>これがデータです．<br><br>ここまでが下準備．<br><br>そして<br><br><span style="color: rgb(0, 0, 255);">[Study]-[Plot channel measures]</span><br><br><a href="http://stat.ameba.jp/user_images/20100601/13/dpslab-nk/72/35/p/o0548032210569518312.png"><img border="0" src="https://stat.ameba.jp/user_images/20100601/13/dpslab-nk/72/35/p/t02200129_0548032210569518312.png" alt="DPSVOX.NKのブログ"></a><br><br>でEdit/Plot画面を出します．<br>（ちなみにこのウィンドウは特殊な構造で，<br>これが出ている間はデバック作業や，<br>コマンドの打ち込みがストップされます）<br><br><span style="color: rgb(0, 0, 255);">Plot ERPs</span>の横の<span style="color: rgb(0, 0, 255);">Param</span>を押します．<br>すると設定画面が開きます．<br>（ここではERPしかPrecomputeしていないので，<br>その他のボタンはアクティブになっていません）<br><br><a href="http://stat.ameba.jp/user_images/20100601/13/dpslab-nk/22/02/p/o0694025810569527414.png"><img border="0" src="https://stat.ameba.jp/user_images/20100601/13/dpslab-nk/22/02/p/t02200082_0694025810569527414.png" alt="DPSVOX.NKのブログ"></a><br><br>とかいう感じで適当に設定して，<span style="color: rgb(0, 0, 255);">OK</span>を押し，<br>先ほどの画面に戻ったら<br><br><span style="color: rgb(0, 0, 255);">Plot ERPs</span>を押すとERPを表示してくれます．<br>この時真ん中上あたりの<span style="color: rgb(0, 0, 255);">[Sel. all]</span>ボタンを押すと，<br>電極が全て選択され，<br>その状態でPlotすれば全電極のデータを並べて表示してくれます．<br><br><a href="http://stat.ameba.jp/user_images/20100601/13/dpslab-nk/07/2b/p/o0548032210569531506.png"><img border="0" src="https://stat.ameba.jp/user_images/20100601/13/dpslab-nk/07/2b/p/t02200129_0548032210569531506.png" alt="DPSVOX.NKのブログ"></a><br><br>ではここまでが準備編．<br><br>改造編に続く．<br>
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10550830024.html</link>
<pubDate>Tue, 01 Jun 2010 13:12:55 +0900</pubDate>
</item>
<item>
<title>STUDYを作る際のエラーメモ</title>
<description>
<![CDATA[ 適当なメモなのであとで対処してちゃんと書いておきます<br><br>①pop_savestudy line93, 97でエラー？<br><br>②conditionが数値で表されてた場合,<br>std_specのline268で<br><br><br><font color="#0000FF">boundaries = strmatch('boundary', <font color="#FF1493">lower({ EEG.event.type })</font>);</font><br><br>赤字の部分が文字列じゃないと使えない関数みたいでエラーが起こる．<br><br><font color="#0000FF">boundaries = strmatch('boundary', lower({ <font color="#FF1493">char(</font>EEG.event.type<font color="#FF1493">)</font> }));</font><br><br>のように無理矢理文字列にしてやれば通過できます．<br>マッチングして'boundary'って書いてあるか見るだけなので,<br>この変更をしても問題ないと思います．<br>（boundaryと一致するなら必ず文字列になっているはずだし,<br>一致しないならすべて数字なので,charにしたところで比較結果は変わらない．<br>単純にエラー回避）
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10489411860.html</link>
<pubDate>Tue, 23 Mar 2010 19:53:13 +0900</pubDate>
</item>
<item>
<title>コンタープロット修正版</title>
<description>
<![CDATA[ 完全内輪向け．<br><br>EEGLAB versionは7.1.3.11b.<br><br>前回のコンタープロットがまさに処理していたデータに限定的だったので，<br>少し汎用性を持たせて見ました．<br>ただどのデータをプロットするのか指定するだけですが…<br><br>以前のもの<br><br><font color="#FF1493">contourf(ALLTFA.timec,ALLTFA.freqs,ALLTFA.ERSP.avdata, ...<br>[min(min(ALLTFA.ERSP.avdata)):0.1:max(max(ALLTFA.ERSP.avdata))])</font><br><br>では単極，単一条件で取りあえず出してみた時にしか機能しませんが，<br>普通多くの電極，いくつかの条件でデータを算出するはずですので，<br><br><font color="#0000FF">ALLTFA.ERSP.avdata</font><br><br>は<br><br><font color="#0000FF">ALLTFA.ERSP(電極数,条件数).avdata</font><br><br>になるはずです．<br><br><br>よって以下のようにしました．<br><br><br><font color="#FF1493">%------------(Please set your request for plotting)--------------<br>ElecLabel='';<br>ElecNum=0;<br>ConditionNumber=0;<br><br><br>%------------(The program follows)--------------<br>if isempty(ElecLabel)<br>   if ElecNum=0, fprintf('please set the Elec Label or number.\n');<br>   elseif ~isempty(ElecNum), fprintf('please set the Elec Label or number.\n');<br>   else elec=ElecNum;<br>   end<br>else<br>   for i=1:size(ALLTFA.channel,2)<br>       if strcmp(ALLTFA.channel(1,i),ElecLabel)==1<br>          ElecNum=i;break<br>       end<br>       if i==size(ALLTFA.channel,2)<br>          error('please check whether ElecLabel is correct, or use the number') <br>       end<br>   end<br>end<br><br>cond=ConditionNumber;<br><br>contourf(ALLTFA.timec,ALLTFA.freqs,ALLTFA.ERSP(elec,cond).avdata, ...<br>[min(min(ALLTFA.ERSP.avdata)):0.1:max(max(ALLTFA.ERSP.avdata))])</font><br><br><br>で作ったmatファイルのデータをコンタープロット表示できます．<br><br>Conditionもラベルで指定できるようにしたら,<br>プロットに条件名も表示できていいですが,<br>それは元のTFA_EEGLAB_revisitedを少し改変する必要があるのでまた今度．<br>とりあえずどんな感じか見てみるだけってことで．<br><br>少しずつ汎用性を高めていきます．
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10485691321.html</link>
<pubDate>Fri, 19 Mar 2010 12:46:41 +0900</pubDate>
</item>
<item>
<title>ICAプロットのパワースペクトラム</title>
<description>
<![CDATA[ 完全内輪向け.<br>EEGLAB versionは7.1.3.11b.<br><br>ICAの<br><br><font color="#0000FF">Reject components by map</font><br><br>でパワースペクトラムの表示周波数を変えたい場合.<br><br>pop_selectcomps.m<br><br>の<br><br>Line251にある<br><br><font color="#FF1493">command = sprintf('pop_prop( %s, 0, %d, %3.15f, { ''freqrange'', [<font color="#0000FF">1 50</font>] });', inputname(1), ri, button);</font><br><br>の青部分で決定されているのでここに数値を直接打ち込む.<br><br>東日本でノッチかけたり，<br>早めに高周波フィルタかけた場合など，<br>フィルタ部分に引っ張られて肝心の周波数帯域が<br>見れない時などに.<br><br>使ったらそのつど戻すか，<br>変数組み込んで外から制御できるように<br>しておくことをお勧めします.
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10471613897.html</link>
<pubDate>Tue, 02 Mar 2010 12:19:12 +0900</pubDate>
</item>
<item>
<title>STUDYファイル③</title>
<description>
<![CDATA[ ひたすらプログラムの解説です<br><br><font color="#FF1493">currdir='E:\FaceEmoCh\FECStudy';</font><br><br>はカレントディレクトリを打ち込んで設定しておきます.<br>間違えないように初めに打ち込んでおいて，後は触らないようにします.<br><br><font color="#FF1493">[ALLEEG EEG CURRENTSET ALLCOM] = eeglab;<br>pop_editoptions( 'option_storedisk', 1, 'option_savetwofiles', 1, 'option_saveica', 0, 'option_single', 1, 'option_memmapdata', 0, 'option_computeica', 1, 'option_scaleicarms', 1, 'option_rememberfolder', 1);<br>ALLEEG = eeg_checkset(ALLEEG); EEG = eeg_retrieve(ALLEEG, CURRENTSET);</font><br><br>①EEGLABの起動<br>②EEGLABのオプションから一度に一つだけデータをメモリ上に読み込む設定にする<br>これをしないと，大量にロードしたときその分だけメモリが必要になります.<br>30人，8条件，電極64極とかだと大変なことになります.<br><br><font color="#FF1493">cd(currdir);</font><br><br>カレントディレクトリを設定しています.<br>なんでここに書いたんだろう.<br>別にもっと前でもいいはず.<br><br><font color="#FF1493">allfiles=dir('*.set');</font><br>選択したディレクトリに入っているファイルをすべて参照する.<br>allfilesという構造体に，<br>name<br>date<br>bytes<br>isdir<br>datenum<br>というフィールドが作成され，<br>情報が格納されます.<br>これを使っていろいろできるわけです.<br><br><font color="#FF1493">for n=1:length(allfiles) %すべての条件にあうファイルをロードする</font><br><br>プログラム中のコメントアウトにあるように，<br>すべてのファイルに対する処理であることを示しています.<br>for文開始で，次のendまで.<br>nというインデックスを，ファイルの数（length(allfiles)）だけ<br>一つずつ増加させてすべてのファイルに処理をするようになってます.<br><br><font color="#FF1493">loadname=allfiles(n).name; %ファイルの名前を取得してloadnameに格納</font><br><br>loadnameを使っていろいろ情報を引き出します.<br>なので名前がきちんとついていないとダメ.<br><br><font color="#FF1493">dataname=loadname(1:42); %ファイル名の前42文字とする<br>EEG = pop_loadset( 'filename', loadname, 'filepath', pwd);</font><br><br>loadnameから拡張子を外してdatanameにしています.<br>拡張しぬきの文字数がここでは42ということです.<br>EEG = pop_loadset(...<br>は非常に便利でEEGLABを立ち上げなくても機能します.<br>これでデータをロードします.<br>pwdでは現在選択中のディレクトリということです.<br><br><br><font color="#FF1493">EEG.filepath=pwd;<br>ExpName=loadname(1:9); %ファイル名の1-9文字で実験名を命名する<br>EEG.subject=loadname(11:15); %ファイルの前11-15文字で参加者名を命名する<br>EEG.condition=loadname(37:42);%ファイルの後ろから37-42文字で条件名を命名する</font><br><br>ここでloadnameから情報を引き出しています.<br>だからファイル名をきちんと書いておく必要があるんですね.<br>バラバラだとここでつまづきます.<br>というかまず一括管理は無理ですね.<br><br><font color="#FF1493">[ALLEEG, EEG, CURRENTSET] = eeg_store( ALLEEG, EEG, 0 );<br>end</font><br><br>というわけでここまででfor文が終了.<br>データを読み上げて，対応する構造体に格納し，<br>endまできたら戻って次のデータ，<br>ということを全部のデータにやると，この次に進みます.<br><br><font color="#FF1493"><br>ALLEEG = eeg_checkset(ALLEEG); EEG = eeg_retrieve(ALLEEG, CURRENTSET);<br>[STUDY, ALLEEG] = std_checkset(STUDY, ALLEEG);<br>eeglab redraw</font><br><br>ここはほとんど大人の事情.<br>EEGLAB内でデータの調整をしています.<br>eeglab redraw<br>はこの後エラーが出るので，強制的にredrawで止めてます.<br>ここでredrawされるとポップアップが出るので，<br>ここで「Remove」を選択すると続きを処理します.<br><br><font color="#FF1493">[STUDY ALLEEG] = std_editset( STUDY, ALLEEG, 'name', ExpName, 'filename', ExpName, 'updatedat', 'on', 'savedat', 'on' );<br>CURRENTSTUDY = 1; EEG = ALLEEG; CURRENTSET = [1:length(EEG)];<br><br>eeglab redraw</font><br><br>最後にstudyを保存して終了.<br>実験名がStudyファイルの名前になるようにしています.<br>自分でやりたい場合は，ExpNameを直接変更するとできます.<br><br>これでフォルダに実験名.studyというファイルができます.<br><br>これを作った良さは，また今度.<br><br><br>
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10468691686.html</link>
<pubDate>Fri, 26 Feb 2010 20:41:51 +0900</pubDate>
</item>
<item>
<title>STUDYファイル②</title>
<description>
<![CDATA[ ①からの続きです．<br>①を踏まえての内容です．<br><br>versionはv7.1.3.11.b<br><br>さてこの状態でフォルダにすべてのデータファイルが入っています．<br>たとえば20人，3条件だったら，60個のデータがあるはずです．<br>EEGLABでは<br><br>データの情報を.setに<br>データの内容を.fdtに<br><br>分けて保存するので，実際にフォルダ内のファイルの個数は倍の120個です．<br>エラーが出たりおかしかったら，ここから確認です．<br><br><br>さてここまでできたらMATLABで以下を実行です．<br><br><br><font color="#FF1493">currdir='<font color="#0000FF">E:\FaceEmoCh\FECStudy</font>';<br><br>[ALLEEG EEG CURRENTSET ALLCOM] = eeglab;<br>pop_editoptions( 'option_storedisk', 1, 'option_savetwofiles', 1, 'option_saveica', 0, 'option_single', 1, 'option_memmapdata', 0, 'option_computeica', 1, 'option_scaleicarms', 1, 'option_rememberfolder', 1);<br>ALLEEG = eeg_checkset(ALLEEG); EEG = eeg_retrieve(ALLEEG, CURRENTSET);<br>cd(currdir);<br>allfiles=dir('*.set');<br>for n=1:length(allfiles)   %すべての条件にあうファイルをロードする<br>loadname=allfiles(n).name;   %ファイルの名前を取得してloadnameに格納<br>dataname=loadname(<font color="#0000FF">1:42</font>);   %ファイル名の前42文字とする<br>ExpName=loadname(<font color="#0000FF">1:9</font>);  %ファイル名の1-9文字で実験名を命名する<br>EEG = pop_loadset( 'filename', loadname, 'filepath', pwd);<br>EEG.filepath=pwd;<br>EEG.subject=loadname(<font color="#0000FF">11:15</font>); %ファイルの前11-15文字で参加者名を命名する<br>EEG.condition=loadname(<font color="#0000FF">37:42</font>);%ファイルの後ろから37-42文字で条件名を命名する<br>[ALLEEG, EEG, CURRENTSET] = eeg_store( ALLEEG, EEG, 0 );<br>end<br>ALLEEG = eeg_checkset(ALLEEG); EEG = eeg_retrieve(ALLEEG, CURRENTSET);<br>[STUDY, ALLEEG] = std_checkset(STUDY, ALLEEG);<br>eeglab redraw<br><br>[STUDY ALLEEG] = std_editset( STUDY, ALLEEG,  'name', ExpName, 'filename', ExpName, 'updatedat', 'on', 'savedat', 'on' );<br>CURRENTSTUDY = 1; EEG = ALLEEG; CURRENTSET = [1:length(EEG)];<br><br><br>eeglab redraw<br></font><br><br>この中で<br>青文字は自分の環境に合わせて変更します．<br><br>①自分がデータを入れたフォルダ<br>②拡張子を除いたファイル名の文字数<br>③実験名が何文字目から何文字目までか<br>④参加者名が何文字目から何文字目までか<br>⑤条件名が何文字目から何文字目までか<br><br>途中（一回目のeeglab redraw）でポップアップが出ますので，<br>（出ないこともあるかも）<br><br><br><a href="http://stat.ameba.jp/user_images/20100226/20/dpslab-nk/fe/9f/p/o0416011610430053604.png"><img src="https://stat.ameba.jp/user_images/20100226/20/dpslab-nk/fe/9f/p/t02200061_0416011610430053604.png" alt="$DPSVOX.NKのブログ" width="220" height="61" border="0"></a><br><br><br>Removeを選ぶとその後は自動で続行，STUDYファイルを作成してくれます．<br><br>詳しい解説は次で<br>
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10468669914.html</link>
<pubDate>Fri, 26 Feb 2010 20:25:43 +0900</pubDate>
</item>
<item>
<title>STUDYファイル①</title>
<description>
<![CDATA[ EEGLABで処理を行う際にSTUDYファイルを作成すると<br>データの管理に非常に便利です．<br><br>市販のソフトなどだとこういうものは勝手に作ってくれるのですが，<br>EEGLABでは自分できちんと管理しておかなくてはいけません．<br>ただ逆に言えば自分で管理できる分自由度は上がります．<br><br>EEGLAB内ではもちろんいろいろな制約がありますが，<br>やりたいことはMATLAB上でやってしまってもよいわけです．<br><br>なのでこの管理ファイルだけとりあえず作ってしまうと，<br>データがどこにあるか，どんなデータかなどを<br>STUDYという一つの構造体から参照できます．<br><br>まずは作る前に心構えから．<br>ファイル名をきれいに管理することが第一歩です．<br>これはEEGLABやSTUDYファイルに限らず，<br>大量のデータファイルを扱う場合にはいつでも言えることですね．<br><br>個人的には以下の構成をお勧めしています．<br><br>「[実験名] [参加者名] [表示しておきたい処理] ... [条件].set」<br><br>「」内の半角スペースはそのままファイル名に使います．<br>区切りをしっかりつけるということですね．<br>デリミタは半角スペースでなくてもよいのですが，<br>EEGLAB（MATLABの仕様？）で扱う場合，<br>半角アンダーバーは「直後の文字の”下付文字”化」<br>をあらわすようでちょっといやな感じになる時があります．<br><br>参加者名は多分「Sub01」とか「s01」でよいと思います．<br>01にするのは参加者が二桁になる場合，<br>三桁になる予定なら001として文字数がずれないようにするのがよいです．<br><br>表示しておきたい処理にはたとえばいくつのフィルタをかけているとか，<br>どんなICAをかけたかとか，結果をいろいろ比較したい場合に便利です．<br>なくても構いません．<br><br>条件は実験条件ですね．これも条件間で文字数を一致させるのがよいです．<br><br>たとえば私の最近のデータは<br><br>「FaceEmoCh Sub01 fil01 ICArej posich.set」<br><br>のような感じです．<br><br>このような<br>参加者ごと，条件ごと<br>のデータができたら，<br>それを一つのフォルダに入れてしまいます．<br><br>これでSTUDYファイルを作る準備ができました．<br><br>もちろんGUIから作ることもできます.<br><br><a href="http://stat.ameba.jp/user_images/20100226/20/dpslab-nk/52/76/p/o0411036610430053601.png"><img src="https://stat.ameba.jp/user_images/20100226/20/dpslab-nk/52/76/p/t02200196_0411036610430053601.png" alt="DPSVOX.NKのブログ" width="220" height="196" border="0"></a><br><a href="http://stat.ameba.jp/user_images/20100226/20/dpslab-nk/b1/bf/p/o0800051610430053594.png"><img src="https://stat.ameba.jp/user_images/20100226/20/dpslab-nk/b1/bf/p/t02200142_0800051610430053594.png" alt="DPSVOX.NKのブログ" width="220" height="142" border="0"></a><br><br>ただ一つ一つ情報を打ち込んでいくのはめんどいですので，<br>コマンドラインかららくらくやる方法を紹介しています.<br><br>続く<br>
]]>
</description>
<link>https://ameblo.jp/dpslab-nk/entry-10468659405.html</link>
<pubDate>Fri, 26 Feb 2010 20:09:51 +0900</pubDate>
</item>
</channel>
</rss>
