Add non-repeatability plots

This commit is contained in:
Thomas Dehaeze 2019-09-20 11:35:58 +02:00
parent 3e77b37759
commit 016098b327
8 changed files with 465 additions and 483 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
figs/repeat_plot_raw.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

File diff suppressed because it is too large Load Diff

223
index.org
View File

@ -2022,7 +2022,7 @@ Multiple measurements are done with different experimental configuration as foll
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); xlabel('Frequency [Hz]');
ylabel('ASD $\left[\frac{m}{\sqrt{Hz}}\right]$'); ylabel('ASD $\left[\frac{1}{\sqrt{Hz}}\right]$');
legend('location', 'northeast'); legend('location', 'northeast');
xlim([1, 1000]); xlim([1, 1000]);
#+end_src #+end_src
@ -3011,7 +3011,9 @@ The controllers can be downloaded [[./mat/K_newport.mat][here]].
* Measurement of the non-repeatability * Measurement of the non-repeatability
<<sec:non_rep_meas>> <<sec:non_rep_meas>>
** Introduction :ignore: ** Introduction :ignore:
- Explanation of the procedure The goal here is the measure the non-repeatability of the setup.
All sources of error (detailed in the budget error in Section [[sec:budget_error]]) will contribute to the non-repeatability of the system.
** Matlab Init :noexport:ignore: ** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) #+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
@ -3026,7 +3028,7 @@ The controllers can be downloaded [[./mat/K_newport.mat][here]].
fs = 1e4; fs = 1e4;
#+end_src #+end_src
** Data Load ** Data Load and pre-processing
#+begin_src matlab #+begin_src matlab
uh = load('mat/data_rep_h.mat', ... uh = load('mat/data_rep_h.mat', ...
't', 'Uch', 'Ucv', ... 't', 'Uch', 'Ucv', ...
@ -3083,6 +3085,53 @@ The controllers can be downloaded [[./mat/K_newport.mat][here]].
uv.t = uv.t - uv.t(1); uv.t = uv.t - uv.t(1);
#+end_src #+end_src
** Some Time domain plots
#+begin_src matlab :exports none
tend = 5; % [s]
figure;
ax1 = subplot(2, 2, 1);
hold on;
plot(uh.t(1:tend*fs), uh.Unh(1:tend*fs));
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
title('Newport Tilt - Horizontal Direction');
ax3 = subplot(2, 2, 3);
hold on;
plot(uh.t(1:tend*fs), 1e9*uh.Va(1:tend*fs));
hold off;
xlabel('Time [s]'); ylabel('Distance [nm]');
title('Attocube - Horizontal Direction');
ax2 = subplot(2, 2, 2);
hold on;
plot(uv.t(1:tend*fs), uv.Unv(1:tend*fs));
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
title('Newport Tilt - Vertical Direction');
ax4 = subplot(2, 2, 4);
hold on;
plot(uv.t(1:tend*fs), 1e9*uv.Va(1:tend*fs));
hold off;
xlabel('Time [s]'); ylabel('Distance [nm]');
title('Attocube - Vertical Direction');
linkaxes([ax1,ax2,ax3,ax4],'x');
linkaxes([ax1,ax2],'xy');
linkaxes([ax3,ax4],'xy');
#+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/repeat_time_signals.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:repeat_time_signals
#+CAPTION: Time domain Signals for the repeatability measurement ([[./figs/repeat_time_signals.png][png]], [[./figs/repeat_time_signals.pdf][pdf]])
[[file:figs/repeat_time_signals.png]]
** Verify Tracking Angle Error ** Verify Tracking Angle Error
Let's verify that the positioning error of the beam is small and what could be the effect on the distance measured by the intereferometer. Let's verify that the positioning error of the beam is small and what could be the effect on the distance measured by the intereferometer.
@ -3090,7 +3139,7 @@ Let's verify that the positioning error of the beam is small and what could be t
load('./mat/plant.mat', 'Gd'); load('./mat/plant.mat', 'Gd');
#+end_src #+end_src
#+begin_src matlab #+begin_src matlab :exports none
figure; figure;
ax1 = subplot(1, 2, 1); ax1 = subplot(1, 2, 1);
hold on; hold on;
@ -3113,6 +3162,15 @@ Let's verify that the positioning error of the beam is small and what could be t
linkaxes([ax1,ax2],'xy'); linkaxes([ax1,ax2],'xy');
#+end_src #+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/repeat_tracking_errors.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:repeat_tracking_errors
#+CAPTION: Tracking errors during the repeatability measurement ([[./figs/repeat_tracking_errors.png][png]], [[./figs/repeat_tracking_errors.pdf][pdf]])
[[file:figs/repeat_tracking_errors.png]]
Let's compute the PSD of the error to see the frequency content. Let's compute the PSD of the error to see the frequency content.
#+begin_src matlab #+begin_src matlab
@ -3148,6 +3206,16 @@ Let's compute the PSD of the error to see the frequency content.
xlim([1, 1000]); xlim([1, 1000]);
#+end_src #+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/psd_tracking_error_rad.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:psd_tracking_error_rad
#+CAPTION: Power Spectral Density of the tracking errors ([[./figs/psd_tracking_error_rad.png][png]], [[./figs/psd_tracking_error_rad.pdf][pdf]])
[[file:figs/psd_tracking_error_rad.png]]
Let's convert that to errors in distance Let's convert that to errors in distance
\[ \Delta L = L^\prime - L = \frac{L}{\cos(\alpha)} - L \approx \frac{L \alpha^2}{2} \] \[ \Delta L = L^\prime - L = \frac{L}{\cos(\alpha)} - L \approx \frac{L \alpha^2}{2} \]
@ -3167,33 +3235,7 @@ with
[psd_UvLv, ~] = pwelch(0.5*L*(uv.Vpv/freqresp(Gd(2,2), 0)).^2, hanning(ceil(1*fs)), [], [], fs); [psd_UvLv, ~] = pwelch(0.5*L*(uv.Vpv/freqresp(Gd(2,2), 0)).^2, hanning(ceil(1*fs)), [], [], fs);
#+end_src #+end_src
#+begin_src matlab :exports none Now, compare that with the PSD of the measured distance by the interferometer (Fig. [[fig:compare_tracking_error_attocube_meas]]).
figure;
ax1 = subplot(1, 2, 1);
hold on;
plot(f, sqrt(psd_UhLh), 'DisplayName', '$\Gamma_{L_h}$');
plot(f, sqrt(psd_UhLv), 'DisplayName', '$\Gamma_{L_v}$');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD $\left[\frac{m}{\sqrt{Hz}}\right]$')
legend('Location', 'southwest');
title('Newport Tilt - Horizontal Direction');
ax2 = subplot(1, 2, 2);
hold on;
plot(f, sqrt(psd_UvLh), 'DisplayName', '$\Gamma_{L_h}$');
plot(f, sqrt(psd_UvLv), 'DisplayName', '$\Gamma_{L_v}$');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD $\left[\frac{m}{\sqrt{Hz}}\right]$')
legend('Location', 'southwest');
title('Newport Tilt - Vertical Direction');
linkaxes([ax1,ax2],'xy');
xlim([1, 1000]);
#+end_src
Now, compare that with the PSD of the measured distance by the interferometer.
#+begin_src matlab #+begin_src matlab
[psd_Lh, f] = pwelch(uh.Va, hanning(ceil(1*fs)), [], [], fs); [psd_Lh, f] = pwelch(uh.Va, hanning(ceil(1*fs)), [], [], fs);
[psd_Lv, ~] = pwelch(uv.Va, hanning(ceil(1*fs)), [], [], fs); [psd_Lv, ~] = pwelch(uv.Va, hanning(ceil(1*fs)), [], [], fs);
@ -3227,6 +3269,19 @@ Now, compare that with the PSD of the measured distance by the interferometer.
xlim([1, 1000]); xlim([1, 1000]);
#+end_src #+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/compare_tracking_error_attocube_meas.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:compare_tracking_error_attocube_meas
#+CAPTION: Comparison of the effect of tracking error on the measured distance and the measured distance by the Attocube ([[./figs/compare_tracking_error_attocube_meas.png][png]], [[./figs/compare_tracking_error_attocube_meas.pdf][pdf]])
[[file:figs/compare_tracking_error_attocube_meas.png]]
#+begin_important
The tracking errors are a limiting factor.
#+end_important
** Processing ** Processing
First, we get the mean value as measured by the interferometer for each value of the Newport angle. First, we get the mean value as measured by the interferometer for each value of the Newport angle.
#+begin_src matlab #+begin_src matlab
@ -3252,8 +3307,20 @@ First, we get the mean value as measured by the interferometer for each value of
plot(Unvm, Vavm) plot(Unvm, Vavm)
hold off; hold off;
xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [m]'); xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [m]');
linkaxes([ax1,ax2],'xy');
#+end_src #+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/repeat_plot_raw.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:repeat_plot_raw
#+CAPTION: Repeatability of the measurement ([[./figs/repeat_plot_raw.png][png]], [[./figs/repeat_plot_raw.pdf][pdf]])
[[file:figs/repeat_plot_raw.png]]
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
ax1 = subplot(1, 2, 1); ax1 = subplot(1, 2, 1);
@ -3272,93 +3339,11 @@ First, we get the mean value as measured by the interferometer for each value of
ylim([-100 100]); ylim([-100 100]);
#+end_src #+end_src
We then subtract #+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab #+begin_src matlab :var filepath="figs/repeat_plot_subtract_mean.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
figure; <<plt-matlab>>
hold on;
plot(uh.Unh, 1e9*(uh.Va - repmat(Vam, length(uh.t)/length(Vam),1)))
hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [nm]');
#+end_src #+end_src
** Some Plots #+NAME: fig:repeat_plot_subtract_mean
#+begin_src matlab #+CAPTION: Repeatability of the measurement after subtracting the mean value ([[./figs/repeat_plot_subtract_mean.png][png]], [[./figs/repeat_plot_subtract_mean.pdf][pdf]])
figure; [[file:figs/repeat_plot_subtract_mean.png]]
hold on;
plot(uh.Unh, uh.Va);
plot(Unhm, Vam)
hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [m]');
#+end_src
#+begin_src matlab :exports none
figure;
ax1 = subplot(1, 2, 1);
hold on;
plot(uh.Vnh(1:fs/2), uh.Va(1:fs/2));
hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [m]');
ax2 = subplot(1, 2, 2);
hold on;
plot(uv.Vnv, uv.Va);
hold off;
xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [m]');
#+end_src
#+begin_src matlab :exports none
figure;
ax1 = subplot(1, 2, 1);
hold on;
plot(uh.Vnh, uh.Va);
hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [m]');
ax2 = subplot(1, 2, 2);
hold on;
plot(uv.Vnv, uv.Va);
hold off;
xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [m]');
#+end_src
** Repeatability
#+begin_src matlab :exports none
figure;
ax1 = subplot(1, 2, 1);
hold on;
plot(Vnh, Va);
hold off;
xlabel('$V_{n,h}$ [V]'); ylabel('$V_a$ [m]');
ax2 = subplot(1, 2, 2);
hold on;
plot(Vnv, Va);
hold off;
xlabel('$V_{n,v}$ [V]'); ylabel('$V_a$ [m]');
#+end_src
#+begin_src matlab
bh = [ones(size(Vnh)) Vnh]\Vph;
bv = [ones(size(Vnv)) Vnv]\Vpv;
#+end_src
#+begin_src matlab :exports none
figure;
ax1 = subplot(1, 2, 1);
hold on;
plot(2*gn0*uh.Vnh, uh.Vph, 'o', 'DisplayName', 'Exp. data');
plot(2*gn0*[min(uh.Vnh) max(uh.Vnh)], 2*gn0*[min(uh.Vnh) max(uh.Vnh)].*bh(2) + bh(1), 'k--', 'DisplayName', sprintf('%.1e x + %.1e', bh(2), bh(1)))
hold off;
xlabel('$\alpha_{0,h}$ [rad]'); ylabel('$Vp_h$ [V]');
legend();
ax2 = subplot(1, 2, 2);
hold on;
plot(2*gn0*uv.Vnv, uv.Vpv, 'o', 'DisplayName', 'Exp. data');
plot(2*gn0*[min(uv.Vnv) max(uv.Vnv)], 2*gn0*[min(uv.Vnv) max(uv.Vnv)].*bv(2) + bv(1), 'k--', 'DisplayName', sprintf('%.1e x + %.1e', bv(2), bv(1)))
hold off;
xlabel('$\alpha_{0,v}$ [rad]'); ylabel('$Vp_v$ [V]');
legend();
#+end_src