From 7a174b630f3f841a5541eb88c0df456c1d1c325a Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Tue, 10 Nov 2020 12:51:54 +0100 Subject: [PATCH] Move to matlab folder / tangle / list of sections --- index.html | 181 ++++++++++-------- index.org | 56 +++++- matlab/analyse_data.m | 7 - matlab/attocube_asd_noise.m | 152 +++++++++++++++ matlab/attocube_non_linearity.m | 131 +++++++++++++ matlab/effect_air_protection.m | 73 +++++++ {mat => matlab/mat}/int_enc_comp.mat | Bin {mat => matlab/mat}/long_test_plastic.mat | Bin {mat => matlab/mat}/short_test_alu_tube.mat | Bin {mat => matlab/mat}/short_test_plastic.mat | Bin .../mat}/short_test_without_material.mat | Bin matlab/test_attocube.slx.r2018a | Bin 44399 -> 0 bytes 12 files changed, 503 insertions(+), 97 deletions(-) delete mode 100644 matlab/analyse_data.m create mode 100644 matlab/attocube_asd_noise.m create mode 100644 matlab/attocube_non_linearity.m create mode 100644 matlab/effect_air_protection.m rename {mat => matlab/mat}/int_enc_comp.mat (100%) rename {mat => matlab/mat}/long_test_plastic.mat (100%) rename {mat => matlab/mat}/short_test_alu_tube.mat (100%) rename {mat => matlab/mat}/short_test_plastic.mat (100%) rename {mat => matlab/mat}/short_test_without_material.mat (100%) delete mode 100644 matlab/test_attocube.slx.r2018a diff --git a/index.html b/index.html index 66558ea..13bd718 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Attocube - Test Bench @@ -34,73 +34,84 @@

Table of Contents

-
-

1 Estimation of the Spectral Density of the Attocube Noise

+

+In this document, few caracteristics of the Attocube Displacement Measuring Interferometer IDS3010 (link) are studied: +

+ + +
+

1 Estimation of the Spectral Density of the Attocube Noise

+

+ +

-
+

test-bench-schematic.png

Figure 1: Test Bench Schematic

-
+

IMG-7865.JPG

Figure 2: Picture of the test bench. The Attocube and mirror are covered by a “bubble sheet”

- -
-

1.1 Long and Slow measurement

+
+

1.1 Long and Slow measurement

The first measurement was made during ~17 hours with a sampling time of \(T_s = 0.1\,s\).

-
load('./mat/long_test_plastic.mat', 'x', 't')
+
load('long_test_plastic.mat', 'x', 't')
 Ts = 0.1; % [s]
 
-
+

long_meas_time_domain_full.png

Figure 3: Long measurement time domain data

-Let’s fit the data with a step response to a first order low pass filter (Figure 4). +Let’s fit the data with a step response to a first order low pass filter (Figure 4).

@@ -124,17 +135,17 @@ The corresponding time constant is (in [h]): -
+

long_meas_time_domain_fit.png

Figure 4: Fit of the measurement data with a step response of a first order low pass filter

-We can see in Figure 3 that there is a transient period where the measured displacement experiences some drifts. +We can see in Figure 3 that there is a transient period where the measured displacement experiences some drifts. This is probably due to thermal effects. We only select the data between t1 and t2. -The obtained displacement is shown in Figure 5. +The obtained displacement is shown in Figure 5.

@@ -148,7 +159,7 @@ t = t - t(1);
-
+

long_meas_time_domain_zoom.png

Figure 5: Kept data (removed slow drifts during the first hours)

@@ -183,8 +194,8 @@ f_1 = f_1(f_1 < 2);
-
-

1.2 Short and Fast measurement

+
+

1.2 Short and Fast measurement

An second measurement is done in order to estimate the high frequency noise of the interferometer. @@ -192,7 +203,7 @@ The measurement is done with a sampling time of \(T_s = 0.1\,ms\) and a duration

-
load('./mat/short_test_plastic.mat')
+
load('short_test_plastic.mat')
 Ts = 1e-4; % [s]
 
@@ -203,11 +214,11 @@ Ts = 1e-4; % [s]

-The time domain measurement is shown in Figure 6. +The time domain measurement is shown in Figure 6.

-
+

short_meas_time_domain.png

Figure 6: Time domain measurement with the high sampling rate

@@ -224,15 +235,15 @@ The Power Spectral Density of the measured displacement is computed
-
-

1.3 Obtained Amplitude Spectral Density of the measured displacement

+
+

1.3 Obtained Amplitude Spectral Density of the measured displacement

-The computed ASD of the two measurements are combined in Figure 7. +The computed ASD of the two measurements are combined in Figure 7.

-
+

psd_combined.png

Figure 7: Obtained Amplitude Spectral Density of the measured displacement

@@ -241,22 +252,24 @@ The computed ASD of the two measurements are combined in Figure -

2 Effect of the “bubble sheet” and “Aluminium tube”

+
+

2 Effect of the “bubble sheet” and “Aluminium tube”

+

+ +

-
+

IMG-7864.JPG

Figure 8: Aluminium tube used to protect the beam path from disturbances

- -
-

2.1 Aluminium Tube and Bubble Sheet

+
+

2.1 Aluminium Tube and Bubble Sheet

-
load('./mat/short_test_plastic.mat');
+
load('short_test_plastic.mat');
 Ts = 1e-4; % [s]
 
@@ -274,11 +287,11 @@ Ts = 1e-4; % [s]
-
-

2.2 Only Aluminium Tube

+
+

2.2 Only Aluminium Tube

-
load('./mat/short_test_alu_tube.mat');
+
load('short_test_alu_tube.mat');
 Ts = 1e-4; % [s]
 
@@ -289,7 +302,7 @@ Ts = 1e-4; % [s]

-The time domain measurement is shown in Figure 6. +The time domain measurement is shown in Figure 6.

win = hann(ceil(length(x)/10));
@@ -299,11 +312,11 @@ The time domain measurement is shown in Figure 6.
 
-
-

2.3 Nothing

+
+

2.3 Nothing

-
load('./mat/short_test_without_material.mat');
+
load('short_test_without_material.mat');
 Ts = 1e-4; % [s]
 
@@ -314,7 +327,7 @@ Ts = 1e-4; % [s]

-The time domain measurement is shown in Figure 6. +The time domain measurement is shown in Figure 6.

win = hann(ceil(length(x)/10));
@@ -324,11 +337,11 @@ The time domain measurement is shown in Figure 6.
 
-
-

2.4 Comparison

+
+

2.4 Comparison

-
+

asd_noise_comp_bubble_aluminium.png

Figure 9: Comparison of the noise ASD with and without bubble sheet

@@ -337,14 +350,17 @@ The time domain measurement is shown in Figure 6.
-
-

3 Measurement of the Attocube’s non-linearity

+
+

3 Measurement of the Attocube’s non-linearity

-The measurement setup is shown in Figure 10. + +

+

+The measurement setup is shown in Figure 10.

-
+

Here are the equipment used in the test bench:

@@ -359,7 +375,7 @@ Here are the equipment used in the test bench:
-
+

exp_setup_schematic.png

Figure 10: Schematic of the Experiment

@@ -374,16 +390,15 @@ The encoder and the attocube are measure ring the same motion. As will be shown shortly, this measurement permitted to measure the period non-linearity of the Attocube.

- -
-

3.1 Load Data

+
+

3.1 Load Data

The measurement data are loaded and the offset are removed using the detrend command.

-
load('mat/int_enc_comp.mat', 'interferometer', 'encoder', 'u', 't');
+
load('int_enc_comp.mat', 'interferometer', 'encoder', 'u', 't');
 Ts = 1e-4; % Sampling Time [s]
 
@@ -397,11 +412,11 @@ u = detrend(u, 0);
-
-

3.2 Time Domain Results

+
+

3.2 Time Domain Results

-One period of the displacement of the mass as measured by the encoder and interferometer are shown in Figure 11. +One period of the displacement of the mass as measured by the encoder and interferometer are shown in Figure 11. It consist of the sinusoidal motion at 0.5Hz with an amplitude of approximately \(70\mu m\).

@@ -411,18 +426,18 @@ This should improve the coherence between the measurements made by the encoder a

-
+

int_enc_one_cycle.png

Figure 11: One cycle measurement

-The difference between the two measurements during the same period is shown in Figure 12. +The difference between the two measurements during the same period is shown in Figure 12.

-
+

int_enc_one_cycle_error.png

Figure 12: Difference between the Encoder and the interferometer during one cycle

@@ -430,8 +445,8 @@ The difference between the two measurements during the same period is shown in F
-
-

3.3 Difference between Encoder and Interferometer as a function of time

+
+

3.3 Difference between Encoder and Interferometer as a function of time

The data is filtered using a second order low pass filter with a cut-off frequency \(\omega_0\) as defined below. @@ -446,7 +461,7 @@ G_lpf = 1/(1 + 2

-After filtering, the data is “re-shaped” such that we can superimpose all the measured periods as shown in Figure 13. +After filtering, the data is “re-shaped” such that we can superimpose all the measured periods as shown in Figure 13. This gives an idea of the measurement error as given by the Attocube during a \(70 \mu m\) motion.

@@ -456,7 +471,7 @@ d_err_mean = d_err_mean - mean(d_err_mean);
-
+

int_enc_error_mean_time.png

Figure 13: Difference between the two measurement in the time domain, averaged for all the cycles

@@ -464,17 +479,17 @@ d_err_mean = d_err_mean - mean(d_err_mean);
-
-

3.4 Difference between Encoder and Interferometer as a function of position

+
+

3.4 Difference between Encoder and Interferometer as a function of position

-Figure 13 gives the measurement error as a function of time. +Figure 13 gives the measurement error as a function of time. We here wish the compute this measurement error as a function of the position (as measured by the encoer).

To do so, all the attocube measurements corresponding to each position measured by the Encoder (resolution of \(1nm\)) are averaged. -Figure 14 is obtained where we clearly see an error with a period comparable to the motion range and a much smaller period corresponding to the non-linear period errors that we wish the estimate. +Figure 14 is obtained where we clearly see an error with a period comparable to the motion range and a much smaller period corresponding to the non-linear period errors that we wish the estimate.

[e_sorted, ~, e_ind] = unique(encoder);
@@ -489,7 +504,7 @@ i_mean_error = (i_mean - e_sorted);
 
-
+

int_enc_error_mean_position.png

Figure 14: Difference between the two measurement as a function of the measured position by the encoder, averaged for all the cycles

@@ -511,11 +526,11 @@ e_sorted_mean_over_period = mean(reshape(i_mean_error(i_init15. +The obtained periodic non-linearity is shown in Figure 15.

-
+

int_non_linearity_period_wavelength.png

Figure 15: Non-Linearity of the Interferometer over the period of the wavelength

@@ -526,7 +541,7 @@ The obtained periodic non-linearity is shown in Figure 15<

Author: Dehaeze Thomas

-

Created: 2020-11-10 mar. 10:21

+

Created: 2020-11-10 mar. 12:50

diff --git a/index.org b/index.org index 0a1df84..ebff8b8 100644 --- a/index.org +++ b/index.org @@ -15,7 +15,6 @@ #+HTML_HEAD: #+PROPERTY: header-args:matlab :session *MATLAB* -#+PROPERTY: header-args:matlab+ :tangle no #+PROPERTY: header-args:matlab+ :comments org #+PROPERTY: header-args:matlab+ :exports both #+PROPERTY: header-args:matlab+ :results none @@ -25,7 +24,18 @@ #+PROPERTY: header-args:matlab+ :output-dir figs :END: +* Introduction :ignore: + +In this document, few caracteristics of the Attocube Displacement Measuring Interferometer IDS3010 ([[https://www.attocube.com/en/products/laser-displacement-sensor/displacement-measuring-interferometer][link]]) are studied: +- Section [[sec:attocube_asd_noise]]: the ASD noise of the measured displacement is estimated +- Section [[sec:effect_air_protection]]: the effect of two air protections on the stability of the measurement is studied +- Section [[sec:attocube_non_linearity]]: the cyclic non-linearity of the attocube is estimated using a encoder + * Estimation of the Spectral Density of the Attocube Noise +:PROPERTIES: +:header-args:matlab+: :tangle matlab/attocube_asd_noise.m +:END: +<> ** Introduction :ignore: #+name: fig:test-bench-schematic @@ -46,11 +56,19 @@ <> #+end_src +#+begin_src matlab :tangle no + addpath('./matlab/mat/'); +#+end_src + +#+begin_src matlab :eval no + addpath('./mat/'); +#+end_src + ** Long and Slow measurement The first measurement was made during ~17 hours with a sampling time of $T_s = 0.1\,s$. #+begin_src matlab - load('./mat/long_test_plastic.mat', 'x', 't') + load('long_test_plastic.mat', 'x', 't') Ts = 0.1; % [s] #+end_src @@ -162,7 +180,7 @@ An second measurement is done in order to estimate the high frequency noise of t The measurement is done with a sampling time of $T_s = 0.1\,ms$ and a duration of ~100s. #+begin_src matlab - load('./mat/short_test_plastic.mat') + load('short_test_plastic.mat') Ts = 1e-4; % [s] #+end_src @@ -217,6 +235,10 @@ The computed ASD of the two measurements are combined in Figure [[fig:psd_combin [[file:figs/psd_combined.png]] * Effect of the "bubble sheet" and "Aluminium tube" +:PROPERTIES: +:header-args:matlab+: :tangle matlab/effect_air_protection.m +:END: +<> ** Introduction :ignore: #+name: fig:picture-test-bench-aluminium-tube @@ -233,9 +255,17 @@ The computed ASD of the two measurements are combined in Figure [[fig:psd_combin <> #+end_src +#+begin_src matlab :tangle no + addpath('./matlab/mat/'); +#+end_src + +#+begin_src matlab :eval no + addpath('./mat/'); +#+end_src + ** Aluminium Tube and Bubble Sheet #+begin_src matlab - load('./mat/short_test_plastic.mat'); + load('short_test_plastic.mat'); Ts = 1e-4; % [s] #+end_src @@ -256,7 +286,7 @@ The computed ASD of the two measurements are combined in Figure [[fig:psd_combin ** Only Aluminium Tube #+begin_src matlab - load('./mat/short_test_alu_tube.mat'); + load('short_test_alu_tube.mat'); Ts = 1e-4; % [s] #+end_src @@ -278,7 +308,7 @@ The time domain measurement is shown in Figure [[fig:short_meas_time_domain]]. ** Nothing #+begin_src matlab - load('./mat/short_test_without_material.mat'); + load('short_test_without_material.mat'); Ts = 1e-4; % [s] #+end_src @@ -325,6 +355,10 @@ The time domain measurement is shown in Figure [[fig:short_meas_time_domain]]. [[file:figs/asd_noise_comp_bubble_aluminium.png]] * Measurement of the Attocube's non-linearity +:PROPERTIES: +:header-args:matlab+: :tangle matlab/attocube_non_linearity.m +:END: +<> ** Introduction :ignore: The measurement setup is shown in Figure [[fig:exp_setup_schematic]]. @@ -355,11 +389,19 @@ As will be shown shortly, this measurement permitted to measure the period non-l <> #+end_src +#+begin_src matlab :tangle no + addpath('./matlab/mat/'); +#+end_src + +#+begin_src matlab :eval no + addpath('./mat/'); +#+end_src + ** Load Data The measurement data are loaded and the offset are removed using the =detrend= command. #+begin_src matlab - load('mat/int_enc_comp.mat', 'interferometer', 'encoder', 'u', 't'); + load('int_enc_comp.mat', 'interferometer', 'encoder', 'u', 't'); Ts = 1e-4; % Sampling Time [s] #+end_src diff --git a/matlab/analyse_data.m b/matlab/analyse_data.m deleted file mode 100644 index 0a0e838..0000000 --- a/matlab/analyse_data.m +++ /dev/null @@ -1,7 +0,0 @@ -load('./mat/test.mat', 't', 'x'); - -figure; plot(t, x) - -load('./mat/long_test.mat', 't', 'x'); - -figure; plot(t/60/60, 1e9*x) \ No newline at end of file diff --git a/matlab/attocube_asd_noise.m b/matlab/attocube_asd_noise.m new file mode 100644 index 0000000..0e4cbbd --- /dev/null +++ b/matlab/attocube_asd_noise.m @@ -0,0 +1,152 @@ +%% Clear Workspace and Close figures +clear; close all; clc; + +%% Intialize Laplace variable +s = zpk('s'); + +addpath('./mat/'); + +% Long and Slow measurement +% The first measurement was made during ~17 hours with a sampling time of $T_s = 0.1\,s$. + + +load('long_test_plastic.mat', 'x', 't') +Ts = 0.1; % [s] + +figure; +plot(t/60/60, 1e9*x) +xlim([0, 17.5]); +xlabel('Time [h]'); ylabel('Displacement [nm]'); + + + +% #+name: fig:long_meas_time_domain_full +% #+caption: Long measurement time domain data +% #+RESULTS: +% [[file:figs/long_meas_time_domain_full.png]] + +% Let's fit the data with a step response to a first order low pass filter (Figure [[fig:long_meas_time_domain_fit]]). + + +f = @(b,x) b(1)*(1 - exp(-x/b(2))); + +y_cur = x(t < 17.5*60*60); +t_cur = t(t < 17.5*60*60); + +nrmrsd = @(b) norm(y_cur - f(b,t_cur)); % Residual Norm Cost Function +B0 = [400e-9, 2*60*60]; % Choose Appropriate Initial Estimates +[B,rnrm] = fminsearch(nrmrsd, B0); % Estimate Parameters ‘B’ + + + +% The corresponding time constant is (in [h]): + +B(2)/60/60 + + + +% #+RESULTS: +% : 2.0658 + + +figure; +hold on; +plot(t_cur/60/60, 1e9*y_cur); +plot(t_cur/60/60, 1e9*f(B, t_cur)); +hold off; +xlim([0, 17.5]) +xlabel('Time [h]'); ylabel('Displacement [nm]'); + + + +% #+name: fig:long_meas_time_domain_fit +% #+caption: Fit of the measurement data with a step response of a first order low pass filter +% #+RESULTS: +% [[file:figs/long_meas_time_domain_fit.png]] + +% We can see in Figure [[fig:long_meas_time_domain_full]] that there is a transient period where the measured displacement experiences some drifts. +% This is probably due to thermal effects. +% We only select the data between =t1= and =t2=. +% The obtained displacement is shown in Figure [[fig:long_meas_time_domain_zoom]]. + + +t1 = 10.5; t2 = 17.5; % [h] + +x = x(t > t1*60*60 & t < t2*60*60); +x = x - mean(x); +t = t(t > t1*60*60 & t < t2*60*60); +t = t - t(1); + +figure; +plot(t/60/60, 1e9*x); +xlabel('Time [h]'); ylabel('Measured Displacement [nm]') + + + +% #+name: fig:long_meas_time_domain_zoom +% #+caption: Kept data (removed slow drifts during the first hours) +% #+RESULTS: +% [[file:figs/long_meas_time_domain_zoom.png]] + +% The Power Spectral Density of the measured displacement is computed + +win = hann(ceil(length(x)/20)); +[p_1, f_1] = pwelch(x, win, [], [], 1/Ts); + + + +% As a low pass filter was used in the measurement process, we multiply the PSD by the square of the inverse of the filter's norm. + +G_lpf = 1/(1 + s/2/pi); +p_1 = p_1./abs(squeeze(freqresp(G_lpf, f_1, 'Hz'))).^2; + + + +% Only frequencies below 2Hz are taken into account (high frequency noise will be measured afterwards). + +p_1 = p_1(f_1 < 2); +f_1 = f_1(f_1 < 2); + +% Short and Fast measurement +% An second measurement is done in order to estimate the high frequency noise of the interferometer. +% The measurement is done with a sampling time of $T_s = 0.1\,ms$ and a duration of ~100s. + + +load('short_test_plastic.mat') +Ts = 1e-4; % [s] + +x = detrend(x, 0); + + + +% The time domain measurement is shown in Figure [[fig:short_meas_time_domain]]. + + +figure; +plot(t, 1e9*x) +xlabel('Time [s]'); ylabel('Displacement [nm]'); + + + +% #+name: fig:short_meas_time_domain +% #+caption: Time domain measurement with the high sampling rate +% #+RESULTS: +% [[file:figs/short_meas_time_domain.png]] + +% The Power Spectral Density of the measured displacement is computed + +win = hann(ceil(length(x)/20)); +[p_2, f_2] = pwelch(x, win, [], [], 1/Ts); + +% Obtained Amplitude Spectral Density of the measured displacement + +% The computed ASD of the two measurements are combined in Figure [[fig:psd_combined]]. + + +figure; +hold on; +plot(f_1(8:end), sqrt(p_1(8:end)), 'k-'); +plot(f_2(8:end), sqrt(p_2(8:end)), 'k-'); +hold off; +set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log'); +ylabel('ASD [$m/\sqrt{Hz}$]'); xlabel('Frequency [Hz]'); diff --git a/matlab/attocube_non_linearity.m b/matlab/attocube_non_linearity.m new file mode 100644 index 0000000..7943149 --- /dev/null +++ b/matlab/attocube_non_linearity.m @@ -0,0 +1,131 @@ +%% Clear Workspace and Close figures +clear; close all; clc; + +%% Intialize Laplace variable +s = zpk('s'); + +addpath('./mat/'); + +% Load Data +% The measurement data are loaded and the offset are removed using the =detrend= command. + + +load('int_enc_comp.mat', 'interferometer', 'encoder', 'u', 't'); +Ts = 1e-4; % Sampling Time [s] + +interferometer = detrend(interferometer, 0); +encoder = detrend(encoder, 0); +u = detrend(u, 0); + +% Time Domain Results +% One period of the displacement of the mass as measured by the encoder and interferometer are shown in Figure [[fig:int_enc_one_cycle]]. +% It consist of the sinusoidal motion at 0.5Hz with an amplitude of approximately $70\mu m$. + +% The frequency of the motion is chosen such that no resonance in the system is excited. +% This should improve the coherence between the measurements made by the encoder and interferometer. + + +figure; +hold on; +plot(t, encoder, '-', 'DisplayName', 'Encoder') +plot(t, interferometer, '--', 'DisplayName', 'Interferometer') +hold off; +xlabel('Time [s]'); ylabel('Displacement [m]'); +legend('location', 'southeast'); +xlim([50, 52]) + + + +% #+name: fig:int_enc_one_cycle +% #+caption: One cycle measurement +% #+RESULTS: +% [[file:figs/int_enc_one_cycle.png]] + +% The difference between the two measurements during the same period is shown in Figure [[fig:int_enc_one_cycle_error]]. + + +figure; +hold on; +plot(t, encoder - interferometer, 'DisplayName', 'Difference') +hold off; +xlabel('Time [s]'); ylabel('Displacement [m]'); +legend('location', 'northeast'); +xlim([50, 52]) + +% Difference between Encoder and Interferometer as a function of time +% The data is filtered using a second order low pass filter with a cut-off frequency $\omega_0$ as defined below. + + +w0 = 2*pi*5; % [rad/s] +xi = 0.7; + +G_lpf = 1/(1 + 2*xi/w0*s + s^2/w0^2); + + + +% After filtering, the data is "re-shaped" such that we can superimpose all the measured periods as shown in Figure [[fig:int_enc_error_mean_time]]. +% This gives an idea of the measurement error as given by the Attocube during a $70 \mu m$ motion. + +d_err_mean = reshape(lsim(G_lpf, encoder - interferometer, t), [2/Ts floor(Ts/2*length(encoder))]); +d_err_mean = d_err_mean - mean(d_err_mean); + +figure; +hold on; +for i_i = 1:size(d_err_mean, 2) + plot(t(1:size(d_err_mean, 1)), d_err_mean(:, i_i), 'k-') +end +plot(t(1:size(d_err_mean, 1)), mean(d_err_mean, 2), 'r-') +hold off; +xlabel('Time [s]'); ylabel('Displacement [m]'); + +% Difference between Encoder and Interferometer as a function of position +% Figure [[fig:int_enc_error_mean_time]] gives the measurement error as a function of time. +% We here wish the compute this measurement error as a function of the position (as measured by the encoer). + +% To do so, all the attocube measurements corresponding to each position measured by the Encoder (resolution of $1nm$) are averaged. +% Figure [[fig:int_enc_error_mean_position]] is obtained where we clearly see an error with a period comparable to the motion range and a much smaller period corresponding to the non-linear period errors that we wish the estimate. + +[e_sorted, ~, e_ind] = unique(encoder); + +i_mean = zeros(length(e_sorted), 1); +for i = 1:length(e_sorted) + i_mean(i) = mean(interferometer(e_ind == i)); +end + +i_mean_error = (i_mean - e_sorted); + +figure; +hold on; +% plot(encoder, interferometer - encoder, 'k.', 'DisplayName', 'Difference') +plot(1e6*(e_sorted), 1e9*(i_mean_error)) +hold off; +xlabel('Encoder Measurement [$\mu m$]'); ylabel('Measrement Error [nm]'); + + + +% #+name: fig:int_enc_error_mean_position +% #+caption: Difference between the two measurement as a function of the measured position by the encoder, averaged for all the cycles +% #+RESULTS: +% [[file:figs/int_enc_error_mean_position.png]] + +% The period of the non-linearity seems to be equal to $765 nm$ which corresponds to half the wavelength of the Laser ($1.53 \mu m$). +% For the motion range done here, the non-linearity is measured over ~18 periods which permits to do some averaging. + + +win_length = 1530/2; % length of the windows (corresponds to 765 nm) +num_avg = floor(length(e_sorted)/win_length); % number of averaging + +i_init = ceil((length(e_sorted) - win_length*num_avg)/2); % does not start at the extremity + +e_sorted_mean_over_period = mean(reshape(i_mean_error(i_init:i_init+win_length*num_avg-1), [win_length num_avg]), 2); + + + +% The obtained periodic non-linearity is shown in Figure [[fig:int_non_linearity_period_wavelength]]. + + +figure; +hold on; +plot(1e-3*(0:win_length-1), 1e9*(e_sorted_mean_over_period)) +hold off; +xlabel('Displacement [$\mu m$]'); ylabel('Measurement Non-Linearity [nm]'); diff --git a/matlab/effect_air_protection.m b/matlab/effect_air_protection.m new file mode 100644 index 0000000..08f965f --- /dev/null +++ b/matlab/effect_air_protection.m @@ -0,0 +1,73 @@ +%% Clear Workspace and Close figures +clear; close all; clc; + +%% Intialize Laplace variable +s = zpk('s'); + +addpath('./mat/'); + +% Aluminium Tube and Bubble Sheet + +load('short_test_plastic.mat'); +Ts = 1e-4; % [s] + +x = detrend(x, 0); + +figure; +plot(t, 1e9*x) +xlabel('Time [s]'); ylabel('Displacement [nm]'); + +win = hann(ceil(length(x)/10)); +[p_1, f_1] = pwelch(x, win, [], [], 1/Ts); + +% Only Aluminium Tube + +load('short_test_alu_tube.mat'); +Ts = 1e-4; % [s] + +x = detrend(x, 0); + + + +% The time domain measurement is shown in Figure [[fig:short_meas_time_domain]]. + +figure; +plot(t, 1e9*x) +xlabel('Time [s]'); ylabel('Displacement [nm]'); + +win = hann(ceil(length(x)/10)); +[p_2, f_2] = pwelch(x, win, [], [], 1/Ts); + +% Nothing + +load('short_test_without_material.mat'); +Ts = 1e-4; % [s] + +x = detrend(x, 0); + + + +% The time domain measurement is shown in Figure [[fig:short_meas_time_domain]]. + +figure; +plot(t, 1e9*x) +xlabel('Time [s]'); ylabel('Displacement [nm]'); + +win = hann(ceil(length(x)/10)); +[p_3, f_3] = pwelch(x, win, [], [], 1/Ts); + +% Comparison + +figure; +hold on; +plot(f_1(8:end), sqrt(p_1(8:end)), '-', ... + 'DisplayName', 'Alunimium + Bubble'); +plot(f_2(8:end), sqrt(p_2(8:end)), '-', ... + 'DisplayName', 'Aluminium'); +plot(f_3(8:end), sqrt(p_3(8:end)), '-', ... + 'DisplayName', 'nothing'); +hold off; +set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log'); +ylabel('ASD [$m/\sqrt{Hz}$]'); xlabel('Frequency [Hz]'); +xlim([1e-1, 5e3]); +legend('location', 'northeast'); diff --git a/mat/int_enc_comp.mat b/matlab/mat/int_enc_comp.mat similarity index 100% rename from mat/int_enc_comp.mat rename to matlab/mat/int_enc_comp.mat diff --git a/mat/long_test_plastic.mat b/matlab/mat/long_test_plastic.mat similarity index 100% rename from mat/long_test_plastic.mat rename to matlab/mat/long_test_plastic.mat diff --git a/mat/short_test_alu_tube.mat b/matlab/mat/short_test_alu_tube.mat similarity index 100% rename from mat/short_test_alu_tube.mat rename to matlab/mat/short_test_alu_tube.mat diff --git a/mat/short_test_plastic.mat b/matlab/mat/short_test_plastic.mat similarity index 100% rename from mat/short_test_plastic.mat rename to matlab/mat/short_test_plastic.mat diff --git a/mat/short_test_without_material.mat b/matlab/mat/short_test_without_material.mat similarity index 100% rename from mat/short_test_without_material.mat rename to matlab/mat/short_test_without_material.mat diff --git a/matlab/test_attocube.slx.r2018a b/matlab/test_attocube.slx.r2018a deleted file mode 100644 index 193f0218cae5452d790f9241f346dc8b3c399f82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44399 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