MATLAB Note/ファイル操作
Last-modified: 2015-02-24 (火) 01:06:40
Top / MATLAB Note / ファイル操作
- 目次
ファイル読み込み †
- 配列の読み込み
- テキストファイル magik.txt に記述された以下のような値を、直接MATLABの配列に取り込みたいとします。
16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0
- カンマ区切りでも、スペース区切りでも、タブ区切りでもかまいません。
- MATLABへの読み込みは以下のようにします。
>> A = load('magik.txt') A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
- テキストファイル magik.txt に記述された以下のような値を、直接MATLABの配列に取り込みたいとします。
- 文字列の読み込み
- テキストファイル hello.txt に記述された以下のような文字列を、直接MATLABに取り込みたいとします。
HelloWorld1! HelloWorld2!!
- MATLABへの読み込みは以下のようにします。
[names,types,x,y,answer] = textread('hello.txt','%s%s%f%d%s'); charnames = char(names); %セル配列namesを文字列配列charnamesに変換 for count = 1:1:length(charnames(:,1)) %FOR文 1 ~ namesの最後の行まで順番に処理 line = charnames(count, :); %namesのcount行目をlineに格納 disp(line) %各行の中身を出力 end %FOR文終了
HelloWorld1! HelloWorld2!!
- テキストファイル hello.txt に記述された以下のような文字列を、直接MATLABに取り込みたいとします。
- Excel(.xls)ファイルの読み込み
ファイル書き出し †
- 配列Aの中身をCSV形式のテキストで書き出したい場合は、以下のようにします。
>> csvwrite('output_filename.txt', A);
- 【注意】csvwriteの使用時には、有効数字の取り扱いに注意すること!!*1
- 文字列を書き出したい場合は、以下のようにします。
>> fid = fopen( 'outputFile.txt', 'wt'); %新規書き出しモードでファイル作成(追記モードはwt → a) >> fprintf(fid,'%s\n', 'HelloWorld!!') %文字列改行モードで 'HelloWorld!!' と書き込む >> fprintf(fid,'%s', 'HelloWorld!!') %文字列モードで 'HelloWorld!!' と書き込む >> fclose(fid); %ファイルをクローズ
- 参考 fprintfコマンドでテキストファイルに書き出したデータが改行されません
ヘッダやテキスト付きCSVファイル読み込み †
- 例えば、文字列を含む phoneTime.csv を読み込むとします。
- 続いて、一行目にヘッダを含む phoneTime2.csv を読み込むとします。
- 以下を実行します。
fid = fopen('phoneTime2.csv', 'rt'); % ヘッダ情報(1行目の文字列)を得る text = textscan(fid, '%s', 1, 'delimiter', '\n'); % データ部(文字列 数値 数値形式で区切り記号は「,」)を得る text = textscan(fid, '%s %f %f', 'delimiter', ','); fclose(fid); % 順番に表示してみる for count = 1 : 1 : length(text{1}) disp(text{1}(count)); disp(text{2}(count)); disp(text{3}(count)); end
- 以下を実行します。
- 列サイズが大きい場合、Rのrep関数と同じようにrepmat関数が使えます(参考:A similar function to R's rep in Matlab [duplicate])。使用例はVoiceSauce/F0解析結果の検討を参照して下さい。
- MFCC解析のツール/MATLAB Auditory Toolbox, Praat, HTK の比較 で、様々な形式のテキストファイルを読み込んでいます。
グラフの書き出し †
- 参考(Ding Ming's Wiki@Japan)
- プロットしたグラフを、そのまま画像ファイルにして出力するには、以下のようにします。
>> X = [1 2 3 4 5 6 7 8] %プロット用データ列を宣言 X = 1 2 3 4 5 6 7 8 >> plot(X); %プロット(サーバで実行しても何も起きません) >> saveas(gcf, 'plot', 'jpg'); %SAVEAS Figure線図を希望する出力形式で保存
- これで、変数Xのプロットグラフが「plot.jpg」として保存されます。
- サーバ上でグラフを作成するときなどに利用できます。
- さらに参考 - 画像を取り込んで加工して出力する(画像処理で遊ぼう!)
WAVファイル読み込み †
- ファイルから取り込む
- WAVREAD Microsoft WAVE (".wav")サウンドファイルの読み込み
filename = '001.wav'; %読み込むファイル名を指定 [data,Fs,Bits] = wavread(filename);
- dataには音声データ(列表記の振幅)、Fsにはサンプリング周波数、Bitsには量子化ビット数が代入されます。
- 音声データとサンプリング周波数については、MATLAB勉強会第三回 で詳しく解説しています。
- WAVREAD Microsoft WAVE (".wav")サウンドファイルの読み込み
- マイクで取り込む
- WAVRECORD Windows オーディオ入力デバイスを使って、音声を録音
Fs = 44100; time = 3; data = wavrecord(time*Fs, Fs, 1); %1chでtime秒間録音して、データをdataに格納
- WAVRECORD Windows オーディオ入力デバイスを使って、音声を録音
WAVファイル書き出し †
- WAVWRITE Microsoft WAVE (".wav")サウンドファイルへの書き出し
filename = '002.wav'; %書き出すファイル名を指定 wavwrite(data, Fs, 16, filename); %16 = 量子化ビット数
- 量子化ビット数は、デジタルデータを作成するときの値の上限に関係します。とりあえず16にしておけば問題ないです。