オンラインで取得したデータは別の機会やMATLAB以外の環境で使用するかもしれません。そのためにはファイルとして保存しておくと有効です。ここからはMATLABデータを何らかのファイルフォーマットで保存したり読み込んだりするためのファイルI/O機能をご紹介しましょう。MATLAB環境で使用可能なファイルI/O機能は大きく分けて3種類あります。
- 汎用ファイルのI/Oコマンド
- 低水準関数および数値データファイルのI/O
- インポートツール(読み込み機能のみ)
まず、(1)ですが、ファイルフォーマットごとにファイル読み込み/書き込み用コマンドが用意されています。MATLABで使用したデータをMATLAB上でしか使用しないのであれば、MATファイルで保存するのが良いでしょう。MATファイルは圧縮形式のMATLAB専用ファイルフォーマットです。MATLAB R2006b以降で対応するMATファイル Ver 7.3では、2GB以上のデータに対応しており、部分的なデータのRead/Writeに対応しているなど大容量データの取り扱いにも対応しています。
MATLAB変数(data, timestamps)をMATファイル(daq_data.mat)に保存するにはsaveコマンドを使用します。
>> save daq_data.mat data timestamps
読み出す場合にはloadコマンドを使用します。
>> load daq_data.mat
保存したファイルをMATALB以外の環境で使用する可能性がある場合、汎用ファイルフォーマットで保存することもできます。
同様にExcel形式でシート'sheet1'に保存します。
>> xlswrite('daq_data.xlsx', [data timestamps], 'sheet1')
保存したデータを読み込みます。
>> xls_data = xlsread('daq_data.xlsx', 'sheet1')
xls_data =
1.9806 0
1.9793 0.0000
1.9786 0.0000
1.9786 0.0000
1.9786 0.0000
1.9783 0.0001
1.9779 0.0001
1.9783 0.0001
1.9783 0.0001
1.9786 0.0001
・
・
・
・(省略)
他にもMATLABの標準機能で対応しているファイルフォーマットを一部示します。
- imread/imwrite:画像ファイルからイメージを読み込み/書き込み
- csvread/cscwrite:コンマ区切りテキストファイルの読み込み/書き込み
- dlmread/dlmwrite:任意の区切り文字を使ったファイルの読み込み/書き込み
- audioread/audiowrite:オーディオファイル(MP3, AAC, WAV)の読み込み/書き込み
- VideoReader/VideoWriter:ビデオファイルの読み込み/書き込み
オーディオファイルを読み込む例を示します。携帯型音楽プレーヤーなどで使われるMPEGフォーマットのデータを読み込んで再生する内容になっています。
>> audioinfo('MATLAB_Theme.m4a') % ファイル情報表示
ans =
Filename: [1x67 char]
CompressionMethod: 'AAC'
NumChannels: 2
SampleRate: 44100
TotalSamples: 2042880
Duration: 46.3238
Title: 'Accelerating the pace of engineering and science'
Comment: []
Artist: 'MathWorks'
BitRate: 256
[y, Fs] = audioread('MATLAB_Theme.m4a'); % ファイル読み込み
>> [y, Fs] = audioread('MATLAB_Theme.m4a'); % ファイル読み込み
>> p = audioplayer(y,Fs); % オブジェクト作成
>> play(p) % 再生
>> clear p % 再生停止
次に(2)低水準関数および数値データファイルのI/Oについてですが、これは特殊なデータやファイルフォーマットが特殊な場合に使用できます。
高水準関数が豊富に用意されているMATLABでは、逆にC言語のプログラムで記述するような低水準の処理が書けないかというと、そんなことはありません。独自フォーマットのファイルを読み込む/書き込む場合には低水準関数の出番です。例えばHEX(16進数)のデータフォーマットでテキストファイルに書き込んでみましょう。
>> sig1 = [10 15 48 63] % 入力データを定義
sig1 =
10 15 48 63
>> fid = fopen('data_hex.txt','w'); % ファイルオープン
>> fprintf(fid,'0x%04x\n',sig1); % 0xを付けて4桁HEX値と改行コードを書き込み
>> fclose(fid); % ファイルクローズ
書き込んだテキストファイルを開いてみると、HEX値でデータが書き込まれていることが確認できます。
今度は逆に書き込んだファイルからデータを読み出してみましょう。
>> fid2 = fopen('data_hex.txt','r'); % ファイルオープン
>> readdata = fscanf(fid2,'0x%04x\n') % 4桁HEX読込
readdata =
10
15
48
63
>> fclose(fid2);
最後に(3)のインポートツールは、GUIベースでファイルの読み込みを行う機能です。マウス操作によって、MATLABで対応している様々なフォーマットのファイルからデータを読み込むことができ、文字列、日付、数値などが混在しているような複雑なデータにも対応できるインテリジェントなGUIとなっています。
使い方は、読み込みたいファイルをMATLABデスクトップウィンドウ左側にある「現在のフォルダー」ウィンドウにて右クリックし、「データのインポート」を選択するか、同じくMATLABデスクトップウィンドウ上側に並んでいるアイコンの中から「データのインポート」ボタンをクリックしてから読み込みたいファイルを選択します。
インポートツールGUI画面ではMicrosoft Excelでテキストデータをインポートする時のように、GUI上で読み込み方法に関する様々な設定を行うことが出来ます。
- 区切り文字の指定
- 読み込み範囲の設定
- 空白データの置換データ指定
- 出力先の変数のデータ型の指定
一度データを読み込んで読み込みフォーマットが正しいことを確認できたら、是非とも「選択のインポート」からプルダウンメニューを表示し、「関数の生成」をしておきましょう。
自動的にMATLABプログラムが生成されるので、それ以降は同じようなフォーマットのファイルに対しては、インポートツールを起動しなくても、この関数にファイル名、データの開始位置、終了位置などを引数として指定(引数に何が必要かはケースバイケースで異なります)するだけで読み込むことが出来るようになります。
著者紹介
松本 充史(まつもと あつし)
MathWorks Japan
アプリケーションエンジニアリング部
シニアアプリケーションエンジニア
Mathworks JapanではMATLABの中でも特に信号処理やコード生成に関する機能を担当している。
今回の記事で紹介しているMATLABコードやSimulinkモデルのファイルをご要望の方はこちらまでお問い合わせ下さい。