• ベストアンサー

matlab グラフの作り方

matlab 初心者です。 数字の羅列の生データ(観測データ)をmatlabに読み込み、グラフを作成したいです。 どのようなプログラムにいなるのでしょうか..。 まったく見当がつかないので、こんな感じだよっていうのでも凄く助かります。 生データのフォーマットは「Licel Raw Data Format」です。 お詳しい方よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8529/18254)
回答No.4

#1 & #2 & #3です。 (1)「3行目の最後」とは、「and the number of the following date sets(integer 2 digits)」でしょうか? そうです。 (2)データセットの個数分繰り返して以下のプログラムで流れは正しいでしょうか。 そんな感じでいいんじゃないかな。

nknknknk222
質問者

お礼

本当にありがとうございました。

その他の回答 (3)

  • f272
  • ベストアンサー率46% (8529/18254)
回答No.3

#1 & #2です。 > 下記のプログラムで、32bitのintegerデータを個数分読み込めたということで合っているでしょうか。 あなたの書いたものだとデータセットは1つであると決めつけています。#1で「データセット数は3行目の最後に書かれている」と書いたとおり,データセットは1つとは限りません。 > そしてこの後、Dとグラフ関数でグラフを作るという認識で合っているでしょうか。 そういうことですね。 私はmatlabも持っていないし,読み込むデータも持っていないので確認ができません。自分で読んで変数にちゃんとした情報を取り込めているのか確認してください。まあ,その前にデータファイルを直接にバイナリエディタで開いて確認した方が早いかもしれませんが... それからバイナリの部分はデータのエンディアンを気にしておいたほうがいいですよ。デフォルトのままでもいいのかもしれないが,そうでないのかもしれません。

nknknknk222
質問者

補足

何度もご丁寧にご回答ありがとうございます。 (1)「3行目の最後」とは、「and the number of the following date sets(integer 2 digits)」でしょうか? (2)データセットの個数分繰り返して以下のプログラムで流れは正しいでしょうか。 ------------------------------ fid = fopen(filename); tline1 = fgetl(fid); tline2 = fgetl(fid); tline3 = fgetl(fid); dateset = str2num(tline2(25:26)); %データセット数 for 1:1:dateset   d = fgetl(fid);   n = d(32:37);     %the number of shots 部分   D = fread(fid,n,'long'); %データ部   plot(D) end fclose(fid); -------------------------- エンディアンについては調べたいと思います。

  • f272
  • ベストアンサー率46% (8529/18254)
回答No.2

#1です。 (1) 例えば1行目の最初の 「two digits showing the years in the century」はどのようプログラムで情報を得るのでしょうか。 tline1='a9981017.204152' であれば,tline1(2:3)で部分文字列99が抽出出来るのでstr2num(tline1(2:3))で数値99になるよね。これで1999年と言う意味を表している。 (2) また、「the day(decimal,two digits)」の部分で、小数点以下2桁とはどのように区間を指定して情報を得るのでしょうか。 どこにも小数点以下2桁なんて書いてないよ。もしかして英語がわからないの?10進数で2桁と言ってるだけです。 上の例で言えばtline1(5:6)で部分文字列10が抽出出来るのでstr2num(tline1(5:6))で数値10になる。10日と言う意味ですね。 (2) 個数はDataset description で分かるとはどういう意味でしょうか..。 datadescription ='1 0 2 08000 1 1600 07.5 286.o 0 0 00 000 12 002000 0.100 BT1' であればthe number of shots (6 digits)のところを見てデータの個数は2000個です。 (3) 32bitのintegerデータをfreadで読むとは「fread(fileID,'long')」で合っていますか。 A=fread(fileID,n,'long') のように32bitのデータをn個読むと言うようにしないと,ファイルの最後まで読み込もうとすんじゃないかな。 > 基礎知識が無いのと周りに質問できる人がいなく 私もmatlabなんて10年以上前にちょっと1週間くらい使っただけですよ。 周りに質問できる人がいないってどういうことですか?大学でも会社でも先輩がいるでしょ。先輩が何も知らないのなら http://jp.mathworks.com/matlabcentral/?s_tid=gn_mlc こんなところとか,でなければLicel GmbHに聞いてみればどうですか?と言っても敷居が高いのかなあ? あなたの環境にmatlabをインストールした人に聞いてみることはできませんか?

nknknknk222
質問者

補足

ご丁寧にありがとうございました。 下記のプログラムで、32bitのintegerデータを個数分読み込めたということで合っているでしょうか。 そしてこの後、Dとグラフ関数でグラフを作るという認識で合っているでしょうか。 ------------------------------ fid = fopen(filename); tline1 = fgetl(fid); tline2 = fgetl(fid); tline3 = fgetl(fid); d = fgetl(fid); n = d(32:37); %the number of shots 部分 D = fread(fid,n,'long'); %データ部 fclose(fid); -------------------------- 現在事情が重なってすぐに質問できる人が近くにいない状況で、 本当に助かっています。提案していただいたサイトも活用します。

  • f272
  • ベストアンサー率46% (8529/18254)
回答No.1

Licel Raw Data Formatを調べてみると http://licel.com/raw_data_format.html これが見つかって,headerはasciiでdataはbaniaryで書いてあるということだから,とりあえず3行のheaderを読んで見る。 fid = fopen(filename); tline1 = fgetl(fid); tline2 = fgetl(fid); tline3 = fgetl(fid); 1行分が一つの文字列になっているから適当に切り分けて必要な情報を得てください。 データセット数は3行目の最後に書かれている 次にデータセット数だけデータを読む データの始まりはDataset descriptionで datadescription = fgetl(fid); その後は32bitのintegerデータが幾つか書かれている(個数はDataset descriptionでわかる)からfreadで読む。 (略) 最後にファイルを閉じる。 fclose(fid);

nknknknk222
質問者

補足

ご回答ありがとうございます。 調べたのですが、分からない部分を質問させてください。 (1)「適当に切り分けて必要な情報を得る」とありますが、調べても具体的なプログラムがイメージできないのですが..、 例えば1行目の最初の 「two digits showing the years in the century」はどのようプログラムで情報を得るのでしょうか。 (2)また、「the day(decimal,two digits)」の部分で、小数点以下2桁とはどのように区間を指定して情報を得るのでしょうか。 (2)データの部分について.. datadescription = fgetl(fid);  個数はDataset description で分かるとはどういう意味でしょうか..。 (3)32bitのintegerデータをfreadで読むとは「fread(fileID,'long')」で合っていますか。 基礎知識が無いのと周りに質問できる人がいなく、初歩的な質問だと思いますが、ご回答よろしくお願い致します。

関連するQ&A

専門家に質問してみよう