% FFT condition050930
% m-file for octave
% サンプリング周期とデータ点数から周波数刻みを求める．
% サンプリング周期と計測予定周波数に対する％で希望の周波数刻みを求め，FFTに必要なデータ点数を求める．
%



clear
format short e


InputTsStyle = 2;		%1:サンプリング一定
				%2:サンプリング可変（入力値×整数倍）

input_Ts = 100e-6;		%入力値　Sampling周期[sec]

input_Mesure_F = [12.6
		 20.0
		 31.6
		 50.1
		 79.4
		 100
		 126
		 158
		 200
		 251
		 316
		 398
		 501
		 631
		 794];			%入力値　計測予定周波数[Hz]

input_F_persent = 1;			%入力値　計測予定周波数の分解能による誤差[%]

F_sampling = (input_F_persent/100)*input_Mesure_F;	%入力値　周波数刻み[Hz]

switch InputTsStyle

case 1
	OutPut_FFT_N_Sum = [];
	size_F = size(F_sampling,1);
	for jj = 1:size_F
		N_Sum = 1/(input_Ts*F_sampling(jj));	%データ点数[point]
		for ii = 1:20
 			FFT_N_Sum = 2^ii;
			if FFT_N_Sum >= N_Sum
				break;
			end
		end
		OutPut_FFT_N_Sum = [OutPut_FFT_N_Sum
					FFT_N_Sum	];
	end
	result = [ input_Mesure_F F_sampling OutPut_FFT_N_Sum ]
	
	% ファイル出力
	dir_name = 'D:\\GNU Octave 2.1.50\\octave_files\\m_files\\for_octave\\';
	save_file = strcat(dir_name,'FFT_condition.csv');
	dlmwrite(save_file,result,',');

case 2
	OutPut_FFT_N_Sum = [];
	OutPut_Opt_Ts = [];
	size_F = size(F_sampling,1);
	for jj = 1:size_F
		Opt_Ts = max(input_Ts,(1/input_Mesure_F(jj)/32));	
					%目視でSin波を確認して32分割程度なら滑らかだと感じたので32分割
		Opt_Ts = round(Opt_Ts/input_Ts)*input_Ts;		
		N_Sum = 1/(Opt_Ts*F_sampling(jj));	%データ点数[point]
		for ii = 1:20
 			FFT_N_Sum = 2^ii;
			if FFT_N_Sum >= N_Sum
				break;
			end
		end
		OutPut_Opt_Ts = [OutPut_Opt_Ts
				Opt_Ts]; 

		OutPut_FFT_N_Sum = [OutPut_FFT_N_Sum
					FFT_N_Sum	];
	end
	result = [ input_Mesure_F F_sampling OutPut_Opt_Ts OutPut_FFT_N_Sum ]
	
	% ファイル出力
	dir_name = 'D:\\GNU Octave 2.1.50\\octave_files\\m_files\\for_octave\\';
	save_file = strcat(dir_name,'FFT_condition.csv');
	dlmwrite(save_file,result,',');

end
