1

ファイル名が enh0.dat、enh1.dat、enh2.dat、... のファイルから最大 128 回データをロードする必要があります。そのため、ファイル名を文字列変数に格納し、名前が文字列変数に格納されているファイルからデータをロードし、後でプロットするためにロードされたデータを指定された変数に格納する必要があります。しかし、MATLABloadコマンドはデータを特定の名前 (データを含むファイルの名前) の変数にロードするため、plot コマンドの使用を自動化できません。

データをロードする必要があるファイルの名前を文字列変数に格納することはできますか? このMATLAB newbie: problem reading in file when the file name is stored in a stringもチェックしまし たが、うまくいかないようです。の結果をプロットしようとすると、このエラーが発生しますtextscan

??? ==> plot の使用エラー cell から double への変換はできません。

これは使用されるコードです:

indx = [1:128];
enh_file_cntr = 0;
enh_pre = 'enh';
gain_pre = 'gain';
[enh_file_cntr_str, errmsg1] = sprintf('%d', enh_file_cntr);
enh_file_name = strcat('enh', enh_file_cntr_str, '.dat');
[gain_file_cntr_str, errmsg1] = sprintf('%d', enh_file_cntr);
gain_file_name = strcat('enh', gain_file_cntr_str, '.dat');
fid_enh = fopen(enh_file_name, 'r');
fid_gain = fopen(gain_file_name, 'r');
enh_data = textscan(fid_enh, '%f', 128);
gain_data = textscan(fid_gain, '%f', 128);
subplot(2,3,1);
plot(indx, enh_data, 'b', indx, gain_data, 'r');

これが機能する場合enh_file_cntrforループ内の値をインクリメントします。上記のコードを修正するにはどうすればよいですか?

4

2 に答える 2

1

load コマンドを使用してデータを読み取ることもできるようです。

作成された変数名の問題を回避するには、load コマンドで変数を指定して出力するだけです。

私はあなたが最初に試したと思います

load(enh_file_name)

作成された変数は、変数 enh_file_name の filename であることがわかりました。

あなたはただ使う必要があります

enh_data = load(enh_file_name)

これの副次的な利点は、セル変数を処理する必要がないことです。

于 2012-09-24T04:02:21.123 に答える
1

最初:plot関数は数値行列タイプの入力を受け入れます。textscanセル配列である関数の出力を入力しようとしています。あなたの場合、セル配列の最初の要素には数値行列が含まれていますが、オブジェクトは数値行列自体ではありません。セル内に格納されている数値行列を取得するには、次を使用します。

enh_data = enh_data{1};

プロット関数を呼び出す前。注:セル配列の要素にアクセスするときは、常に中かっこを使用します{}。数値行列の要素にアクセスするときは、通常の括弧を使用します()。複数のセルを含む cell 配列がある場合は、 を使用してスライスできます()

もちろん、セル配列内のセル自体にセル配列を含めることもできますが、今のところは気にする必要はありません :-)

2 番目: で開いたファイルは必ず閉じてくださいfopen。つまり、一度使用したら、もう一度textscanファイルを閉じますfclose(fid_enh)

第三に、ファイル名を文字列に格納することで何を意味するのかよくわかりませんか? enh_file_name変数を使用して上記のコード スニペットで正確にそれを行っているように見えますか?

于 2012-09-24T02:05:33.250 に答える