Add non-repeatability plots
This commit is contained in:
parent
3e77b37759
commit
016098b327
BIN
figs/compare_tracking_error_attocube_meas.png
Normal file
BIN
figs/compare_tracking_error_attocube_meas.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 212 KiB |
BIN
figs/psd_tracking_error_rad.png
Normal file
BIN
figs/psd_tracking_error_rad.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 192 KiB |
BIN
figs/repeat_plot_raw.png
Normal file
BIN
figs/repeat_plot_raw.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 42 KiB |
BIN
figs/repeat_plot_subtract_mean.png
Normal file
BIN
figs/repeat_plot_subtract_mean.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 55 KiB |
BIN
figs/repeat_time_signals.png
Normal file
BIN
figs/repeat_time_signals.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 95 KiB |
BIN
figs/repeat_tracking_errors.png
Normal file
BIN
figs/repeat_tracking_errors.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 112 KiB |
725
index.html
725
index.html
File diff suppressed because it is too large
Load Diff
223
index.org
223
index.org
@ -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
|
|
||||||
|
Loading…
Reference in New Issue
Block a user