diff --git a/OOequipment/RC_TransferFunction.mlx b/OOequipment/RC_TransferFunction.mlx index 47eb0b3..7e8d9c0 100644 Binary files a/OOequipment/RC_TransferFunction.mlx and b/OOequipment/RC_TransferFunction.mlx differ diff --git a/OOequipment/RLC_TransferFunction.mlx b/OOequipment/RLC_TransferFunction.mlx index 2cde9cd..239c009 100644 Binary files a/OOequipment/RLC_TransferFunction.mlx and b/OOequipment/RLC_TransferFunction.mlx differ diff --git a/OOequipment/subfiles/RC_TransferFunction_script.m b/OOequipment/subfiles/RC_TransferFunction_script.m index e5287ab..120a23b 100644 --- a/OOequipment/subfiles/RC_TransferFunction_script.m +++ b/OOequipment/subfiles/RC_TransferFunction_script.m @@ -23,16 +23,20 @@ linkaxes([ax1,ax2],'x') %% Run the measurements if theory_only == false data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements); +%% Plotting %% Process the data A_mean = mean(data.magnitude); P_mean = mean(data.phase); A_std = std(data.magnitude); P_std = std(data.phase); + A_mean_log = 20*log10(A_mean); + A_std_log_neg = A_mean_log - 20*log10(A_mean - A_std); + A_std_log_pos = 20*log10(A_mean + A_std) - A_mean_log; %% plot average measurement, theory and asymptote. figure; ax1 = subplot(2,1,1); - semilogx(data.frequency,20*log10(A_mean),f,A,f,S) + semilogx(data.frequency,A_mean_log,f,A,f,S) ylabel('Magnitude [dB]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); legend('Average Measurement','Theory','Asymptote'); @@ -49,21 +53,21 @@ if theory_only == false %% plot avearage measurement with standard deviation and theory. figure; ax1 = subplot(2,1,1); + errorbar(data.frequency,A_mean_log,A_std_log_neg,A_std_log_pos) ax1.XScale = 'log'; - errorbar(data.frequency,20*log10(A_mean),20*log10(A_std)) hold on semilogx(f,A) hold off ylabel('Magnitude [dB]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); - legend('Average Measurement','Theory','Asymptote'); + legend('Average Measurement','Theory'); grid on title('RC-circuit Bodeplot') ax2 = subplot(2,1,2); - ax2.XScale = 'log'; errorbar(data.frequency,P_mean,P_std); + ax2.XScale = 'log'; hold on - semilogx(data.frequency,P_mean,f,P) + semilogx(f,P) hold off ylabel('Phase [rad]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); @@ -73,16 +77,16 @@ if theory_only == false %% plot avearage measurement with standard deviation. figure; ax1 = subplot(2,1,1); + errorbar(data.frequency,A_mean_log,A_std_log_neg,A_std_log_pos) ax1.XScale = 'log'; - errorbar(data.frequency,20*log10(A_mean),20*log10(A_std)) ylabel('Magnitude [dB]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); legend('Average Measurement'); grid on title('RC-circuit Bodeplot') ax2 = subplot(2,1,2); - ax2.XScale = 'log'; errorbar(data.frequency,P_mean,P_std); + ax2.XScale = 'log'; ylabel('Phase [rad]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); legend('Average Measurement'); diff --git a/OOequipment/subfiles/RLC_TransferFunction_script.m b/OOequipment/subfiles/RLC_TransferFunction_script.m index 160035c..6f74c60 100644 --- a/OOequipment/subfiles/RLC_TransferFunction_script.m +++ b/OOequipment/subfiles/RLC_TransferFunction_script.m @@ -10,7 +10,7 @@ xlabel('Frequency [Hz]','Fontsize',10); xlim([f_start,f_stop]); legend('Theory','Asymptote'); grid on -title('RLC-circuit Bodeplot Theory') +title('RC-circuit Bodeplot Theory') ax2 = subplot(2,1,2); semilogx(f,P) ylabel('Phase [rad]','Fontsize',10); @@ -23,16 +23,24 @@ linkaxes([ax1,ax2],'x') %% Run the measurements if theory_only == false data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements); +%% Plotting %% Process the data - A_mean = mean(data.magnitude); - P_mean = mean(data.phase); - A_std = std(data.magnitude); - P_std = std(data.phase); + A_mean = mean(data.magnitude,1); + P_mean = mean(data.phase,1); + A_std = zeros(1,data.steps); + P_std = zeros(1,data.steps); + if data.measurements > 1 + A_std = std(data.magnitude,1); + P_std = std(data.phase,1); + end + A_mean_log = 20*log10(A_mean); + A_std_log_neg = A_mean_log - 20*log10(A_mean - A_std); + A_std_log_pos = 20*log10(A_mean + A_std) - A_mean_log; %% plot average measurement, theory and asymptote. figure; ax1 = subplot(2,1,1); - semilogx(data.frequency,20*log10(A_mean),f,A,f,S) + semilogx(data.frequency,A_mean_log,f,A,f,S) ylabel('Magnitude [dB]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); legend('Average Measurement','Theory','Asymptote'); @@ -49,21 +57,21 @@ if theory_only == false %% plot avearage measurement with standard deviation and theory. figure; ax1 = subplot(2,1,1); + errorbar(data.frequency,A_mean_log,A_std_log_neg,A_std_log_pos) ax1.XScale = 'log'; - errorbar(data.frequency,20*log10(A_mean),20*log10(A_std)) hold on semilogx(f,A) hold off ylabel('Magnitude [dB]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); - legend('Average Measurement','Theory','Asymptote'); + legend('Average Measurement','Theory'); grid on title('RLC-circuit Bodeplot') ax2 = subplot(2,1,2); - ax2.XScale = 'log'; errorbar(data.frequency,P_mean,P_std); + ax2.XScale = 'log'; hold on - semilogx(data.frequency,P_mean,f,P) + semilogx(f,P) hold off ylabel('Phase [rad]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); @@ -73,16 +81,16 @@ if theory_only == false %% plot avearage measurement with standard deviation. figure; ax1 = subplot(2,1,1); + errorbar(data.frequency,A_mean_log,A_std_log_neg,A_std_log_pos) ax1.XScale = 'log'; - errorbar(data.frequency,20*log10(A_mean),20*log10(A_std)) ylabel('Magnitude [dB]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); legend('Average Measurement'); grid on title('RLC-circuit Bodeplot') ax2 = subplot(2,1,2); - ax2.XScale = 'log'; errorbar(data.frequency,P_mean,P_std); + ax2.XScale = 'log'; ylabel('Phase [rad]','Fontsize',10); xlabel('Frequency [Hz]','Fontsize',10); legend('Average Measurement'); diff --git a/OOequipment/subfiles/transferFunction.m b/OOequipment/subfiles/transferFunction.m index 131bf52..078c9ef 100644 --- a/OOequipment/subfiles/transferFunction.m +++ b/OOequipment/subfiles/transferFunction.m @@ -8,11 +8,12 @@ function data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,a oscilloscope.enable_channels; oscilloscope.trigger.source = 'CH1'; emptydata = zeros(n_measurements,n_steps); - data = struct('magnitude',emptydata,'phase',emptydata,'frequency',f_array); + data = struct('magnitude',emptydata,'phase',emptydata,'frequency',f_array,'measurements',n_measurements,'steps',n_steps); for j = 1:n_measurements for i = 1:n_steps % fprintf('Measurement %i of %i - Frequency: %.2f Hertz\n',i,n_steps,f_array(i)); functiongenerator.frequency = f_array(i); + oscilloscope.run; oscilloscope.auto; wavedata = oscilloscope.waveform(1:2,'DEF','SAMP'); [data.phase(j,i),data.magnitude(j,i)] = phamag(wavedata.ch1,wavedata.ch2,wavedata.length,f_array(i),wavedata.sampletime);