845 lines
30 KiB
Org Mode
845 lines
30 KiB
Org Mode
#+TITLE: Measurement Analysis
|
|
:drawer:
|
|
#+STARTUP: overview
|
|
|
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
|
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
|
|
#+HTML_HEAD: <script src="../js/jquery.min.js"></script>
|
|
#+HTML_HEAD: <script src="../js/bootstrap.min.js"></script>
|
|
#+HTML_HEAD: <script src="../js/jquery.stickytableheaders.min.js"></script>
|
|
#+HTML_HEAD: <script src="../js/readtheorg.js"></script>
|
|
|
|
#+LATEX_CLASS: cleanreport
|
|
#+LaTeX_CLASS_OPTIONS: [tocnp, secbreak, minted]
|
|
|
|
#+PROPERTY: header-args:matlab :session *MATLAB*
|
|
#+PROPERTY: header-args:matlab+ :comments org
|
|
#+PROPERTY: header-args:matlab+ :exports both
|
|
#+PROPERTY: header-args:matlab+ :eval no-export
|
|
#+PROPERTY: header-args:matlab+ :noweb yes
|
|
#+PROPERTY: header-args:matlab+ :mkdirp yes
|
|
#+PROPERTY: header-args:matlab+ :output-dir figs
|
|
:end:
|
|
|
|
[[../index.org][Back to main page]].
|
|
|
|
* Importation of the data
|
|
#+begin_src matlab :exports none :results silent
|
|
<<matlab-init>>
|
|
#+end_src
|
|
|
|
First, load all the measurement files:
|
|
#+begin_src matlab :exports code :results silent
|
|
meas = {};
|
|
meas{1} = load('./mat/Measurement1.mat');
|
|
meas{2} = load('./mat/Measurement2.mat');
|
|
meas{3} = load('./mat/Measurement3.mat');
|
|
meas{4} = load('./mat/Measurement4.mat');
|
|
meas{5} = load('./mat/Measurement5.mat');
|
|
#+end_src
|
|
|
|
Change the track name for measurements 3 and 4.
|
|
#+begin_src matlab :exports code :results silent
|
|
meas{3}.Track1_Name = 'Input 1: Hexa Z';
|
|
meas{4}.Track1_Name = 'Input 1: Hexa Z';
|
|
#+end_src
|
|
|
|
For the measurements 1 to 4, the measurement channels are shown table [[tab:meas_14]].
|
|
|
|
#+begin_src matlab :exports results :results table :post addhdr(*this*)
|
|
table_string = sprintf(' | Channel 1 | Channel 2 | Channel 3 \n');
|
|
for i = 1:4
|
|
table_string = [table_string, sprintf('Meas. %i | %s | %s | %s \n', i, meas{i}.Track1_Name, meas{i}.Track2_Name, meas{i}.Track3_Name)];
|
|
end
|
|
ans = table_string
|
|
#+end_src
|
|
|
|
#+NAME: tab:meas_14
|
|
#+CAPTION: Channels for measurements 1 to 4
|
|
#+RESULTS:
|
|
| | Channel 1 | Channel 2 | Channel 3 |
|
|
|---------+------------------+------------------+---------------|
|
|
| Meas. 1 | Input 1: tilt1 Z | Input 2: tilt2 Z | Input 3: Ty Y |
|
|
| Meas. 2 | Input 1: tilt1 Z | Input 2: tilt2 Z | Input 3: Ty Y |
|
|
| Meas. 3 | Input 1: Hexa Z | Input 2: tilt2 Z | Input 3: Ty Y |
|
|
| Meas. 4 | Input 1: Hexa Z | Input 2: tilt2 Z | Input 3: Ty Y |
|
|
|
|
|
|
For the measurement 5, the channels are shown table [[tab:meas_5]].
|
|
#+begin_src matlab :exports results :results table :post addhdr(*this*)
|
|
table_string = sprintf(' | Channel 1 | Channel 2 | Channel 3 | Channel 4 \n');
|
|
i = 5
|
|
table_string = [table_string, sprintf('Meas. %i | %s | %s | %s | %s \n', i, meas{i}.Track1_Name, meas{i}.Track2_Name, meas{i}.Track3_Name, meas{i}.Track4_Name)];
|
|
ans = table_string
|
|
#+end_src
|
|
|
|
#+NAME: tab:meas_5
|
|
#+CAPTION: Channels for measurement 5
|
|
#+RESULTS:
|
|
| | Channel 1 | Channel 2 | Channel 3 | Channel 4 |
|
|
|---------+------------------+-------------------+------------------+-------------------|
|
|
| Meas. 5 | Input 1: Floor Z | Input 2: Marble Z | Input 3: Floor Y | Input 4: Marble Y |
|
|
|
|
When using two geophone sensors on the same tilt stage (measurements 1 and 2), we post-process the data to obtain the z displacement and the rotation of the tilt stage:
|
|
#+begin_src matlab :results silent
|
|
meas1_z = (meas{1}.Track1+meas{1}.Track2)/2;
|
|
meas1_tilt = (meas{1}.Track1-meas{1}.Track2)/2;
|
|
meas{1}.Track1 = meas1_z;
|
|
meas{1}.Track1_Y_Magnitude = 'Meter / second';
|
|
meas{1}.Track1_Name = 'Ry Z';
|
|
meas{1}.Track2 = meas1_tilt;
|
|
meas{1}.Track2_Y_Magnitude = 'Rad / second';
|
|
meas{1}.Track2_Name = 'Ry Tilt';
|
|
|
|
meas2_z = (meas{2}.Track1+meas{2}.Track2)/2;
|
|
meas2_tilt = (meas{2}.Track1-meas{2}.Track2)/2;
|
|
meas{2}.Track1 = meas2_z;
|
|
meas{2}.Track1_Y_Magnitude = 'Meter / second';
|
|
meas{2}.Track1_Name = 'Ry Z';
|
|
meas{2}.Track2 = meas2_tilt;
|
|
meas{2}.Track2_Y_Magnitude = 'Rad / second';
|
|
meas{2}.Track2_Name = 'Ry Tilt';
|
|
#+end_src
|
|
|
|
* Variables for analysis
|
|
We define the sampling frequency and the time vectors for the plots.
|
|
|
|
#+begin_src matlab :exports code :results silent
|
|
Fs = 256; % [Hz]
|
|
dt = 1/(Fs);
|
|
t1 = dt*[1:length(meas{1}.Track1)];
|
|
t2 = dt*[1:length(meas{2}.Track1)];
|
|
t3 = dt*[1:length(meas{3}.Track1)];
|
|
t4 = dt*[1:length(meas{4}.Track1)];
|
|
t5 = dt*[1:length(meas{5}.Track1)];
|
|
#+end_src
|
|
|
|
For the frequency analysis, we define the frequency limits for the plot.
|
|
#+begin_src matlab :exports code :results silent
|
|
fmin = 1; % [Hz]
|
|
fmax = 100; % [Hz]
|
|
#+end_src
|
|
|
|
Then we define the windows that will be used to average the results.
|
|
#+begin_src matlab :exports code :results silent
|
|
psd_window = hanning(2*fmin/dt);
|
|
#+end_src
|
|
|
|
* Measurement 1 - Effect of Ty stage
|
|
|
|
The configuration for this measurement is shown table [[tab:conf_meas1]].
|
|
|
|
#+CAPTION: Stages configuration - Measurement 1
|
|
#+NAME: tab:conf_meas1
|
|
| Time | 0-309 | 309-end |
|
|
|------+-------+---------|
|
|
| Ty | OFF | ON |
|
|
|
|
We then plot the measurements in time domain (figure [[fig:meas1]]).
|
|
|
|
#+begin_important
|
|
We observe strange behavior when the Ty stage is turned on.
|
|
How can we explain that?
|
|
#+end_important
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(t1(ceil(300/dt):ceil(340/dt)), meas{1}.Track1(ceil(300/dt):ceil(340/dt)));
|
|
plot(t1(ceil(300/dt):ceil(340/dt)), meas{1}.Track2(ceil(300/dt):ceil(340/dt)));
|
|
plot(t1(ceil(300/dt):ceil(340/dt)), meas{1}.Track3(ceil(300/dt):ceil(340/dt)));
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
|
legend({meas{1}.Track1_Name, meas{1}.Track2_Name, meas{1}.Track3_Name}, 'Location', 'northeast')
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas1
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas1.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas1
|
|
#+CAPTION: Time domain - measurement 1
|
|
#+RESULTS: fig:meas1
|
|
[[file:figs/meas1.png]]
|
|
|
|
To understand what is going on, instead of looking at the velocity, we can look at the displacement by integrating the data. The displacement is computed by integrating the velocity using =cumtrapz= function.
|
|
#+begin_src matlab :exports code :results silent
|
|
tdisp = t1(ceil(300/dt):ceil(340/dt));
|
|
xdisp = cumtrapz(tdisp, meas{1}.Track3(ceil(300/dt):ceil(340/dt)));
|
|
#+end_src
|
|
|
|
Then we plot the position with respect to time (figure [[fig:meas1_disp]]).
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(tdisp, xdisp);
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Displacement [m]');
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas1_disp
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas1_disp.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas1_disp
|
|
#+CAPTION: Y displacement of the Ty stage
|
|
#+RESULTS: fig:meas1_disp
|
|
[[file:figs/meas1_disp.png]]
|
|
|
|
We when compute the power spectral density of each measurement before and after turning on the stage.
|
|
#+begin_src matlab :exports code :results silent
|
|
[pxx111, f111] = pwelch(meas{1}.Track1(1:ceil(300/dt)), psd_window, [], [], Fs);
|
|
[pxx112, f112] = pwelch(meas{1}.Track1(ceil(350/dt):end), psd_window, [], [], Fs);
|
|
|
|
[pxx121, f121] = pwelch(meas{1}.Track2(1:ceil(300/dt)), psd_window, [], [], Fs);
|
|
[pxx122, f122] = pwelch(meas{1}.Track2(ceil(350/dt):end), psd_window, [], [], Fs);
|
|
|
|
[pxx131, f131] = pwelch(meas{1}.Track3(1:ceil(300/dt)), psd_window, [], [], Fs);
|
|
[pxx132, f132] = pwelch(meas{1}.Track3(ceil(350/dt):end), psd_window, [], [], Fs);
|
|
#+end_src
|
|
|
|
We finally plot the power spectral density of each track (figures [[fig:meas1_ry_z_psd]], [[fig:meas1_ry_tilt_psd]], [[fig:meas1_ty_y_psd]]).
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f111, sqrt(pxx111));
|
|
plot(f112, sqrt(pxx112));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{1}.Track1_Name));
|
|
legend({'0-300', '350-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas1_ry_z_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas1_ry_z_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas1_ry_z_psd
|
|
#+CAPTION: PSD of the Z velocity of Ry stage - measurement 1
|
|
#+RESULTS: fig:meas1_ry_z_psd
|
|
[[file:figs/meas1_ry_z_psd.png]]
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f121, sqrt(pxx121));
|
|
plot(f122, sqrt(pxx122));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$rad/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{1}.Track2_Name));
|
|
legend({'0-300', '350-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas1_ry_tilt_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas1_ry_tilt_psd.png" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas1_ry_tilt_psd
|
|
#+CAPTION: PSD of the Rotation of Ry Stage - measurement 1
|
|
#+RESULTS: fig:meas1_ry_tilt_psd
|
|
[[file:figs/meas1_ry_tilt_psd.png]]
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f131, sqrt(pxx131));
|
|
plot(f132, sqrt(pxx132));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{1}.Track3_Name));
|
|
legend({'0-300', '350-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas1_ty_y_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas1_ty_y_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas1_ty_y_psd
|
|
#+CAPTION: PSD of the Ty velocity in the Y direction - measurement 1
|
|
#+RESULTS: fig:meas1_ty_y_psd
|
|
[[file:figs/meas1_ty_y_psd.png]]
|
|
|
|
#+begin_important
|
|
Turning on the Y-translation stage increases the velocity of the Ty stage in the Y direction and the rotation motion of the tilt stage:
|
|
- at 20Hz
|
|
- at 40Hz
|
|
- between 80Hz and 90Hz
|
|
|
|
It does not seems to have any effect on the Z motion of the tilt stage.
|
|
#+end_important
|
|
|
|
* Measurement 2 - Effect of Ry stage
|
|
|
|
The tilt stage is turned ON at around 326 seconds (table [[tab:conf_meas2]]).
|
|
|
|
#+CAPTION: Stages configuration - Measurement 2
|
|
#+NAME: tab:conf_meas2
|
|
| Time | 0-326 | 326-end |
|
|
|------+-------+---------|
|
|
| Tilt | OFF | ON |
|
|
|
|
We plot the time domain (figure [[fig:meas2]]) and we don't observe anything special in the time domain.
|
|
|
|
#+begin_src matlab :exports results :results silent
|
|
figure;
|
|
hold on;
|
|
plot(t2(ceil(300/dt):ceil(350/dt)), meas{2}.Track1(ceil(300/dt):ceil(350/dt)));
|
|
plot(t2(ceil(300/dt):ceil(350/dt)), meas{2}.Track3(ceil(300/dt):ceil(350/dt)));
|
|
plot(t2(ceil(300/dt):ceil(350/dt)), meas{2}.Track2(ceil(300/dt):ceil(350/dt)));
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
|
legend({meas{2}.Track1_Name, meas{2}.Track2_Name, meas{2}.Track3_Name}, 'Location', 'northeast')
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas2
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas2.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas2
|
|
#+CAPTION: Time domain - measurement 2
|
|
#+RESULTS: fig:meas2
|
|
[[file:figs/meas2.png]]
|
|
|
|
We compute the PSD of each track and we plot them (figures [[fig:meas2_ry_z_psd]], [[fig:meas2_ry_tilt_psd]] and [[fig:meas2_ty_y_psd]] ).
|
|
#+begin_src matlab :exports code :results silent
|
|
[pxx211, f211] = pwelch(meas{2}.Track1(1:ceil(326/dt)), psd_window, [], [], Fs);
|
|
[pxx212, f212] = pwelch(meas{2}.Track1(ceil(326/dt):end), psd_window, [], [], Fs);
|
|
|
|
[pxx221, f221] = pwelch(meas{2}.Track2(1:ceil(326/dt)), psd_window, [], [], Fs);
|
|
[pxx222, f222] = pwelch(meas{2}.Track2(ceil(326/dt):end), psd_window, [], [], Fs);
|
|
|
|
[pxx231, f231] = pwelch(meas{2}.Track3(1:ceil(326/dt)), psd_window, [], [], Fs);
|
|
[pxx232, f232] = pwelch(meas{2}.Track3(ceil(326/dt):end), psd_window, [], [], Fs);
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f211, sqrt(pxx211));
|
|
plot(f212, sqrt(pxx212));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{2}.Track1_Name));
|
|
legend({'0-326', '326-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas2_ry_z_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas2_ry_z_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas2_ry_z_psd
|
|
#+CAPTION: PSD of the Z velocity of Ry Stage - measurement 2
|
|
#+RESULTS: fig:meas2_ry_z_psd
|
|
[[file:figs/meas2_ry_z_psd.png]]
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f221, sqrt(pxx221));
|
|
plot(f222, sqrt(pxx222));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$rad/s/\sqrt(Hz)$]');
|
|
title(sprintf('%s', meas{2}.Track2_Name));
|
|
legend({'0-326', '326-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas2_ry_tilt_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas2_ry_tilt_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas2_ry_tilt_psd
|
|
#+CAPTION: PSD of the Rotation motion of Ry Stage - measurement 2
|
|
#+RESULTS: fig:meas2_ry_tilt_psd
|
|
[[file:figs/meas2_ry_tilt_psd.png]]
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f231, sqrt(pxx231));
|
|
plot(f232, sqrt(pxx232));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{2}.Track3_Name));
|
|
legend({'0-326', '326-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas2_ty_y_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas2_ty_y_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas2_ty_y_psd
|
|
#+CAPTION: PSD of the Ty velocity in the Y direction - measurement 2
|
|
#+RESULTS: fig:meas2_ty_y_psd
|
|
[[file:figs/meas2_ty_y_psd.png]]
|
|
|
|
#+begin_important
|
|
We observe no noticeable difference when the Tilt-stage is turned ON expect a small decrease of the Z motion of the tilt stage around 10Hz.
|
|
#+end_important
|
|
|
|
* Measurement 3 - Effect of the Hexapod
|
|
|
|
The hexapod is turned off after 406 seconds (table [[tab:conf_meas3]]).
|
|
|
|
#+CAPTION: Stages configuration - Measurement 3
|
|
#+NAME: tab:conf_meas3
|
|
| Time | 0-406 | 406-end |
|
|
|------+-------+---------|
|
|
| Tilt | ON | ON |
|
|
| Hexa | ON | OFF |
|
|
|
|
The time domain result is shown figure [[fig:meas3]].
|
|
|
|
#+begin_src matlab :exports results :results silent
|
|
figure;
|
|
hold on;
|
|
plot(t3(ceil(380/dt):ceil(420/dt)), meas{3}.Track1(ceil(380/dt):ceil(420/dt)));
|
|
plot(t3(ceil(380/dt):ceil(420/dt)), meas{3}.Track2(ceil(380/dt):ceil(420/dt)));
|
|
plot(t3(ceil(380/dt):ceil(420/dt)), meas{3}.Track3(ceil(380/dt):ceil(420/dt)));
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
|
legend({meas{3}.Track1_Name, meas{3}.Track2_Name, meas{3}.Track3_Name}, 'Location', 'northeast')
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas3
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas3.pdf" :var figsize="wide-noral" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas3
|
|
#+CAPTION: Time domain - measurement 3
|
|
#+RESULTS: fig:meas3
|
|
[[file:figs/meas3.png]]
|
|
|
|
We then compute the PSD of each track before and after turning off the hexapod and plot the results in the figures [[fig:meas3_hexa_z_psd]], [[fig:meas3_ry_z_psd]] and [[fig:meas3_ty_y_psd]].
|
|
#+begin_src matlab :exports code :results silent
|
|
[pxx311, f311] = pwelch(meas{3}.Track1(1:ceil(400/dt)), psd_window, [], [], Fs);
|
|
[pxx312, f312] = pwelch(meas{3}.Track1(ceil(420/dt):end), psd_window, [], [], Fs);
|
|
|
|
[pxx321, f321] = pwelch(meas{3}.Track2(1:ceil(400/dt)), psd_window, [], [], Fs);
|
|
[pxx322, f322] = pwelch(meas{3}.Track2(ceil(420/dt):end), psd_window, [], [], Fs);
|
|
|
|
[pxx331, f331] = pwelch(meas{3}.Track3(1:ceil(400/dt)), psd_window, [], [], Fs);
|
|
[pxx332, f332] = pwelch(meas{3}.Track3(ceil(420/dt):end), psd_window, [], [], Fs);
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f311, sqrt(pxx311));
|
|
plot(f312, sqrt(pxx312));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{3}.Track1_Name));
|
|
legend({'0-400', '420-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas3_hexa_z_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas3_hexa_z_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas3_hexa_z_psd
|
|
#+CAPTION: PSD of the Z velocity of the Hexapod - measurement 3
|
|
#+RESULTS: fig:meas3_hexa_z_psd
|
|
[[file:figs/meas3_hexa_z_psd.png]]
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f321, sqrt(pxx321));
|
|
plot(f322, sqrt(pxx322));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{3}.Track2_Name));
|
|
legend({'0-400', '420-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas3_ry_z_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas3_ry_z_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas3_ry_z_psd
|
|
#+CAPTION: PSD of the Z velocity of the Ry stage - measurement 3
|
|
#+RESULTS: fig:meas3_ry_z_psd
|
|
[[file:figs/meas3_ry_z_psd.png]]
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f331, sqrt(pxx331));
|
|
plot(f332, sqrt(pxx332));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{3}.Track3_Name));
|
|
legend({'0-400', '420-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas3_ty_y_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas3_ty_y_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas3_ty_y_psd
|
|
#+CAPTION: PSD of the Ty velocity in the Y direction - measurement 3
|
|
#+RESULTS: fig:meas3_ty_y_psd
|
|
[[file:figs/meas3_ty_y_psd.png]]
|
|
|
|
#+begin_important
|
|
Turning ON induces some motion on the hexapod in the z direction (figure [[fig:meas3_hexa_z_psd]]), on the tilt stage in the z direction (figure [[fig:meas3_ry_z_psd]]) and on the y motion of the Ty stage (figure [[fig:meas3_ty_y_psd]]):
|
|
- at 17Hz
|
|
- at 34Hz
|
|
#+end_important
|
|
|
|
* Measurement 4 - Effect of the Splip-Ring and Spindle
|
|
|
|
The slip ring is turned on at 300s, then the spindle is turned on at 620s (table [[tab:conf_meas4]]). The time domain signals are shown figure [[fig:meas4]].
|
|
|
|
#+CAPTION: Stages configuration - Measurement 4
|
|
#+NAME: tab:conf_meas4
|
|
| Time | 0-300 | 300-620 | 620-end |
|
|
|----------+-------+---------+---------|
|
|
| SlipRing | OFF | ON | ON |
|
|
| Hexa | OFF | OFF | OFF |
|
|
| Spindle | OFF | OFF | ON |
|
|
|
|
#+begin_src matlab :exports results :results silent
|
|
figure;
|
|
hold on;
|
|
plot(t4, meas{4}.Track1);
|
|
plot(t4, meas{4}.Track2);
|
|
plot(t4, meas{4}.Track3);
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
|
legend({meas{4}.Track1_Name, meas{4}.Track2_Name, meas{4}.Track3_Name}, 'Location', 'southwest')
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas4
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas4.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas4
|
|
#+CAPTION: Time domain - measurement 4
|
|
#+RESULTS: fig:meas4
|
|
[[file:figs/meas4.png]]
|
|
|
|
The PSD of each track are computed using the code below.
|
|
#+begin_src matlab :exports none :results silent
|
|
[pxx411, f411] = pwelch(meas{4}.Track1(1:ceil(280/dt)), psd_window, [], [], Fs);
|
|
[pxx412, f412] = pwelch(meas{4}.Track1(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
|
[pxx413, f413] = pwelch(meas{4}.Track1(ceil(640/dt):end), psd_window, [], [], Fs);
|
|
|
|
[pxx421, f421] = pwelch(meas{4}.Track2(1:ceil(280/dt)), psd_window, [], [], Fs);
|
|
[pxx422, f422] = pwelch(meas{4}.Track2(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
|
[pxx423, f423] = pwelch(meas{4}.Track2(ceil(640/dt):end), psd_window, [], [], Fs);
|
|
|
|
[pxx431, f431] = pwelch(meas{4}.Track3(1:ceil(280/dt)), psd_window, [], [], Fs);
|
|
[pxx432, f432] = pwelch(meas{4}.Track3(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
|
[pxx433, f433] = pwelch(meas{4}.Track3(ceil(640/dt):end), psd_window, [], [], Fs);
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f411, sqrt(pxx411));
|
|
plot(f412, sqrt(pxx412));
|
|
plot(f413, sqrt(pxx413));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{4}.Track1_Name));
|
|
legend({'0-280', '320-600', '640-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas4_hexa_z_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas4_hexa_z_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas4_hexa_z_psd
|
|
#+CAPTION: PSD of the Z velocity of the Hexapod - measurement 4
|
|
#+RESULTS: fig:meas4_hexa_z_psd
|
|
[[file:figs/meas4_hexa_z_psd.png]]
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f421, sqrt(pxx421));
|
|
plot(f422, sqrt(pxx422));
|
|
plot(f423, sqrt(pxx423));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{4}.Track2_Name));
|
|
legend({'0-280', '320-600', '640-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas4_ry_z_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas4_ry_z_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas4_ry_z_psd
|
|
#+CAPTION: PSD of the Ry rotation in the Y direction - measurement 4
|
|
#+RESULTS: fig:meas4_ry_z_psd
|
|
[[file:figs/meas4_ry_z_psd.png]]
|
|
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f431, sqrt(pxx431));
|
|
plot(f432, sqrt(pxx432));
|
|
plot(f433, sqrt(pxx433));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
title(sprintf('%s', meas{4}.Track3_Name));
|
|
legend({'0-280', '320-600', '640-end'}, 'Location', 'southwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas4_ty_y_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas4_ty_y_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas4_ty_y_psd
|
|
#+CAPTION: PSD of the Ty velocity in the Y direction - measurement 4
|
|
#+RESULTS: fig:meas4_ty_y_psd
|
|
[[file:figs/meas4_ty_y_psd.png]]
|
|
|
|
|
|
#+begin_important
|
|
Turning ON the splipring seems to not add motions on the stages measured.
|
|
It even seems to lower the motion of the Ty stage (figure [[fig:meas4_ty_y_psd]]): does that make any sense?
|
|
|
|
Turning ON the spindle induces motions:
|
|
- at 5Hz on each motion measured
|
|
- at 22.5Hz on the Z motion of the Hexapod. Can this is due to some 50Hz?
|
|
- at 62Hz on each motion measured
|
|
#+end_important
|
|
|
|
* Measurement 5 - Transmission from ground to marble
|
|
|
|
This measurement just consists of measurement of Y-Z motion of the ground and the marble.
|
|
|
|
The time domain signals are shown on figure [[fig:meas5]].
|
|
|
|
#+begin_src matlab :exports results :results silent
|
|
figure;
|
|
hold on;
|
|
plot(t5, meas{5}.Track1);
|
|
plot(t5, meas{5}.Track2);
|
|
plot(t5, meas{5}.Track3);
|
|
plot(t5, meas{5}.Track4);
|
|
hold off;
|
|
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
|
legend({meas{5}.Track1_Name, meas{5}.Track2_Name, meas{5}.Track3_Name, meas{5}.Track4_Name}, 'Location', 'northeast')
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas5
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas5.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas5
|
|
#+CAPTION: Time domain - measurement 5
|
|
#+RESULTS: fig:meas5
|
|
[[file:figs/meas5.png]]
|
|
|
|
We compute the PSD of each track and we plot the PSD of the Z motion for the ground and marble on figure [[fig:meas5_z_psd]] and for the Y motion on figure [[fig:meas5_y_psd]].
|
|
|
|
#+begin_src matlab :exports code :results silent
|
|
[pxx51, f51] = pwelch(meas{5}.Track1(:), psd_window, [], [], Fs);
|
|
[pxx52, f52] = pwelch(meas{5}.Track2(:), psd_window, [], [], Fs);
|
|
[pxx53, f53] = pwelch(meas{5}.Track3(:), psd_window, [], [], Fs);
|
|
[pxx54, f54] = pwelch(meas{5}.Track4(:), psd_window, [], [], Fs);
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f51, sqrt(pxx51));
|
|
plot(f52, sqrt(pxx52));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
legend({meas{5}.Track1_Name, meas{5}.Track2_Name}, 'Location', 'northwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas5_z_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas5_z_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas5_z_psd
|
|
#+CAPTION: PSD of the ground and marble in the Z direction
|
|
#+RESULTS: fig:meas5_z_psd
|
|
[[file:figs/meas5_z_psd.png]]
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(f53, sqrt(pxx53));
|
|
plot(f54, sqrt(pxx54));
|
|
xlim([fmin, fmax]);
|
|
xticks([1, 10, 100]);
|
|
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
|
xlabel('Frequency [Hz]'); ylabel('PSD [$m/s/\sqrt{Hz}$]');
|
|
legend({meas{5}.Track3_Name, meas{5}.Track4_Name}, 'Location', 'northwest');
|
|
hold off;
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas5_y_psd
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas5_y_psd.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas5_y_psd
|
|
#+CAPTION: PSD of the ground and marble in the Y direction
|
|
#+RESULTS: fig:meas5_y_psd
|
|
[[file:figs/meas5_y_psd.png]]
|
|
|
|
Then, instead of looking at the Power Spectral Density, we can try to estimate the transfer function from a ground motion to the motion of the marble.
|
|
The transfer functions are shown on figure [[fig:meas5_tf]] and the coherence on figure [[fig:meas5_coh]].
|
|
|
|
#+begin_src matlab :exports code :results silent
|
|
[tfz, fz] = tfestimate(meas{5}.Track1(:), meas{5}.Track2(:), psd_window, [], [], Fs);
|
|
[tfy, fy] = tfestimate(meas{5}.Track3(:), meas{5}.Track4(:), psd_window, [], [], Fs);
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
ax1 = subaxis(2,1,1);
|
|
hold on;
|
|
plot(fz, abs(tfz));
|
|
plot(fy, abs(tfy));
|
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
|
set(gca, 'XTickLabel',[]);
|
|
ylabel('Magnitude');
|
|
hold off;
|
|
ax2 = subaxis(2,1,2);
|
|
hold on;
|
|
plot(fz, 180/pi*angle(tfz));
|
|
plot(fy, 180/pi*angle(tfy));
|
|
set(gca,'xscale','log');
|
|
yticks(-180:90:180);
|
|
ylim([-180 180]);
|
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
|
hold off;
|
|
linkaxes([ax1,ax2],'x');
|
|
xlim([fmin, fmax]);
|
|
legend({'Z direction', 'Y direction'}, 'Location', 'southwest')
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas5_tf
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas5_tf.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas5_tf
|
|
#+CAPTION: Transfer function estimation - measurement 5
|
|
#+RESULTS: fig:meas5_tf
|
|
[[file:figs/meas5_tf.png]]
|
|
|
|
#+begin_src matlab :exports code :results silent
|
|
[cohz, fz] = mscohere(meas{5}.Track1(:), meas{5}.Track2(:), psd_window, [], [], Fs);
|
|
[cohy, fy] = mscohere(meas{5}.Track3(:), meas{5}.Track4(:), psd_window, [], [], Fs);
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none :results silent
|
|
figure;
|
|
hold on;
|
|
plot(fz, cohz);
|
|
plot(fy, cohy);
|
|
hold off;
|
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
|
ylabel('Coherence');
|
|
xlabel('Frequency [Hz]');
|
|
xlim([fmin, fmax]);
|
|
legend({'Z direction', 'Y direction'}, 'Location', 'southwest')
|
|
#+end_src
|
|
|
|
#+NAME: fig:meas5_coh
|
|
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
|
#+begin_src matlab :var filepath="figs/meas5_coh.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
|
<<plt-matlab>>
|
|
#+end_src
|
|
|
|
#+LABEL: fig:meas5_coh
|
|
#+CAPTION: Coherence - measurement 5
|
|
#+RESULTS: fig:meas5_coh
|
|
[[file:figs/meas5_coh.png]]
|
|
|
|
#+begin_important
|
|
The marble seems to have a resonance at around 20Hz on the Y direction.
|
|
But the coherence is not good above 20Hz, so it is difficult to estimate resonances.
|
|
#+end_important
|