matlabで単一の Figure での複数(30個)のプロットの表示方法

エクセルデータを高速フーリエ変換したデータを写真のように表示させたいんですが、 グラフに周波数のデータが4個しか表示されません。(添付ファイル参照) 全部で30個表示させたいんですが、最大4個までしか表示できないんでしょうか。 どこを書き換えればいいでしょうか。 プログラムは以下の通りです。
clear all;close all;
fontsize = 10;
labelfontsize = 10;
%%data input
[FileName,PathName,FilterIndex] = uigetfile('C:\Users\b10061\Desktop\実験データ\*.csv','select the file','MultiSelect','on');
cd(PathName);
[a,b] = size(FileName);
az = -66.5;
el = 46;
% nouha = csvread([subject num2str(1) '.csv'],1,0);
for a = 1:b
[nouha,txt,raw] = xlsread(FileName{1,a});
fs =500;
%%10格納
nouha(:,1) = nouha(:,1)/5000;
%%10s切る
for time = 1:length(nouha)/5000/1
nouha_win10{time} = nouha((time-1)*5000+1:time*5000,:);
%%%%%%%%%%%%%fftをやってるところ%%%%%%%%%%%%%%%%%%%
n=length(nouha_win10{time});
y{time} = fft(nouha_win10{time}(:,2),n);
f = (0:n-1)*(fs/n);
power(:,time) = y{time}.*conj(y{time})/n;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
% %
% % power1 = power(
figure()
for i = 1:time
h1 = plot3(ones(201-00,1)*i*1,f(1,01:201),power(01:201,i));
hold on
h2 = plot3(0:time*10:time*10,ones(2,1)*8,ones(2,1)*0,'r');
hold on
h3 = plot3(0:time*10:time*10,ones(2,1)*13,ones(2,1)*0,'r');
hold on
grid on
xlabel('times(s)','fontsize',labelfontsize,'color',[0 0 0])
ylabel('frequency(Hz)','fontsize',labelfontsize,'color',[0 0 0])
zlabel('PSD','fontsize',labelfontsize,'color',[0 0 0])
set(gca,'YDir','rev')
set(gca,'FontSize',fontsize);
view([az,el])
end
xlim([0 30])
ylim([4 20])
zlim([0 1*10^4])
end

1 comentario

michio
michio el 30 de Nov. de 2017
参照しやすいよう画像を貼り付けておきます

Iniciar sesión para comentar.

 Respuesta aceptada

michio
michio el 30 de Nov. de 2017
Editada: michio el 30 de Nov. de 2017

1 voto

スクリプト実行後に time という変数にはどんな値が入っていますか?
実際に実行できないのであくまで推測ですが、、最後の for ループ
for i = 1:time
h1 = plot3(ones(201-00,1)*i*1,f(1,01:201),power(01:201,i));
(中略)
では i = 1 から i = time まで実行することになっています。time という変数は1つ前のループ変数として使われています。これは意図されたものでしょうか。

6 comentarios

tomo
tomo el 1 de Dic. de 2017
Editada: tomo el 1 de Dic. de 2017
回答本当にありがとうございます。 スクリプト実行後に変数timeを確認したところ、数値の4が入っていました。 これが原因なんでしょうか? だとすればどうしたら変数timeを30に変更できますか?
time という変数を1つ前のループ変数として使っているのに特に意図はないです。
michio
michio el 1 de Dic. de 2017
Editada: michio el 1 de Dic. de 2017
for i = 1:time
において time が 4 だと、4回しか描画は実行されません。ただ、問題はこの箇所ではなく確認すべきは
length(nouha)/5000/1
の値かと思います。この計算結果がループの回数を決めているようですが、1つ前のループ(powerを計算する所)がそもそも4回しか回っていないのではないかと推測しています。
for i = 1:time
for i = 1:30
に変更すると何はともあれ30回描画が行われますが、1つ前のループが4回しか計算されていないかと思いますので、お望みの結果にはならないかと思います。
tomo
tomo el 1 de Dic. de 2017
Editada: tomo el 1 de Dic. de 2017
for i = 1:30
に変更したところ、下のエラーが出てしまいました。
インデックスが行列の次元を超えています。
エラー: nouha (line 59) h1 = plot3(ones(201-00,1)*i*1,f(1,01:201),power(01:201,i));
length(nouha)/5000/1を変更すれば30回計算するようになるということでしょうか?
michio
michio el 1 de Dic. de 2017
それは、4回分のpowerしか計算されていないのが直接の原因です。
for time = 1:length(nouha)/5000/1
 (中略)
end
のループを見るにどうも
length(nouha)/5000/1
の計算結果の回数(おそらく4) だけしか power が計算されないようプログラムが組まれているようですので、プログラムだけから私が提案できることは、残念ながらこれ以上ありません。
length(nouha)/5000/1
の計算意図を再確認し、今一度プログラムを見直してみてください。
tomo
tomo el 1 de Dic. de 2017
Editada: tomo el 1 de Dic. de 2017
length(nouha)/5000/1
をもう一度確認してみます。 助けていただいて本当にありがとうございました。
michio
michio el 1 de Dic. de 2017
何かあればまた是非投稿してみてください。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre プログラミング en Centro de ayuda y File Exchange.

Preguntada:

el 30 de Nov. de 2017

Comentada:

el 1 de Dic. de 2017

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!