Wouter Horlings pirms 8 gadiem
vecāks
revīzija
94f9b26577
5 mainītis faili ar 33 papildinājumiem un 20 dzēšanām
  1. Binārs
      OOequipment/RC_TransferFunction.mlx
  2. Binārs
      OOequipment/RLC_TransferFunction.mlx
  3. +11
    -7
      OOequipment/subfiles/RC_TransferFunction_script.m
  4. +20
    -12
      OOequipment/subfiles/RLC_TransferFunction_script.m
  5. +2
    -1
      OOequipment/subfiles/transferFunction.m

Binārs
OOequipment/RC_TransferFunction.mlx Parādīt failu


Binārs
OOequipment/RLC_TransferFunction.mlx Parādīt failu


+ 11
- 7
OOequipment/subfiles/RC_TransferFunction_script.m Parādīt failu

@@ -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');


+ 20
- 12
OOequipment/subfiles/RLC_TransferFunction_script.m Parādīt failu

@@ -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');


+ 2
- 1
OOequipment/subfiles/transferFunction.m Parādīt failu

@@ -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);


Notiek ielāde…
Atcelt
Saglabāt