nass-micro-station-measurem.../static-to-dynamic/matlab/static_ty.m

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