浏览代码

functies uitgebreid voor multiple measurements. Ook veel plot mogelijkheden toegevoegd

publish
Wouter Horlings 8 年前
父节点
当前提交
0399437caf
共有 8 个文件被更改,包括 190 次插入54 次删除
  1. 二进制
      OOequipment/RC_TransferFunction.mlx
  2. 二进制
      OOequipment/RLC_TransferFunction.mlx
  3. +7
    -7
      OOequipment/initializeEquipment.m
  4. +18
    -12
      OOequipment/subfiles/Oscilloscope.m
  5. +80
    -12
      OOequipment/subfiles/RC_TransferFunction_script.m
  6. +74
    -14
      OOequipment/subfiles/RLC_TransferFunction_script.m
  7. +1
    -1
      OOequipment/subfiles/phamag.m
  8. +10
    -8
      OOequipment/subfiles/transferFunction.m

二进制
OOequipment/RC_TransferFunction.mlx 查看文件


二进制
OOequipment/RLC_TransferFunction.mlx 查看文件


+ 7
- 7
OOequipment/initializeEquipment.m 查看文件

@@ -1,9 +1,9 @@
addpath('subfiles');
if ~exist('theory_only','var') || theory_only == false
if ~exist('functiongenerator','var')
functiongenerator = FunctionGenerator('10.0.0.3',1234,10);
end

if ~exist('functiongenerator','var')
functiongenerator = FunctionGenerator('10.0.0.3',1234,10);
end

if ~exist('oscilloscope','var')
oscilloscope = Oscilloscope('10.0.0.2',5025,2);
if ~exist('oscilloscope','var')
oscilloscope = Oscilloscope('10.0.0.2',5025,2);
end
end

+ 18
- 12
OOequipment/subfiles/Oscilloscope.m 查看文件

@@ -72,15 +72,18 @@ classdef Oscilloscope < Equipment
m = str2double(sc.query(['MEAS',num2str(measurement),':RES:ACT?']));
end
function setWaveformSettings(sc,window,format)
if nargin < 3
format = 'REAL';
if nargin < 2
window = 'DEF';
function setWaveformSettings(sc,window,format,type)
if nargin < 4
type = 'HRES';
if nargin < 3
format = 'REAL';
if nargin < 2
window = 'DEF';
end
end
end
sc.clear;
sc.write('CHAN:TYPE HRES');
sc.write(['CHAN:TYPE ',type]);
sc.write(['FORM ',format]);
sc.write('FORM:BORD MSBF');
sc.write(['CHAN:DATA:POIN ',window]);
@@ -96,15 +99,18 @@ classdef Oscilloscope < Equipment
end
function data = waveform(sc,channels,window)
if nargin < 3
window = 'DEF';
if nargin < 2
channels = 1:sc.nchannels;
function data = waveform(sc,channels,window,type)
if nargin < 4
type = 'HRES';
if nargin < 3
window = 'DEF';
if nargin < 2
channels = 1:sc.nchannels;
end
end
end
sc.enable_channels;
sc.setWaveformSettings(window);
sc.setWaveformSettings(window,'REAL',type);
for i = channels
curcha = ['ch',num2str(i)];
wave = sc.(curcha).getWaveform;


+ 80
- 12
OOequipment/subfiles/RC_TransferFunction_script.m 查看文件

@@ -1,20 +1,88 @@
%% Run the measurements
data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,n_steps,amplitude);

%% plot the data
%% Plot theory only
S = asymptote(S_smaller,S_larger,f,Fc);
P = mod(P,pi);

figure;
subplot(2,1,1)
semilogx(data.frequency,data.magnitude,f,A,f,S)
ax1 = subplot(2,1,1);
semilogx(f,A,f,S)
ylabel('Magnitude [dB]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Measurement','Theory','Asymptote');
xlim([f_start,f_stop]);
legend('Theory','Asymptote');
grid on
title('RC-circuit Bodeplot')
subplot(2,1,2);
semilogx(data.frequency,data.phase,f,P)
title('RC-circuit Bodeplot Theory')
ax2 = subplot(2,1,2);
semilogx(f,P)
ylabel('Phase [rad]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Measurement','Theory');
grid on
xlim([f_start,f_stop]);
legend('Theory');
grid on
linkaxes([ax1,ax2],'x')

%% Run the measurements
if theory_only == false
data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements);
%% Process the data
A_mean = mean(data.magnitude);
P_mean = mean(data.phase);
A_std = std(data.magnitude);
P_std = std(data.phase);

%% plot average measurement, theory and asymptote.
figure;
ax1 = subplot(2,1,1);
semilogx(data.frequency,20*log10(A_mean),f,A,f,S)
ylabel('Magnitude [dB]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Average Measurement','Theory','Asymptote');
grid on
title('RC-circuit Bodeplot')
ax2 = subplot(2,1,2);
semilogx(data.frequency,P_mean,f,P)
ylabel('Phase [rad]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Average Measurement','Theory');
grid on

%% plot avearage measurement with standard deviation and theory.
figure;
ax1 = subplot(2,1,1);
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');
grid on
title('RC-circuit Bodeplot')
ax2 = subplot(2,1,2);
ax2.XScale = 'log';
errorbar(data.frequency,P_mean,P_std);
hold on
semilogx(data.frequency,P_mean,f,P)
hold off
ylabel('Phase [rad]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Average Measurement','Theory');
grid on
%% plot avearage measurement with standard deviation.
figure;
ax1 = subplot(2,1,1);
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);
ylabel('Phase [rad]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Average Measurement');
grid on
end

+ 74
- 14
OOequipment/subfiles/RLC_TransferFunction_script.m 查看文件

@@ -1,25 +1,85 @@
%% Run the measurements
data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,n_steps,amplitude);
%% plot the data
%% Plot theory only
S = asymptote(S_smaller,S_larger,f,Fc);
P = mod(P,pi);

figure;
subplot(2,1,1)
semilogx(data.frequency,data.magnitude)
hold on
subplot(2,1,1);
semilogx(f,A,f,S)
hold off
ylabel('Magnitude [dB]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Measurement','Theory','Asymptote');
legend('Theory','Asymptote');
grid on
title('RLC-circuit Bodeplot')
title('RLC-circuit Bodeplot Theory')
subplot(2,1,2);
semilogx(data.frequency,data.phase)
hold on
semilogx(f,P)
hold off
ylabel('Phase [rad]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Measurement','Theory');
grid on
legend('Theory');
grid on

%% Run the measurements
if theory_only == false
data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements);
%% Process the data
A_mean = mean(data.magnitude);
P_mean = mean(data.phase);
A_std = std(data.magnitude);
P_std = std(data.phase);

%% plot average measurement, theory and asymptote.
figure;
subplot(2,1,1);
semilogx(data.frequency,20*log10(A_mean),f,A,f,S)
ylabel('Magnitude [dB]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Average Measurement','Theory','Asymptote');
grid on
title('RLC-circuit Bodeplot')
subplot(2,1,2);
semilogx(data.frequency,P_mean,f,P)
ylabel('Phase [rad]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Average Measurement','Theory');
grid on

%% plot avearage measurement with standard deviation and theory.
figure;
ax = subplot(2,1,1);
ax.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');
grid on
title('RLC-circuit Bodeplot')
ax = subplot(2,1,2);
ax.XScale = 'log';
errorbar(data.frequency,P_mean,P_std);
hold on
semilogx(data.frequency,P_mean,f,P)
hold off
ylabel('Phase [rad]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Average Measurement','Theory');
grid on
%% plot avearage measurement with standard deviation.
figure;
ax = subplot(2,1,1);
ax.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')
ax = subplot(2,1,2);
ax.XScale = 'log';
errorbar(data.frequency,P_mean,P_std);
ylabel('Phase [rad]','Fontsize',10);
xlabel('Frequency [Hz]','Fontsize',10);
legend('Average Measurement');
grid on
end

+ 1
- 1
OOequipment/subfiles/phamag.m 查看文件

@@ -8,6 +8,6 @@ n = 2^nextpow2(length);
X = fft(wave,n,2)/n;
idx = ceil(frequency*n/Fs);
phase = mod(angle(mean(X(2,idx)))-angle(mean(X(1,idx))),pi);
magnitude = 20*log10(abs(X(2,idx))/abs(X(1,idx)));
magnitude = abs(X(2,idx))/abs(X(1,idx));
end


+ 10
- 8
OOequipment/subfiles/transferFunction.m 查看文件

@@ -1,4 +1,4 @@
function data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,n_steps,amplitude)
function data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,amplitude,n_steps,n_measurements)
%TRANSFERFUNCTION Summary of this function goes here
% Detailed explanation goes here

@@ -7,14 +7,16 @@ function data = transferFunction(oscilloscope,functiongenerator,f_start,f_stop,n
functiongenerator.waveform = 'SINUSOID';
oscilloscope.enable_channels;
oscilloscope.trigger.source = 'CH1';
emptydata = zeros(n_steps,1);
emptydata = zeros(n_measurements,n_steps);
data = struct('magnitude',emptydata,'phase',emptydata,'frequency',f_array);
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.auto;
wavedata = oscilloscope.waveform(1:2);
[data.phase(i),data.magnitude(i)] = phamag(wavedata.ch1,wavedata.ch2,wavedata.length,f_array(i),wavedata.sampletime);
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.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);
end
end
%bodePlot(data.magnitude,data.phase,data.frequency)
end


正在加载...
取消
保存