#+TITLE:Measurements
:DRAWER:
#+STARTUP: overview
#+LANGUAGE: en
#+EMAIL: dehaeze.thomas@gmail.com
#+AUTHOR: Dehaeze Thomas
#+HTML_LINK_HOME: ../index.html
#+HTML_LINK_UP: ../index.html
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_MATHJAX: align: center tagside: right font: TeX
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :results none
#+PROPERTY: header-args:matlab+ :exports both
#+PROPERTY: header-args:matlab+ :eval no-export
#+PROPERTY: header-args:matlab+ :output-dir figs
#+PROPERTY: header-args:shell :eval no-export
:END:
For all the measurements shown here:
- geophones used are L22 with a resonance frequency of 1Hz
- the signals are amplified with voltage amplifiers with a gain of 60dB
- the voltage amplifiers include a low pass filter with a cut-off frequency at 1kHz
* Effect of all the control systems on the Sample vibrations
:PROPERTIES:
:header-args:matlab+: :tangle matlab/effect_control_all.m
:header-args:matlab+: :comments org :mkdirp yes
:END:
<>
** ZIP file containing the data and matlab files :ignore:
#+begin_src bash :exports none :results none
if [ matlab/effect_control_all.m -nt data/effect_control_all.zip ]; then
cp matlab/effect_control_all.m effect_control_all.m;
zip data/effect_control_all \
mat/data_003.mat \
mat/data_004.mat \
mat/data_005.mat \
mat/data_006.mat \
mat/data_007.mat \
mat/data_008.mat \
effect_control_all.m;
rm effect_control_all.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/effect_control_all.zip][here]].
#+end_note
** Experimental Setup
We here measure the signals of two geophones:
- One is located on top of the Sample platform
- One is located on the marble
The signal from the top geophone does not go trought the slip-ring.
First, all the control systems are turned ON, then, they are turned one by one.
Each measurement are done during 50s.
#+name: tab:control_system_on_off
#+caption: Summary of the measurements and the states of the control systems
| Ty | Ry | Slip Ring | Spindle | Hexapod | Meas. file |
|------+------+-----------+---------+---------+----------------|
| *ON* | *ON* | *ON* | *ON* | *ON* | =meas_003.mat= |
| OFF | *ON* | *ON* | *ON* | *ON* | =meas_004.mat= |
| OFF | OFF | *ON* | *ON* | *ON* | =meas_005.mat= |
| OFF | OFF | OFF | *ON* | *ON* | =meas_006.mat= |
| OFF | OFF | OFF | OFF | *ON* | =meas_007.mat= |
| OFF | OFF | OFF | OFF | OFF | =meas_008.mat= |
Each of the =mat= file contains one array =data= with 3 columns:
| Column number | Description |
|---------------+-------------------|
| 1 | Geophone - Marble |
| 2 | Geophone - Sample |
| 3 | Time |
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<>
#+end_src
** Load data
We load the data of the z axis of two geophones.
#+begin_src matlab :results none
d3 = load('mat/data_003.mat', 'data'); d3 = d3.data;
d4 = load('mat/data_004.mat', 'data'); d4 = d4.data;
d5 = load('mat/data_005.mat', 'data'); d5 = d5.data;
d6 = load('mat/data_006.mat', 'data'); d6 = d6.data;
d7 = load('mat/data_007.mat', 'data'); d7 = d7.data;
d8 = load('mat/data_008.mat', 'data'); d8 = d8.data;
#+end_src
** Analysis - Time Domain
First, we can look at the time domain data and compare all the measurements:
- comparison for the geophone at the sample location (figure [[fig:time_domain_sample]])
- comparison for the geophone on the granite (figure [[fig:time_domain_marble]])
#+begin_src matlab :results none
figure;
hold on;
plot(d3(:, 3), d3(:, 2), 'DisplayName', 'All ON');
plot(d4(:, 3), d4(:, 2), 'DisplayName', 'Ty OFF');
plot(d5(:, 3), d5(:, 2), 'DisplayName', 'Ry OFF');
plot(d6(:, 3), d6(:, 2), 'DisplayName', 'S-R OFF');
plot(d7(:, 3), d7(:, 2), 'DisplayName', 'Rz OFF');
plot(d8(:, 3), d8(:, 2), 'DisplayName', 'Hexa OFF');
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
xlim([0, 50]);
legend('Location', 'bestoutside');
#+end_src
#+NAME: fig:time_domain_sample
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_sample.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_sample
#+CAPTION: Comparison of the time domain data when turning off the control system of the stages - Geophone at the sample location
#+RESULTS: fig:time_domain_sample
[[file:figs/time_domain_sample.png]]
#+begin_src matlab :results none
figure;
hold on;
plot(d3(:, 3), d3(:, 1), 'DisplayName', 'All ON');
plot(d4(:, 3), d4(:, 1), 'DisplayName', 'Ty OFF');
plot(d5(:, 3), d5(:, 1), 'DisplayName', 'Ry OFF');
plot(d6(:, 3), d6(:, 1), 'DisplayName', 'S-R OFF');
plot(d7(:, 3), d7(:, 1), 'DisplayName', 'Rz OFF');
plot(d8(:, 3), d8(:, 1), 'DisplayName', 'Hexa OFF');
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
xlim([0, 50]);
legend('Location', 'bestoutside');
#+end_src
#+NAME: fig:time_domain_marble
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_marble.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_marble
#+CAPTION: Comparison of the time domain data when turning off the control system of the stages - Geophone on the marble
#+RESULTS: fig:time_domain_marble
[[file:figs/time_domain_marble.png]]
** Analysis - Frequency Domain
#+begin_src matlab :results none
dt = d3(2, 3) - d3(1, 3);
Fs = 1/dt;
win = hanning(ceil(10*Fs));
#+end_src
*** Vibrations at the sample location
First, we compute the Power Spectral Density of the signals coming from the Geophone located at the sample location.
#+begin_src matlab :results none
[px3, f] = pwelch(d3(:, 2), win, [], [], Fs);
[px4, ~] = pwelch(d4(:, 2), win, [], [], Fs);
[px5, ~] = pwelch(d5(:, 2), win, [], [], Fs);
[px6, ~] = pwelch(d6(:, 2), win, [], [], Fs);
[px7, ~] = pwelch(d7(:, 2), win, [], [], Fs);
[px8, ~] = pwelch(d8(:, 2), win, [], [], Fs);
#+end_src
And we compare all the signals (figures [[fig:psd_sample_comp]] and [[fig:psd_sample_comp_high_freq]]).
#+begin_src matlab :results none
figure;
hold on;
plot(f, sqrt(px3), 'DisplayName', 'All ON');
plot(f, sqrt(px4), 'DisplayName', 'Ty OFF');
plot(f, sqrt(px5), 'DisplayName', 'Ry OFF');
plot(f, sqrt(px6), 'DisplayName', 'S-R OFF');
plot(f, sqrt(px7), 'DisplayName', 'Rz OFF');
plot(f, sqrt(px8), 'DisplayName', 'Hexa OFF');
hold off;
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
xlim([0.1, 500]);
legend('Location', 'southwest');
#+end_src
#+NAME: fig:psd_sample_comp
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_sample_comp.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_sample_comp
#+CAPTION: Amplitude Spectral Density of the signal coming from the top geophone
#+RESULTS: fig:psd_sample_comp
[[file:figs/psd_sample_comp.png]]
#+begin_src matlab :results none :tangle no :exports none
xlim([80, 500]);
#+end_src
#+NAME: fig:psd_sample_comp_high_freq
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_sample_comp_high_freq.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_sample_comp_high_freq
#+CAPTION: Amplitude Spectral Density of the signal coming from the top geophone (zoom at high frequencies)
#+RESULTS: fig:psd_sample_comp_high_freq
[[file:figs/psd_sample_comp_high_freq.png]]
*** Vibrations on the marble
Now we plot the same curves for the geophone located on the marble.
#+begin_src matlab :results none
[px3, f] = pwelch(d3(:, 1), win, [], [], Fs);
[px4, ~] = pwelch(d4(:, 1), win, [], [], Fs);
[px5, ~] = pwelch(d5(:, 1), win, [], [], Fs);
[px6, ~] = pwelch(d6(:, 1), win, [], [], Fs);
[px7, ~] = pwelch(d7(:, 1), win, [], [], Fs);
[px8, ~] = pwelch(d8(:, 1), win, [], [], Fs);
#+end_src
And we compare the Amplitude Spectral Densities (figures [[fig:psd_marble_comp]] and [[fig:psd_marble_comp_high_freq]])
#+begin_src matlab :results none
figure;
hold on;
plot(f, sqrt(px3), 'DisplayName', 'All ON');
plot(f, sqrt(px4), 'DisplayName', 'Ty OFF');
plot(f, sqrt(px5), 'DisplayName', 'Ry OFF');
plot(f, sqrt(px6), 'DisplayName', 'S-R OFF');
plot(f, sqrt(px7), 'DisplayName', 'Rz OFF');
plot(f, sqrt(px8), 'DisplayName', 'Hexa OFF');
hold off;
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
xlim([0.1, 500]);
legend('Location', 'northeast');
#+end_src
#+NAME: fig:psd_marble_comp
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_marble_comp.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_marble_comp
#+CAPTION: Amplitude Spectral Density of the signal coming from the top geophone
#+RESULTS: fig:psd_marble_comp
[[file:figs/psd_marble_comp.png]]
#+begin_src matlab :results none :tangle no :exports none
legend('Location', 'southwest');
xlim([80, 500]);
#+end_src
#+NAME: fig:psd_marble_comp_high_freq
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_marble_comp_high_freq.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_marble_comp_high_freq
#+CAPTION: Amplitude Spectral Density of the signal coming from the top geophone (zoom at high frequencies)
#+RESULTS: fig:psd_marble_comp_high_freq
[[file:figs/psd_marble_comp_high_freq.png]]
** Effect of the control system on the transmissibility from ground to sample
As the feedback loops change the dynamics of the system, we should see differences on the transfer function from marble velocity to sample velocity when turning off the control systems (figure [[fig:trans_comp]]).
#+begin_src matlab :results none
dt = d3(2, 3) - d3(1, 3);
Fs = 1/dt;
win = hanning(ceil(1*Fs));
#+end_src
First, we compute the Power Spectral Density of the signals coming from the Geophone located at the sample location.
#+begin_src matlab :results none
[T3, f] = tfestimate(d3(:, 1), d3(:, 2), win, [], [], Fs);
[T4, ~] = tfestimate(d4(:, 1), d4(:, 2), win, [], [], Fs);
[T5, ~] = tfestimate(d5(:, 1), d5(:, 2), win, [], [], Fs);
[T6, ~] = tfestimate(d6(:, 1), d6(:, 2), win, [], [], Fs);
[T7, ~] = tfestimate(d7(:, 1), d7(:, 2), win, [], [], Fs);
[T8, ~] = tfestimate(d8(:, 1), d8(:, 2), win, [], [], Fs);
#+end_src
#+begin_src matlab :results none
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(T3), 'DisplayName', 'All ON');
plot(f, abs(T4), 'DisplayName', 'Ty OFF');
plot(f, abs(T5), 'DisplayName', 'Ry OFF');
plot(f, abs(T6), 'DisplayName', 'S-R OFF');
plot(f, abs(T7), 'DisplayName', 'Rz OFF');
plot(f, abs(T8), 'DisplayName', 'Hexa OFF');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
set(gca, 'XTickLabel',[]);
ylabel('Magnitude');
legend('Location', 'northwest');
ax2 = subplot(2, 1, 2);
hold on;
plot(f, mod(180+180/pi*phase(T3), 360)-180);
plot(f, mod(180+180/pi*phase(T4), 360)-180);
plot(f, mod(180+180/pi*phase(T5), 360)-180);
plot(f, mod(180+180/pi*phase(T6), 360)-180);
plot(f, mod(180+180/pi*phase(T7), 360)-180);
plot(f, mod(180+180/pi*phase(T8), 360)-180);
hold off;
set(gca, 'xscale', 'log');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
xlabel('Frequency [Hz]'); ylabel('Phase');
linkaxes([ax1,ax2],'x');
xlim([1, 500]);
#+end_src
#+NAME: fig:trans_comp
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/trans_comp.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:trans_comp
#+CAPTION: Comparison of the transfer function from the geophone on the marble to the geophone at the sample location
#+RESULTS: fig:trans_comp
[[file:figs/trans_comp.png]]
** Conclusion
#+begin_important
- The control system of the Ty stage induces a lot of vibrations of the marble
#+end_important
#+begin_note
- Why it seems that the measurement noise at high frequency is the limiting factor when the slip ring is ON but not when it is OFF?
#+end_note
* Effect of all the control systems on the Sample vibrations - One stage at a time
:PROPERTIES:
:header-args:matlab+: :tangle matlab/effect_control_one.m
:header-args:matlab+: :comments org :mkdirp yes
:END:
<>
** ZIP file containing the data and matlab files :ignore:
#+begin_src bash :exports none :results none
if [ matlab/effect_control_one.m -nt data/effect_control_one.zip ]; then
cp matlab/effect_control_one.m effect_control_one.m;
zip data/effect_control_one \
mat/data_013.mat \
mat/data_014.mat \
mat/data_015.mat \
mat/data_016.mat \
mat/data_017.mat \
mat/data_018.mat \
effect_control_one.m
rm effect_control_one.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/effect_control_one.zip][here]].
#+end_note
** Experimental Setup
We here measure the signals of two geophones:
- One is located on top of the Sample platform
- One is located on the marble
The signal from the top geophone does go trought the slip-ring.
All the control systems are turned OFF, then, they are turned on one at a time.
Each measurement are done during 100s.
The settings of the voltage amplifier are shown on figure [[fig:amplifier_settings]].
A first order low pass filter with a cut-off frequency of 1kHz is added before the voltage amplifier.
#+name: tab:control_system_on_off
#+caption: Summary of the measurements and the states of the control systems
| Ty | Ry | Slip Ring | Spindle | Hexapod | Meas. file |
|------+------+-----------+---------+---------+----------------|
| OFF | OFF | OFF | OFF | OFF | =meas_013.mat= |
| *ON* | OFF | OFF | OFF | OFF | =meas_014.mat= |
| OFF | *ON* | OFF | OFF | OFF | =meas_015.mat= |
| OFF | OFF | *ON* | OFF | OFF | =meas_016.mat= |
| OFF | OFF | OFF | *ON* | OFF | =meas_017.mat= |
| OFF | OFF | OFF | OFF | *ON* | =meas_018.mat= |
Each of the =mat= file contains one array =data= with 3 columns:
| Column number | Description |
|---------------+-------------------|
| 1 | Geophone - Marble |
| 2 | Geophone - Sample |
| 3 | Time |
#+name: fig:amplifier_settings
#+caption: Voltage amplifier settings for the measurement
#+attr_html: :width 500px
[[file:./img/IMG_20190507_101459.jpg]]
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<>
#+end_src
** Load data
We load the data of the z axis of two geophones.
#+begin_src matlab :results none
d_of = load('mat/data_013.mat', 'data'); d_of = d_of.data;
d_ty = load('mat/data_014.mat', 'data'); d_ty = d_ty.data;
d_ry = load('mat/data_015.mat', 'data'); d_ry = d_ry.data;
d_sr = load('mat/data_016.mat', 'data'); d_sr = d_sr.data;
d_rz = load('mat/data_017.mat', 'data'); d_rz = d_rz.data;
d_he = load('mat/data_018.mat', 'data'); d_he = d_he.data;
#+end_src
** Analysis - Time Domain
First, we can look at the time domain data and compare all the measurements:
- comparison for the geophone at the sample location (figure [[fig:time_domain_sample_lpf]])
- comparison for the geophone on the granite (figure [[fig:time_domain_marble_lpf]])
#+begin_src matlab :results none
figure;
hold on;
plot(d_of(:, 3), d_of(:, 2), 'DisplayName', 'All OFF';
plot(d_ty(:, 3), d_ty(:, 2), 'DisplayName', 'Ty ON');
plot(d_ry(:, 3), d_ry(:, 2), 'DisplayName', 'Ry ON');
plot(d_sr(:, 3), d_sr(:, 2), 'DisplayName', 'S-R ON');
plot(d_rz(:, 3), d_rz(:, 2), 'DisplayName', 'Rz ON');
plot(d_he(:, 3), d_he(:, 2), 'DisplayName', 'Hexa ON');
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
xlim([0, 50]);
legend('Location', 'bestoutside');
#+end_src
#+NAME: fig:time_domain_sample_lpf
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_sample_lpf.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_sample_lpf
#+CAPTION: Comparison of the time domain data when turning off the control system of the stages - Geophone at the sample location
#+RESULTS: fig:time_domain_sample_lpf
[[file:figs/time_domain_sample_lpf.png]]
#+begin_src matlab :results none
figure;
hold on;
plot(d_of(:, 3), d_of(:, 1), 'DisplayName', 'All OFF');
plot(d_ty(:, 3), d_ty(:, 1), 'DisplayName', 'Ty ON');
plot(d_ry(:, 3), d_ry(:, 1), 'DisplayName', 'Ry ON');
plot(d_sr(:, 3), d_sr(:, 1), 'DisplayName', 'S-R ON');
plot(d_rz(:, 3), d_rz(:, 1), 'DisplayName', 'Rz ON');
plot(d_he(:, 3), d_he(:, 1), 'DisplayName', 'Hexa ON');
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
xlim([0, 50]);
legend('Location', 'bestoutside');
#+end_src
#+NAME: fig:time_domain_marble_lpf
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_marble_lpf.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_marble_lpf
#+CAPTION: Comparison of the time domain data when turning off the control system of the stages - Geophone on the marble
#+RESULTS: fig:time_domain_marble_lpf
[[file:figs/time_domain_marble_lpf.png]]
** Analysis - Frequency Domain
#+begin_src matlab :results none
dt = d_of(2, 3) - d_of(1, 3);
Fs = 1/dt;
win = hanning(ceil(10*Fs));
#+end_src
*** Vibrations at the sample location
First, we compute the Power Spectral Density of the signals coming from the Geophone located at the sample location.
#+begin_src matlab :results none
[px_of, f] = pwelch(d_of(:, 2), win, [], [], Fs);
[px_ty, ~] = pwelch(d_ty(:, 2), win, [], [], Fs);
[px_ry, ~] = pwelch(d_ry(:, 2), win, [], [], Fs);
[px_sr, ~] = pwelch(d_sr(:, 2), win, [], [], Fs);
[px_rz, ~] = pwelch(d_rz(:, 2), win, [], [], Fs);
[px_he, ~] = pwelch(d_he(:, 2), win, [], [], Fs);
#+end_src
And we compare all the signals (figures [[fig:psd_sample_comp_lpf]] and [[fig:psd_sample_comp_high_freq_lpf]]).
#+begin_src matlab :results none
figure;
hold on;
plot(f, sqrt(px_of), 'DisplayName', 'All OFF');
plot(f, sqrt(px_ty), 'DisplayName', 'Ty ON');
plot(f, sqrt(px_ry), 'DisplayName', 'Ry ON');
plot(f, sqrt(px_sr), 'DisplayName', 'S-R ON');
plot(f, sqrt(px_rz), 'DisplayName', 'Rz ON');
plot(f, sqrt(px_he), 'DisplayName', 'Hexa ON');
hold off;
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
xlim([0.1, 500]);
legend('Location', 'southwest');
#+end_src
#+NAME: fig:psd_sample_comp_lpf
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_sample_comp_lpf.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_sample_comp_lpf
#+CAPTION: Amplitude Spectral Density of the signal coming from the top geophone
#+RESULTS: fig:psd_sample_comp_lpf
[[file:figs/psd_sample_comp_lpf.png]]
#+begin_src matlab :results none :tangle no :exports none
xlim([80, 500]);
#+end_src
#+NAME: fig:psd_sample_comp_high_freq_lpf
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_sample_comp_high_freq_lpf.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_sample_comp_high_freq_lpf
#+CAPTION: Amplitude Spectral Density of the signal coming from the top geophone (zoom at high frequencies)
#+RESULTS: fig:psd_sample_comp_high_freq_lpf
[[file:figs/psd_sample_comp_high_freq_lpf.png]]
*** Vibrations on the marble
Now we plot the same curves for the geophone located on the marble.
#+begin_src matlab :results none
[px_of, f] = pwelch(d_of(:, 1), win, [], [], Fs);
[px_ty, ~] = pwelch(d_ty(:, 1), win, [], [], Fs);
[px_ry, ~] = pwelch(d_ry(:, 1), win, [], [], Fs);
[px_sr, ~] = pwelch(d_sr(:, 1), win, [], [], Fs);
[px_rz, ~] = pwelch(d_rz(:, 1), win, [], [], Fs);
[px_he, ~] = pwelch(d_he(:, 1), win, [], [], Fs);
#+end_src
And we compare the Amplitude Spectral Densities (figures [[fig:psd_marble_comp_lpf]] and [[fig:psd_marble_comp_lpf_high_freq]])
#+begin_src matlab :results none
figure;
hold on;
plot(f, sqrt(px_of), 'DisplayName', 'All OFF');
plot(f, sqrt(px_ty), 'DisplayName', 'Ty ON');
plot(f, sqrt(px_ry), 'DisplayName', 'Ry ON');
plot(f, sqrt(px_sr), 'DisplayName', 'S-R ON');
plot(f, sqrt(px_rz), 'DisplayName', 'Rz ON');
plot(f, sqrt(px_he), 'DisplayName', 'Hexa ON');
hold off;
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
xlim([0.1, 500]);
legend('Location', 'northeast');
#+end_src
#+NAME: fig:psd_marble_comp_lpf
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_marble_comp_lpf.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_marble_comp_lpf
#+CAPTION: Amplitude Spectral Density of the signal coming from geophone located on the marble
#+RESULTS: fig:psd_marble_comp_lpf
[[file:figs/psd_marble_comp_lpf.png]]
#+begin_src matlab :results none :tangle no :exports none
legend('Location', 'southwest');
xlim([80, 500]);
#+end_src
#+NAME: fig:psd_marble_comp_lpf_high_freq
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_marble_comp_lpf_high_freq.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_marble_comp_lpf_high_freq
#+CAPTION: Amplitude Spectral Density of the signal coming from the geophone located on the marble (zoom at high frequencies)
#+RESULTS: fig:psd_marble_comp_lpf_high_freq
[[file:figs/psd_marble_comp_lpf_high_freq.png]]
** Conclusion
#+begin_important
- The Ty stage induces vibrations of the marble and at the sample location above 100Hz
- The hexapod stage induces vibrations at the sample position above 220Hz
#+end_important
* Effect of the Symetrie Driver
:PROPERTIES:
:header-args:matlab+: :tangle matlab/effect_symetrie_driver.m
:header-args:matlab+: :comments org :mkdirp yes
:END:
<>
** ZIP file containing the data and matlab files :ignore:
#+begin_src bash :exports none :results none
if [ matlab/effect_symetrie_driver.m -nt data/effect_symetrie_driver.zip ]; then
cp matlab/effect_symetrie_driver.m effect_symetrie_driver.m;
zip data/effect_symetrie_driver \
mat/data_018.mat \
mat/data_019.mat \
effect_symetrie_driver.m
rm effect_symetrie_driver.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/effect_symetrie_driver.zip][here]].
#+end_note
** Experimental Setup
We here measure the signals of two geophones:
- One is located on top of the Sample platform
- One is located on the marble
The signal from the top geophone does go trought the slip-ring.
All the control systems are turned OFF except the Hexapod one.
Each measurement are done during 100s.
The settings of the voltage amplifier are:
- DC
- 60dB
- 1kHz
A first order low pass filter with a cut-off frequency of 1kHz is added before the voltage amplifier.
The measurements are:
- =meas_018.mat=: Hexapod's driver on the granite
- =meas_019.mat=: Hexapod's driver on the ground
Each of the =mat= file contains one array =data= with 3 columns:
| Column number | Description |
|---------------+-------------------|
| 1 | Geophone - Marble |
| 2 | Geophone - Sample |
| 3 | Time |
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<>
#+end_src
** Load data
We load the data of the z axis of two geophones.
#+begin_src matlab :results none
d_18 = load('mat/data_018.mat', 'data'); d_18 = d_18.data;
d_19 = load('mat/data_019.mat', 'data'); d_19 = d_19.data;
#+end_src
** Analysis - Time Domain
#+begin_src matlab :results none
figure;
hold on;
plot(d_19(:, 3), d_19(:, 1), 'DisplayName', 'Driver - Ground');
plot(d_18(:, 3), d_18(:, 1), 'DisplayName', 'Driver - Granite');
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
xlim([0, 50]);
legend('Location', 'bestoutside');
#+end_src
#+NAME: fig:time_domain_hexa_driver
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_hexa_driver.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_hexa_driver
#+CAPTION: Comparison of the time domain data when turning off the control system of the stages - Geophone at the sample location
#+RESULTS: fig:time_domain_hexa_driver
[[file:figs/time_domain_hexa_driver.png]]
** Analysis - Frequency Domain
#+begin_src matlab :results none
dt = d_18(2, 3) - d_18(1, 3);
Fs = 1/dt;
win = hanning(ceil(10*Fs));
#+end_src
*** Vibrations at the sample location
First, we compute the Power Spectral Density of the signals coming from the Geophone located at the sample location.
#+begin_src matlab :results none
[px_18, f] = pwelch(d_18(:, 1), win, [], [], Fs);
[px_19, ~] = pwelch(d_19(:, 1), win, [], [], Fs);
#+end_src
#+begin_src matlab :results none
figure;
hold on;
plot(f, sqrt(px_19), 'DisplayName', 'Driver - Ground');
plot(f, sqrt(px_18), 'DisplayName', 'Driver - Granite');
hold off;
set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
xlim([0.1, 500]);
legend('Location', 'southwest');
#+end_src
#+NAME: fig:psd_hexa_driver
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_hexa_driver.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_hexa_driver
#+CAPTION: Amplitude Spectral Density of the signal coming from the top geophone
#+RESULTS: fig:psd_hexa_driver
[[file:figs/psd_hexa_driver.png]]
#+begin_src matlab :results none :tangle no :exports none
xlim([80, 500]);
#+end_src
#+NAME: fig:psd_hexa_driver_high_freq
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_hexa_driver_high_freq.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_hexa_driver_high_freq
#+CAPTION: Amplitude Spectral Density of the signal coming from the top geophone (zoom at high frequencies)
#+RESULTS: fig:psd_hexa_driver_high_freq
[[file:figs/psd_hexa_driver_high_freq.png]]
** Conclusion
#+begin_important
Even tough the Hexapod's driver vibrates quite a lot, it does not generate significant vibrations of the granite when either placed on the granite or on the ground.
#+end_important
* Transfer function from one stage to the other
:PROPERTIES:
:header-args:matlab+: :tangle matlab/tf_stages_geophone.m
:header-args:matlab+: :comments org :mkdirp yes
:END:
<>
** ZIP file containing the data and matlab files :ignore:
#+begin_src bash :exports none :results none
if [ matlab/tf_stages_geophone.m -nt data/tf_stages_geophone.zip ]; then
cp matlab/tf_stages_geophone.m tf_stages_geophone.m;
zip data/tf_stages_geophone \
mat/data_010.mat \
mat/data_011.mat \
mat/data_012.mat \
tf_stages_geophone.m
rm tf_stages_geophone.m;
fi
#+end_src
#+begin_note
All the files (data and Matlab scripts) are accessible [[file:data/tf_stages_geophone.zip][here]].
#+end_note
** Experimental Setup
For all the measurements in this section:
- all the control stages are OFF.
- the measurements are on the $z$ direction
*** From Marble to Ty - =mat/meas_010.mat=
One geophone is on the marble, one is on the Ty stage (see figures [[fig:setup_m_ty]], [[fig:setup_m_ty_zoom]] and [[fig:setup_m_ty_top]]).
The =data= array contains the following columns:
| Column | Description |
|--------+-------------|
| 1 | Ground |
| 2 | Ty |
| 3 | Time |
#+name: fig:setup_m_ty
#+caption: Setup with one geophone on the marble and one on top of the translation stage
#+attr_html: :width 500px
[[file:./img/IMG_20190430_155330.jpg]]
#+name: fig:setup_m_ty_zoom
#+caption: Setup with one geophone on the marble and one on top of the translation stage - Close up view
#+attr_html: :width 500px
[[file:./img/IMG_20190430_155335.jpg]]
#+name: fig:setup_m_ty_top
#+caption: Setup with one geophone on the marble and one on top of the translation stage - Top view
#+attr_html: :width 500px
[[file:./img/IMG_20190430_155342.jpg]]
*** From Marble to Ry - =mat/meas_011.mat=
One geophone is on the marble, one is on the Ry stage (see figure [[fig:setup_m_ry]])
The =data= array contains the following columns:
| Column | Description |
|--------+-------------|
| 1 | Ground |
| 2 | Ry |
| 3 | Time |
#+name: fig:setup_m_ry
#+caption: Setup with one geophone on the marble and one on top of the Tilt Stage
#+attr_html: :width 500px
[[file:./img/IMG_20190430_163919.jpg]]
*** From Ty to Ry - =mat/meas_012.mat=
One geophone is on the Ty stage, one is on the Ry stage (see figures [[fig:setup_ty_ry]], [[fig:setup_ty_ry_top]] and [[fig:setup_ty_ry_zoom]])
One geophone on the Ty stage, one geophone on the Ry stage.
The =data= array contains the following columns:
| Column | Description |
|--------+-------------|
| 1 | Ty |
| 2 | Ry |
| 3 | Time |
#+name: fig:setup_ty_ry
#+caption: Setup with one geophone on the translation stage and one on top of the Tilt Stage
#+attr_html: :width 500px
[[file:./img/IMG_20190430_170405.jpg]]
#+name: fig:setup_ty_ry_top
#+caption: Setup with one geophone on the translation stage and one on top of the Tilt Stage - Top view
#+attr_html: :width 500px
[[file:./img/IMG_20190430_170418.jpg]]
#+name: fig:setup_ty_ry_zoom
#+caption: Setup with one geophone on the translation stage and one on top of the Tilt Stage - Close up view
#+attr_html: :width 500px
[[file:./img/IMG_20190430_170425.jpg]]
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<>
#+end_src
** Load data
We load the data of the z axis of two geophones.
#+begin_src matlab :results none
m_ty = load('mat/data_010.mat', 'data'); m_ty = m_ty.data;
m_ry = load('mat/data_011.mat', 'data'); m_ry = m_ry.data;
ty_ry = load('mat/data_012.mat', 'data'); ty_ry = ty_ry.data;
#+end_src
** Analysis - Time Domain
First, we can look at the time domain data.
#+begin_src matlab :results none
figure;
hold on;
plot(m_ty(:, 3), m_ty(:, 1), 'DisplayName', 'Marble');
plot(m_ty(:, 3), m_ty(:, 2), 'DisplayName', 'Ty');
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
legend('Location', 'northeast');
xlim([0, 500]);
#+end_src
#+NAME: fig:time_domain_m_ty
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_m_ty.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_m_ty
#+CAPTION: Time domain - Marble and translation stage
#+RESULTS: fig:time_domain_m_ty
[[file:figs/time_domain_m_ty.png]]
#+begin_src matlab :results none
figure;
hold on;
plot(m_ry(:, 3), m_ry(:, 1), 'DisplayName', 'Marble');
plot(m_ry(:, 3), m_ry(:, 2), 'DisplayName', 'Ty');
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
legend('Location', 'northeast');
xlim([0, 500]);
#+end_src
#+NAME: fig:time_domain_m_ry
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_m_ry.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_m_ry
#+CAPTION: Time domain - Marble and tilt stage
#+RESULTS: fig:time_domain_m_ry
[[file:figs/time_domain_m_ry.png]]
#+begin_src matlab :results none
figure;
hold on;
plot(ty_ry(:, 3), ty_ry(:, 1), 'DisplayName', 'Ty');
plot(ty_ry(:, 3), ty_ry(:, 2), 'DisplayName', 'Ry');
hold off;
xlabel('Time [s]'); ylabel('Voltage [V]');
legend('Location', 'northeast');
xlim([0, 500]);
#+end_src
#+NAME: fig:time_domain_ty_ry
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_ty_ry.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_ty_ry
#+CAPTION: Time domain - Translation stage and tilt stage
#+RESULTS: fig:time_domain_ty_ry
[[file:figs/time_domain_ty_ry.png]]
** Analysis - Frequency Domain
#+begin_src matlab :results none
dt = m_ty(2, 3) - m_ty(1, 3);
Fs = 1/dt;
win = hanning(ceil(1*Fs));
#+end_src
First, we compute the transfer function estimate between the two geophones for the 3 experiments (figure [[fig:compare_tf_geophones]]). We also plot their coherence (figure [[fig:coherence_two_geophones]]).
#+begin_src matlab :results none
[T_m_ty, f] = tfestimate(m_ty(:, 1), m_ty(:, 2), win, [], [], Fs);
[T_m_ry, ~] = tfestimate(m_ry(:, 1), m_ry(:, 2), win, [], [], Fs);
[T_ty_ry, ~] = tfestimate(ty_ry(:, 1), ty_ry(:, 2), win, [], [], Fs);
#+end_src
#+begin_src matlab :results none
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(f, abs(T_m_ty), 'DisplayName', 'Marble - Ty');
plot(f, abs(T_m_ry), 'DisplayName', 'Marble - Ry');
plot(f, abs(T_ty_ry), 'DisplayName', 'Ty - Ry');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
set(gca, 'XTickLabel',[]);
ylabel('Magnitude');
legend('Location', 'northwest');
ax2 = subplot(2, 1, 2);
hold on;
plot(f, mod(180+180/pi*phase(T_m_ty), 360)-180);
plot(f, mod(180+180/pi*phase(T_m_ry), 360)-180);
plot(f, mod(180+180/pi*phase(T_ty_ry), 360)-180);
hold off;
set(gca, 'xscale', 'log');
ylim([-180, 180]);
yticks([-180, -90, 0, 90, 180]);
xlabel('Frequency [Hz]'); ylabel('Phase');
linkaxes([ax1,ax2],'x');
xlim([10, 500]);
#+end_src
#+NAME: fig:compare_tf_geophones
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/compare_tf_geophones.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:compare_tf_geophones
#+CAPTION: Transfer function from the first geophone to the second geophone for the three experiments
#+RESULTS: fig:compare_tf_geophones
[[file:figs/compare_tf_geophones.png]]
#+begin_src matlab :results none
[coh_m_ty, f] = mscohere(m_ty(:, 1), m_ty(:, 2), win, [], [], Fs);
[coh_m_ry, ~] = mscohere(m_ry(:, 1), m_ry(:, 2), win, [], [], Fs);
[coh_ty_ry, ~] = mscohere(ty_ry(:, 1), ty_ry(:, 2), win, [], [], Fs);
#+end_src
#+begin_src matlab :results none :exports none
figure;
hold on;
plot(f, coh_m_ty, 'DisplayName', 'Marble - Ty');
plot(f, coh_m_ry, 'DisplayName', 'Marble - Ry');
plot(f, coh_ty_ry, 'DisplayName', 'Ty - Ry');
hold off;
set(gca, 'xscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Coherence');
ylim([0, 1]); xlim([1, 500]);
#+end_src
#+NAME: fig:coherence_two_geophones
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/coherence_two_geophones.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:coherence_two_geophones
#+CAPTION: Coherence between the two geophones for the three experiments
#+RESULTS: fig:coherence_two_geophones
[[file:figs/coherence_two_geophones.png]]
** Conclusion
#+begin_important
These measurements are not relevant.
#+end_important
* Effect of the Ty Control System on the vibration of the Sample :noexport:ignore:
** Experimental Setup
One geophone is on the marble, the other at the sample location (see figures [[fig:setup_ty]]).
The signal from the top geophone goes through the slip-ring.
#+name: fig:setup_ty
#+caption: Experimental Setup
#+attr_html: :width 500px
[[file:./img/IMG_20190430_112615.jpg]]
Two measurements are done:
| Setup | Data File |
|----------------------+--------------------|
| Control of Ty is on | =mat/data_001.mat= |
| Control of Ty is off | =mat/data_002.mat= |
For each of the measurements, the data are:
| Variable | Description |
|----------+--------------------------------------------------------------------|
| =t= | Time Vector |
| =x1= | Voltage measured across the geophone placed on the marble |
| =x2= | Voltage measured across the geophone placed at the sample location |
Measurements are 50s long.
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
<>
#+end_src
#+begin_src matlab :exports none :results silent :noweb yes
<>
#+end_src
** Load data
We load the data of the z axis of two geophones.
#+begin_src matlab :results none
tyOn = load('mat/data_001.mat', 't', 'x1', 'x2');
tyOff = load('mat/data_002.mat', 't', 'x1', 'x2');
#+end_src
** Analysis - Time Domain
#+begin_src matlab :results none
dt = tyOn.t(2)-tyOn.t(1);
Fs = 1/dt;
#+end_src
#+begin_src matlab :results none
figure;
subplot(1, 2, 1);
hold on;
plot(tyOn.t, tyOn.x1, 'DisplayName', 'Ty ON - Marble');
plot(tyOff.t, tyOff.x1, 'DisplayName', 'Ty OFF - Marble');
hold off;
legend();
xlabel('Time [s]'); ylabel('Voltage [V]');
xlim([0, 50]);
subplot(1, 2, 2);
hold on;
plot(tyOn.t, tyOn.x2, 'DisplayName', 'Ty ON - Sample');
plot(tyOff.t, tyOff.x2, 'DisplayName', 'Ty OFF - Sample');
hold off;
legend();
xlabel('Time [s]'); ylabel('Voltage [V]');
xlim([0, 50]);
#+end_src
#+NAME: fig:time_domain_effect_ty
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_effect_ty.pdf" :var figsize="full-normal" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:time_domain_effect_ty
#+CAPTION: Effect of the Ty control system on the vibrations of the marble and sample
#+RESULTS: fig:time_domain_effect_ty
[[file:figs/time_domain_effect_ty.png]]
** Analysis - Frequency Domain
#+begin_src matlab :results none
Fs = 1/dt;
win = hanning(ceil(10*Fs));
#+end_src
#+begin_src matlab :results none
[pxOn1, f] = pwelch(tyOn.x1, win, [], [], Fs);
[pxOn2, ~] = pwelch(tyOn.x2, win, [], [], Fs);
[pxOff1, ~] = pwelch(tyOff.x1, win, [], [], Fs);
[pxOff2, ~] = pwelch(tyOff.x2, win, [], [], Fs);
#+end_src
#+begin_src matlab :results none
figure;
subplot(1, 2, 1);
hold on;
plot(f, sqrt(pxOn1), 'DisplayName', 'Ty ON - Marble');
plot(f, sqrt(pxOff1), 'DisplayName', 'Ty OFF - Marble');
hold off;
legend();
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlim([0.1, 500]); ylim([1e-4, 1]);
xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
subplot(1, 2, 2);
hold on;
plot(f, sqrt(pxOn2), 'DisplayName', 'Ty ON - Sample');
plot(f, sqrt(pxOff2), 'DisplayName', 'Ty OFF - Sample');
hold off;
legend();
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
xlim([0.1, 500]); ylim([1e-4, 1]);
#+end_src
#+NAME: fig:psd_effect_ty
#+HEADER: :tangle no :exports results :results value raw replace :noweb yes
#+begin_src matlab :var filepath="figs/psd_effect_ty.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
<>
#+end_src
#+NAME: fig:psd_effect_ty
#+CAPTION: Amplitude Spectral Density - Effect of the Ty control system
#+RESULTS: fig:psd_effect_ty
[[file:figs/psd_effect_ty.png]]
** Conclusion