219 lines
6.5 KiB
Matlab
219 lines
6.5 KiB
Matlab
%%
|
|
clear; close all; clc;
|
|
|
|
%%
|
|
exp_ol = load('./data/exp_open_loop.mat', 'Dmeas');
|
|
exp_cl = load('./data/exp_close_loop_xyz.mat', 'Dmeas');
|
|
exp_without_nass = load('./data/exp_whitout_nass.mat', 'Dmeas');
|
|
load('./mat/sim_conf.mat', 'sim_conf');
|
|
|
|
exp_without_nass.Dmeas.Data(:, 3) = exp_without_nass.Dmeas.Data(:, 3) - exp_without_nass.Dmeas.Data(end, 3);
|
|
|
|
Fs = ceil((length(exp_without_nass.Dmeas.Time(:))-1)/exp_without_nass.Dmeas.Time(end));
|
|
|
|
%%
|
|
N = length(exp_without_nass.Dmeas.Data(:, 1));
|
|
figure;
|
|
hold on;
|
|
% plot(exp_without_nass.Dmeas.Data(end-6300:end, 1),exp_without_nass.Dmeas.Data(end-6300:end, 2))
|
|
plot(exp_without_nass.Dmeas.Data(N-6600:N-6200, 1),exp_without_nass.Dmeas.Data(N-6600:N-6200, 2))
|
|
plot(exp_cl.Dmeas.Data(6:end, 1),exp_cl.Dmeas.Data(6:end, 2))
|
|
xlim([-1e-6, 1e-6]);
|
|
ylim([-1e-6, 1e-6]);
|
|
hold off;
|
|
xlabel('Displacement - $x$ [m]'); ylabel('Displacement - $y$ [m]');
|
|
|
|
|
|
%% With and without NASS
|
|
steady_i = ceil(length(exp_ol.Dmeas.Time)/2);
|
|
steady_i = 6;
|
|
|
|
figure;
|
|
hold on;
|
|
plot(exp_without_nass.Dmeas.Data(steady_i:end, 1),exp_without_nass.Dmeas.Data(steady_i:end, 2))
|
|
plot(exp_cl.Dmeas.Data(steady_i:end, 1),exp_cl.Dmeas.Data(steady_i:end, 2))
|
|
xlim([-1e-6, 1e-6]);
|
|
ylim([-1e-6, 1e-6]);
|
|
hold off;
|
|
xlabel('Displacement - $x$ [m]'); ylabel('Displacement - $y$ [m]');
|
|
|
|
exportFig('exp_w_wo_nass_xy', 'half-short')
|
|
|
|
%% Video of the simulation
|
|
close all;
|
|
|
|
figure(1);
|
|
hold on;
|
|
grid;
|
|
xlim([-1e-6, 1e-6]);
|
|
ylim([-1e-6, 1e-6]);
|
|
xlabel('Displacement - $x$ [m]'); ylabel('Displacement - $y$ [m]');
|
|
|
|
% Set up the movie.
|
|
writerObj = VideoWriter('open_loop.avi'); % Name it.
|
|
writerObj.FrameRate = 30; % How many frames per second.
|
|
open(writerObj);
|
|
|
|
% Open Loop
|
|
N = length(exp_without_nass.Dmeas.Data(:, 1))-6300;
|
|
step_i = ceil(Fs/writerObj.FrameRate);
|
|
for i=1:step_i:N
|
|
% We just use pause but pretend you have some really complicated thing here...
|
|
pause(0.01);
|
|
figure(1);
|
|
plot(exp_without_nass.Dmeas.Data(i:min(i+step_i, N), 1),exp_without_nass.Dmeas.Data(i:min(i+step_i, N), 2), 'color', [0 0.4470 0.7410])
|
|
frame = getframe(gcf); % 'gcf' can handle if you zoom in to take a movie.
|
|
writeVideo(writerObj, frame);
|
|
end
|
|
|
|
% Close Loop
|
|
N = length(exp_cl.Dmeas.Data(:, 1));
|
|
step_i = ceil(Fs/writerObj.FrameRate);
|
|
first_i = 6;
|
|
for i=first_i:step_i:N
|
|
% We just use pause but pretend you have some really complicated thing here...
|
|
pause(0.01);
|
|
figure(1);
|
|
plot(exp_cl.Dmeas.Data(i:min(i+step_i, N), 1),exp_cl.Dmeas.Data(i:min(i+step_i, N), 2), 'color', [0.8500 0.3250 0.0980])
|
|
frame = getframe(gcf); % 'gcf' can handle if you zoom in to take a movie.
|
|
writeVideo(writerObj, frame);
|
|
end
|
|
|
|
hold off
|
|
close(writerObj); % Saves the movie.
|
|
|
|
|
|
%% Video of the simulation
|
|
close all;
|
|
|
|
figure(1);
|
|
hold on;
|
|
xlim([-40, 40]);
|
|
ylim([-40, 40]);
|
|
yticks([-40 -20 0 20 40])
|
|
xticks([-40 -20 0 20 40])
|
|
grid on;
|
|
xlabel('Displacement - $x$ [nm]'); ylabel('Displacement - $y$ [nm]');
|
|
|
|
set(gcf, 'pos', [20 20 300 300]);
|
|
|
|
% Set up the movie.
|
|
writerObj = VideoWriter('close_loop_zoom.avi'); % Name it.
|
|
writerObj.FrameRate = 30; % How many frames per second.
|
|
open(writerObj);
|
|
|
|
% Open Loop
|
|
N = length(exp_without_nass.Dmeas.Data(:, 1))-6300;
|
|
step_i = ceil(Fs/writerObj.FrameRate);
|
|
for i=1:step_i:N
|
|
% We just use pause but pretend you have some really complicated thing here...
|
|
pause(0.01);
|
|
figure(1);
|
|
plot(1e9*exp_without_nass.Dmeas.Data(i:min(i+step_i, N), 1),1e9*exp_without_nass.Dmeas.Data(i:min(i+step_i, N), 2), 'color', [0 0.4470 0.7410])
|
|
frame = getframe(gcf); % 'gcf' can handle if you zoom in to take a movie.
|
|
writeVideo(writerObj, frame);
|
|
end
|
|
|
|
% Close Loop
|
|
N = length(exp_cl.Dmeas.Data(:, 1));
|
|
step_i = ceil(Fs/writerObj.FrameRate);
|
|
first_i = 6;
|
|
for i=first_i:step_i:N
|
|
% We just use pause but pretend you have some really complicated thing here...
|
|
pause(0.01);
|
|
figure(1);
|
|
plot(1e9*exp_cl.Dmeas.Data(i:min(i+step_i, N), 1),1e9*exp_cl.Dmeas.Data(i:min(i+step_i, N), 2), 'color', [0.8500 0.3250 0.0980])
|
|
frame = getframe(gcf); % 'gcf' can handle if you zoom in to take a movie.
|
|
writeVideo(writerObj, frame);
|
|
end
|
|
|
|
hold off
|
|
close(writerObj); % Saves the movie.
|
|
|
|
|
|
%%
|
|
figure;
|
|
hold on;
|
|
plot(exp_without_nass.Dmeas.Time(steady_i:end), exp_without_nass.Dmeas.Data(steady_i:end, 2));
|
|
plot(exp_without_nass.Dmeas.Time(steady_i:end), exp_cl.Dmeas.Data(steady_i:end, 2));
|
|
legend({'$y$ - without NASS', '$y$ - with NASS'})
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Displacement [m]');
|
|
|
|
exportFig('exp_w_wo_nass_y', 'half-small')
|
|
|
|
|
|
|
|
%% Compare OL and CL - Time
|
|
figure;
|
|
hold on;
|
|
plot(exp_ol.Dmeas.Time, exp_ol.Dmeas.Data(:, 1));
|
|
plot(exp_cl.Dmeas.Time, exp_cl.Dmeas.Data(:, 1));
|
|
legend({'x - OL', 'x - CL'})
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Displacement [m]');
|
|
|
|
exportFig('exp_control_time_x', 'normal-normal')
|
|
|
|
|
|
figure;
|
|
hold on;
|
|
plot(exp_ol.Dmeas.Time, exp_ol.Dmeas.Data(:, 2));
|
|
plot(exp_cl.Dmeas.Time, exp_cl.Dmeas.Data(:, 2));
|
|
legend({'y - OL', 'y - CL'})
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Displacement [m]');
|
|
|
|
exportFig('exp_control_time_y', 'normal-normal')
|
|
|
|
|
|
figure;
|
|
hold on;
|
|
plot(exp_ol.Dmeas.Time, exp_ol.Dmeas.Data(:, 3));
|
|
plot(exp_cl.Dmeas.Time, exp_cl.Dmeas.Data(:, 3));
|
|
legend({'z - OL', 'z - CL'})
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Displacement [m]');
|
|
|
|
exportFig('exp_control_time_z', 'normal-normal')
|
|
|
|
%%
|
|
steady_i = ceil(length(exp_ol.Dmeas.Time)/2);
|
|
% steady_i = 1;
|
|
|
|
figure;
|
|
hold on;
|
|
plot(exp_ol.Dmeas.Data(steady_i:end, 1),exp_ol.Dmeas.Data(steady_i:end, 2))
|
|
plot(exp_cl.Dmeas.Data(steady_i:end, 1),exp_cl.Dmeas.Data(steady_i:end, 2))
|
|
legend({'OL', 'CL'})
|
|
hold off;
|
|
xlabel('Displacement - $x$ [s]'); ylabel('Displacement - $y$ [m]');
|
|
|
|
|
|
figure;
|
|
hold on;
|
|
plot3(exp_ol.Dmeas.Data(steady_i:end, 1),exp_ol.Dmeas.Data(steady_i:end, 2),exp_ol.Dmeas.Data(steady_i:end, 3))
|
|
plot3(exp_cl.Dmeas.Data(steady_i:end, 1),exp_cl.Dmeas.Data(steady_i:end, 2),exp_cl.Dmeas.Data(steady_i:end, 3))
|
|
legend({'OL', 'CL'})
|
|
hold off;
|
|
xlabel('Displacement - $x$ [s]'); ylabel('Displacement - $y$ [m]'); zlabel('Displacement - $z$ [m]');
|
|
|
|
|
|
%% Compare OL and CL - PSD
|
|
han_windows_ol = hanning(ceil(length(exp_ol.Dmeas.Time(steady_i:end))/2));
|
|
[psd_x_ol, freqs_x_ol] = pwelch(exp_ol.Dmeas.Data(steady_i:end, 1), han_windows_ol, 0, [], 1/sim_conf.Ts);
|
|
|
|
han_windows_cl = hanning(ceil(length(exp_cl.Dmeas.Time(steady_i:end))/2));
|
|
[psd_x, freqs_x] = pwelch(exp_cl.Dmeas.Data(steady_i:end, 1), han_windows_cl, 0, [], 1/sim_conf.Ts);
|
|
|
|
figure;
|
|
hold on;
|
|
plot(freqs_x_ol, sqrt(psd_x_ol));
|
|
plot(freqs_x, sqrt(psd_x));
|
|
set(gca,'xscale','log'); set(gca,'yscale','log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/\sqrt{Hz}$]');
|
|
legend({'x - OL', 'x - CL'})
|
|
hold off;
|
|
|
|
exportFig('exp_psd_x', 'normal-normal')
|