• 締切済み

MATLAB 波形切り出し格納

MATLAB 波形切り出し格納 脳波波形の切り出しと格納をMATLABで行いたいのですが、波形が150(uV)を超えたところから、1秒間(1000ポイント)切り出し、新しいXというフォルダに格納するのを繰り返したいのですが、プログラムが分かりません。よろしくお願いします また波形のプロットまではできていてeditを用いてfor文で繰り返しを表現したいです。よろしくお願いします。

みんなの回答

  • Kules
  • ベストアンサー率47% (292/619)
回答No.1

えーと…少ししようとしていることがわからないのですが。 Xというフォルダには何を格納すればいいのでしょうか? >また波形のプロットまではできていて とあるということは画像ファイルを格納していくのでしょうか? あるいは、 >波形が150(uV)を超えたところから、1秒間(1000ポイント)切り出し というところで作った配列を変数として保存するのでしょうか? 画像ファイルを保存するならフォーマットに関わらずsaveasで大体の対応はできます。 imwriteを使ってもいいかも知れません。 変数を保存するなら確かsaveで良かったかと。 後、フォルダを作る時はmkdirを使うとかはいいですかね… 一番の問題は >波形が150(uV)を超えたところから、1秒間(1000ポイント)切り出し というところですかね…これをforループで実現するとなるとなかなか骨になりそうです。 ・波形データの配列fとして、f(k)<=150μVかつf(k+1)>150μVとなるkを探す ・kの個数分だけforループを回す といったところでしょうか。さすがに配列長-1000回ループを回すのはしんどそうです。 「こういうところではないんだよ」とか「こういうことなんだけどエラーが出て動かないんだよ」とか ありましたら補足に書いていただけるともう少し有用な回答ができるかも知れません。 参考になれば幸いです。

関連するQ&A

  • matlab制御文での値の格納?

    現在matlabを使用してfor文で1から3000まで繰り返し、sigmaを求めるというプログラムを作っているのですが、うまくいきません。これだとn=3000のsigmaの値しかでてきません。sigmaにfor文で繰り返し求めたすべての値を格納したいです。初心者で低レベルな質問ですみません。どなたか教えていただけませんか。 sigma=0; for n=1:3000, if n <=300 dsig=1; elseif n <= 950 dsig=-1; elseif n <= 1700 dsig=1; elseif n <= 2550 dsig=-1; elseif n <= 3000 dsig=1; end sigma =sigma + dsig; end

  • matlabを使用したfor文の計算

    matlabのfor文を使用し,計算をしています. for文を使用し計算すると, ans= ans=   ・   ・   ・ のような形で結果が出て,そのままファイルに出力すると最後の演算の結果のみが出力されてしまいます. この結果を縦に並べて行列の形で格納しなおしたのですが,この場合どのような式を組んだらいいのを教えていただければと思います.

  • 2つの波形の重なり部分の面積を求めるには

    (x,y)座標の表形式のUV可視スペクトルデータが2つ(波形A,波形B)あります.例えば, 波形Aは,xの範囲が400~700nmで2nmきざみ, 波形Bは,xの範囲が500~1000nmで0.3nmきざみ,とします. 波形Aと波形Bは,ともに500~700nmのx領域をカバーしていますが,全く同一のx座標を持つデータ点そのものはあまりありません. このとき,波形Aと波形Bの重なり部分の面積(500~700nm)をできるだけ簡単に求めるにはどうしたらよいでしょうか?解析的に求めるのではなく,市販のプログラム(Igor,Origin,Excelなど)を用いてよいので,近似的な面積を簡単に出す方法を探しています. x座標が一致したデータ点を持つ2つの波形であれば,各点で計算すればExcelでも簡単にできます.x座標が一致しないとお手上げです.2つの波形を1つのグラフにプロットして印刷し,共通部分を切り抜いて重さを測ることならできるのですが,もっといいやり方がきっとあるはずだと思うのです.

  • MATLABで外れ値をプロットする方法を教えてくだ

     MATLABで外れ値をプロットする方法を教えてください。  具体的には下記のとおりです。  MATLABで、中央値+中央値から±20%離れた時系列データをプロットするにはどうすればよいでしょうか? 冗長なprogramしか作成できないため、よい関数か、方法があれば教えていただきたく思い、 質問しました。 まず、時系列データですが、数十万点数からなる信号になっています。 この信号の中央値をだし、その中央値から±20%の範囲でひっかかるデータをplotしたく思っています。 中央値算出は、関数を知っていますので処理が早いのですが中央値から±20%の範囲でひっかかるデータをプロットするのにいまは、以下のような考えで行っています。 行データ、size(x(:)) ans=:1000000 1とおきます。 まず、 1)中央値を求める。 2)median+20%、median-20%を求める。 3) hold on;  for i=1:1:data-length   if(x(i)<=median-20% & x(i)>=median+20%) plot x(i) endif  end というようにしています。しかし、これではデータ一点一点検討する必要があるので冗長で、処理に時間が かかります。 そのため、for文を使わずに、 medi-20(:)=function(x(:),median-20) medi+20(:)=function(x(:),median+20) で計算できるような、関数functionを教えていただけると幸いです。 よろしくお願いします。

  • matlabでの長時間の計算について

    すみません、現在matlabで数値解析を行っております。 質問を以下にまとめたので、よろしければアドバイスをお願いします。 -------------------------------------------------------------- matlabで数十分かかると考えられる計算を行おうとしています。 その場合、計算後の大容量のデータは一般的にどのように保存すべきでしょうか? これまで、パラメータを50個用意してそれぞれ計算を行い、 後に見比べるために、目的の変数の値をプロットし、画像(角度などを指定してjpegに)として保存していました。 (for文を使って一定量パラメータを変化させる毎に、saveasを使ってグラフを保存していた。) 今まではパラメータ1つあたり数十秒程度で済む計算だったのでこれでも良かったのですが、 今後はパラメータ1個あたりに対しかかる計算時間が数十分になります。。 そこで、今までと同じように保存していくやり方では、もしグラフの保存方法(角度など)を間違えてしまった場合に かなりの損失になってしまうと思ったので質問しました。。 何か効果的なデータの保存の仕方はありませんでしょうか? 以後もパラメータをfor文を使って一定量変化させ、50個用意して計算していこうと思うのですが・・ 一応現状で考えているのは、saveを使ってworkspace内の変数(全て)をそれぞれ保存していくというものです。 何かその他に効果的なデータの保存方法などありましたら是非教えてください。 -------------------------------------------------------------- 上記のように、 計算時間のかかる計算をmatlabを使って行おうと考えているのですが、 計算機を走らせている間、動作が著しく重くなり、ほとんど他の作業が出来なくなります。 (これは避けられませんよね・・?) 私はmatlabを学校で使っているので、帰宅する際、計算機を走らせて帰ろうと考えています。 (節電家でなくてすみません。。) 問題は途中でメモリ不足などで計算がストップしてしまわないかということです・・ 一応、パラメータを変える毎に初期化すべき変数はzerosを使って初期化しているのですが、 パラメータ毎の目的の変数(6つ)は、多いとそれぞれ10^6×200ほどの配列となる可能性があります。 せっかく手間暇かけて走らせたのに、途中でメモリ不足などと表示されたら辛いなぁと思い・・ 現在使っている計算機はubuntu11.04で、メモリは992.8MiBなのですが、やはりこの計算機だと際どいでしょうか・・? -------------------------------------------------------------- コードに関する質問なのですが・・ uが50000000*200の配列で、それぞれの要素に値が入っているとします。 これをそのまま1行目~50000000行目まで、順にグラフにプロットすると、かなりの時間がかかるので、 1行目から、一定数(例えば100)毎の行の配列を グラフにプロットさせたいのですが、やり方がわかりません・・ x = -10: 10: 200 ; t = 0: 100: 50000000 ; waterfall(x,t,u) ; とするとエラーが出ます。 どなたか訂正出来る方、お願いします。。 waterfall以外でも全然構いません。 -------------------------------------------------------------- 以上長々と質問すみませんでした。。 どなたかご指導頂けると助かります・・ あと、分類というのがよくわからなかったので、その他となっています・・ ごめんなさい。。

  • MATLABについての質問です。

    大学の研究していてMATLABでわからないところがあるのでぜひ教えて頂けたらと思っています。 よろしくお願い致します。 現在任意の多角形障害物を設置し,それらを回避する折れ線経路を全部求めるプログラムを作っているのですがどのように作ればいいかわかりません。 今は始点と終点を決めてクリックした所をつないでいくプログラムができたのですが問題文に沿ってできていません。 このプログラム後はダイクストラの方法で最短折れ線経路を求めるので それを含めてよろしくお願い致します。 clear all; close all; clc; init=1; final=1000; figure(1) for loop=init:final [x,y] = ginput A=[x,y] if 0<=x(:,:)&x(:,:)<=1&0<=y(:,:)&y(:,:)<=1 B{loop} =A else break end end figure(2) for C=init:loop-1 B{C} fill(B{C}(:,1),B{C}(:,2),'g');hold on axis([0,1,0,1]); end [x,y] = ginput pb=[x,y] figure(3) for C=init:loop-1 fill(B{C}(:,1),B{C}(:,2),'g');hold on axis([0,1,0,1]); plot(pb(:,1),pb(:,2),'o');hold on end for D=init:final [x,y] = ginput if 0<=x(:,:)&x(:,:)<=1&0<=y(:,:)&y(:,:)<=1 plot([pb(1,1),x',pb(2,1)],[pb(1,2),y',pb(2,2)],'-*');hold on node{D}=[[pb(1,1),x',pb(2,1)],[pb(1,2),y',pb(2,2)]] B{D} = sum(node{D}) else break end end for E=init:D-1 B{E} end

  • MATLABの質問です。

    MATLABについての質問です。 大学の研究していてMATLABでわからないところがあるのでぜひ教えて頂けたらと思っています。 よろしくお願い致します。 現在任意の多角形障害物を設置し,それらを回避する折れ線経路を全部求めるところまでできています。その後、全経路からダイクストラの方法で最短折れ線経路を求めたいのですがどのようにプログラムを持っていけばいいか分からず手詰まりしました。 ぜひご指導いただけますでしょうか。 よろしくお願いいたします。 プログラムは動きます。 close all; clc; init=1; final=1000; %図形座標取得 figure(1) for loop=init:final [x,y] = ginput A=[x,y] if 0<=x(:,:)&x(:,:)<=1&0<=y(:,:)&y(:,:)<=1 B{loop} =A else break end end % size(B{i},1) figure(2) for C=init:loop-1 B{C} fill(B{C}(:,1),B{C}(:,2),'g');hold on axis([0,1,0,1]); end [x,y] = ginput pb=[x,y] figure(3) for C=init:loop-1 fill(B{C}(:,1),B{C}(:,2),'g');hold on axis([0,1,0,1]); plot(pb(:,1),pb(:,2),'o');hold on axis([0,1,0,1]); end %図形の辺 k=0; for i=1:loop-1 for p=1:size(B{i},1) for q=p+1:size(B{i},1) k=k+1; obst(k,:) = [B{i}(p,:),B{i}(q,:)]; end end end Pall = pb(1, :); Pall = [Pall; cat(1, B{:})]; Pall = [Pall; pb(2, :)]; %全経路 k=0 for i=1:size(Pall,1) for j=i+1:size(Pall,1) k=k+1; path(k,:) = [Pall(i,:),Pall(j,:)]; point{k}=[i,j]; end end % 交差判定 H=0 for j=1:size(path,1) cflas=1 for i=1:size(obst,1) y1=((obst(i,1)-obst(i,3))*(path(j,2)-obst(i,2))+(obst(i,2)-obst(i,4))*(obst(i,1)-path(j,1))) y2=((obst(i,1)-obst(i,3))*(path(j,4)-obst(i,2))+(obst(i,2)-obst(i,4))*(obst(i,1)-path(j,3))) y3=((path(j,1)-path(j,3))*(obst(i,2)-path(j,2))+(path(j,2)-path(j,4))*(path(j,1)-obst(i,1))) y4=((path(j,1)-path(j,3))*(obst(i,4)-path(j,2))+(path(j,2)-path(j,4))*(path(j,1)-obst(i,3))) Y1=y1*y2 Y2=y3*y4 if Y1<0&&Y2<0 H=H+1 cflas=0 S{j}=[0,0,0,0] S1{j}=[0,0,0,0] end end if cflas==1 X=[path(j,1),path(j,3)]; Y=[path(j,2),path(j,4)]; Xa=[path(j,1),path(j,2)]; Yb=[path(j,3),path(j,4)]; S{j}=[X,Y] S1{j}=[Xa,Yb] plot(X,Y,'-');hold on end end barricade = length(B{1,1}); M=zeros %コストを計算 for k = 1:size(path,1) X1=S{k}(1,1); X2=S{k}(1,3); Y1=S{k}(1,2); Y2=S{k}(1,4); cost{k}=sqrt((X2-X1)^2+(Y2-Y1)^2) M(point{k}(1), point{k}(2) )=cost{k} % if cost{i}==0 % cost{i}=10 % end end M' g=cost{1} for j=1:size(obst,1)+1 if(cost{j}>cost{j+1}) g= cost{j+1} end end

  • Xwindow

    こんにちは。 Xwindowを使って部屋の温度状態を示す プログラムを作りたいのですがうまくいきません。 縦横100ポイントでプロットし、 部屋の枠は20度、上の壁には幅40の暖炉(100度) 各ポイントの温度は、[i][j]で for (i = 1; i < 100; i++) for (j = 1; j < 100; j++) g[i][j] = 0.25 * (h[i-1][j] + h[i+1][j] + h[i][j-1] + h[i][j+1]); このように計算し、10度ごとに違う色で プロットしたいのですが、 なぜか、すべて同じ色でプロットされてしまいます。 よろしくお願いします。

  • LTspiceで[Select Steps」の選択

    LTspice入門編という書籍を見ながら回路のシミュレーションを順にやっていますが、 .step param で、パラメーターを変化させたグラフは描けるのですが、Select Stepsが選択できません。 OS Win7 64bit LTspice Version 4.6o Edit Plot Defs File などを選択すると Trouble creating file: と表示されLTspiceのプログラムのあるフォルダが表示されますが、Win7ではプログラムフォルダのアクセス権は、設定されないようですので手動で設定するとかが絡んでいるのでしょうか? なんかもっと基本的な問題のような気もするんですが…

  • Flashのfor文で変数名を・・・

    Flashでfor文を使い、変数に値をいれたいと考えています。 kotae1,kotae2,kotae3・・・kotae10という名前の変数に 数字の順に答えを格納していきたいのですが、 iを使って表現するにはどのようにすればいいのでしょうか。 for(var i = 0; i < 10; i++){ 「   」= i * 10; } 「 」のところです。 よろしくお願いします!

    • ベストアンサー
    • Flash

専門家に質問してみよう