97 lines
2.3 KiB
Matlab
97 lines
2.3 KiB
Matlab
%% Clear Workspace and Close figures
|
|
clear; close all; clc;
|
|
|
|
%% Intialize Laplace variable
|
|
s = zpk('s');
|
|
|
|
% Data - Plot
|
|
|
|
% First, we plot the straightness error as a function of the position (figure [[fig:raw_data_tyz]]).
|
|
|
|
|
|
figure;
|
|
hold on;
|
|
for i=1:data(end, 1)
|
|
plot(data(data(:, 1) == i, 3), data(data(:, 1) == i, 4), '-k');
|
|
end
|
|
hold off;
|
|
xlabel('Target Value [mm]'); ylabel('Error Value [$\mu m$]');
|
|
|
|
|
|
|
|
% #+NAME: fig:raw_data_tyz
|
|
% #+CAPTION: Time domain Data
|
|
% #+RESULTS: fig:raw_data_tyz
|
|
% [[file:figs/raw_data_tyz.png]]
|
|
|
|
% Then, we compute mean value of each position, and we remove this mean value from the data.
|
|
% The results are shown on figure [[fig:processed_data_tyz]].
|
|
|
|
mean_pos = zeros(sum(data(:, 1)==1), 1);
|
|
for i=1:sum(data(:, 1)==1)
|
|
mean_pos(i) = mean(data(data(:, 2)==i, 4));
|
|
end
|
|
|
|
figure;
|
|
hold on;
|
|
for i=1:data(end, 1)
|
|
filt = data(:, 1) == i;
|
|
plot(data(filt, 3), data(filt, 4) - mean_pos, '-k');
|
|
end
|
|
hold off;
|
|
xlabel('Target Value [mm]'); ylabel('Error Value [$\mu m$]');
|
|
|
|
% Translate to time domain
|
|
% We here make the assumptions that, during a scan with the translation stage, the Z motion of the translation stage will follow the guiding error measured.
|
|
|
|
% We then create a time vector $t$ from 0 to 1 second that corresponds to a typical scan, and we plot the guiding error as a function of the time on figure [[fig:time_domain_tyz]].
|
|
|
|
|
|
t = linspace(0, 1, length(data(data(:, 1)==1, 4)));
|
|
|
|
figure;
|
|
hold on;
|
|
plot(t, data(data(:, 1) == 1, 4) - mean_pos, '-k');
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Error Value [um]');
|
|
|
|
% Compute the PSD
|
|
|
|
% We first compute some parameters that will be used for the PSD computation.
|
|
|
|
dt = t(2)-t(1);
|
|
|
|
Fs = 1/dt; % [Hz]
|
|
|
|
win = hanning(ceil(1*Fs));
|
|
|
|
|
|
|
|
% We remove the mean position from the data.
|
|
|
|
x = data(data(:, 1) == 1, 4) - mean_pos;
|
|
|
|
|
|
|
|
% And finally, we compute the power spectral density of the displacement obtained in the time domain.
|
|
|
|
% The result is shown on figure [[fig:psd_tyz]].
|
|
|
|
[pxx, f] = pwelch(x, win, [], [], Fs);
|
|
|
|
pxx_t = zeros(length(pxx), data(end, 1));
|
|
|
|
for i=1:data(end, 1)
|
|
x = data(data(:, 1) == i, 4) - mean_pos;
|
|
[pxx, f] = pwelch(x, win, [], [], Fs);
|
|
pxx_t(:, i) = pxx;
|
|
end
|
|
|
|
figure;
|
|
hold on;
|
|
plot(f, sqrt(mean(pxx_t, 2)), 'k-');
|
|
hold off;
|
|
xlabel('Frequency (Hz)');
|
|
ylabel('Amplitude Spectral Density $\left[\frac{m}{\sqrt{Hz}}\right]$');
|
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|