Compare commits

..

No commits in common. "3a8762ae9a3f0769a3224062f410e94bc6f9f38d" and "e3d6df852e3d705443f56ebee885062b0bbceb83" have entirely different histories.

39 changed files with 451 additions and 13122 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2020-09-09 mer. 20:38 -->
<!-- 2020-08-31 lun. 16:09 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Sensor Fusion - Test Bench</title>
<meta name="generator" content="Org mode" />
@ -15,14 +15,6 @@
<script type="text/javascript" src="./js/bootstrap.min.js"></script>
<script type="text/javascript" src="./js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="./js/readtheorg.js"></script>
<script>MathJax = {
tex: {
tags: 'ams',
macros: {bm: ["\\boldsymbol{#1}",1],}
}
};
</script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
<div id="content">
@ -31,81 +23,27 @@
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org2a3a045">1. Experimental Setup</a></li>
<li><a href="#orgdfc8362">2. Huddle Test</a>
<li><a href="#orgaad1791">1. Experimental Setup</a></li>
<li><a href="#org2a43fcc">2. Huddle Test</a>
<ul>
<li><a href="#orgb1de447">2.1. Load Data</a></li>
<li><a href="#orgc9f65e6">2.2. Detrend Data</a></li>
<li><a href="#orgfae408b">2.3. Compute PSD</a></li>
<li><a href="#orgfb0a50d">2.4. Sensor Noise in Volts</a></li>
</ul>
</li>
<li><a href="#org835a98a">3. After identification</a>
<ul>
<li><a href="#org656f89a">3.1. Scale Data</a></li>
<li><a href="#org9468f55">3.2. sdlkfj</a></li>
<li><a href="#org0686d3d">3.3. Compare Time Domain Signals</a></li>
<li><a href="#orgb43afdf">3.4. Compute PSD</a></li>
<li><a href="#org02730d1">3.5. Dynamical Uncertainty</a></li>
<li><a href="#orga6b7413">3.6. ADC Noise</a></li>
<li><a href="#orge64b357">3.7. Sensor Noise</a></li>
</ul>
</li>
<li><a href="#orgec75d07">4. Sensor Dynamics</a>
<ul>
<li><a href="#org0fb20c4">4.1. Load Data</a></li>
<li><a href="#orgbeb67bf">4.2. Time Domain Signals</a></li>
<li><a href="#orge8d90a4">4.3. Identification of the IFF Plant</a>
<ul>
<li><a href="#orge57cb88">4.3.1. Experimental Data</a></li>
<li><a href="#orgaa77ceb">4.3.2. Model of the IFF Plant</a></li>
<li><a href="#org5109d47">4.3.3. Root Locus and optimal Controller</a></li>
</ul>
</li>
<li><a href="#orgdd6e477">4.4. Identification of Sensor Dynamics with IFF activated</a>
<ul>
<li><a href="#orgb129175">4.4.1. Signals</a></li>
<li><a href="#org16c5098">4.4.2. Verification of the achievable damping</a></li>
</ul>
</li>
<li><a href="#org7c6b6b8">4.5. Generate the excitation signal</a>
<ul>
<li><a href="#org0a29bfb">4.5.1. Requirements</a></li>
<li><a href="#org70f432a">4.5.2. Transfer function from excitation signal to displacement</a></li>
<li><a href="#orgb35f216">4.5.3. Motion measured during Huddle test</a></li>
</ul>
</li>
<li><a href="#org5b6add7">4.6. Identification of the Inertial Sensors Dynamics</a>
<ul>
<li><a href="#org00b0fdd">4.6.1. Load Data</a></li>
<li><a href="#org7eb216e">4.6.2. Compare PSD during Huddle and and during identification</a></li>
<li><a href="#org9e50b3e">4.6.3. Compute transfer functions</a></li>
</ul>
</li>
<li><a href="#org12ea408">4.7. Compare Time domain Estimation of the displacement</a></li>
<li><a href="#org20554e9">2.1. Load Data</a></li>
<li><a href="#orgfdfaa65">2.2. Data</a></li>
<li><a href="#org85724d7">2.3. Scale Data</a></li>
<li><a href="#org1bbeff4">2.4. Compare Time Domain Signals</a></li>
<li><a href="#org3fdfc8f">2.5. Compute PSD</a></li>
<li><a href="#org6f491a6">2.6. Dynamical Uncertainty</a></li>
<li><a href="#org91b1273">2.7. Sensor Noise</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org2a3a045" class="outline-2">
<h2 id="org2a3a045"><span class="section-number-2">1</span> Experimental Setup</h2>
<div id="outline-container-orgaad1791" class="outline-2">
<h2 id="orgaad1791"><span class="section-number-2">1</span> Experimental Setup</h2>
<div class="outline-text-2" id="text-1">
<p>
The goal of this experimental setup is to experimentally merge inertial sensors.
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<p>
To merge the sensors, optimal and robust complementary filters are designed.
</p>
<p>
The inertial sensors used are shown in Table
</p>
<table id="orgf5d7fb1" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 1:</span> Inertial Sensors used</caption>
<colgroup>
<col class="org-left" />
@ -114,8 +52,8 @@ The inertial sensors used are shown in Table
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left"><b>Type</b></th>
<th scope="col" class="org-left"><b>Model</b></th>
<th scope="col" class="org-left">&#xa0;</th>
<th scope="col" class="org-left">&#xa0;</th>
</tr>
</thead>
<tbody>
@ -126,268 +64,79 @@ The inertial sensors used are shown in Table
<tr>
<td class="org-left">Geophone</td>
<td class="org-left">Mark Product L-22 - Vertical</td>
<td class="org-left">Mark Product L4C - Vertical</td>
</tr>
</tbody>
</table>
<table id="org9b7266a" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 2:</span> Accelerometer (393B05) Specifications</caption>
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left"><b>Specification</b></th>
<th scope="col" class="org-left"><b>Value</b></th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Sensitivity</td>
<td class="org-left">1.02 [V/(m/s2)]</td>
</tr>
<tr>
<td class="org-left">Resonant Frequency</td>
<td class="org-left">&gt; 2.5 [kHz]</td>
</tr>
<tr>
<td class="org-left">Resolution (1 to 10kHz)</td>
<td class="org-left">0.00004 [m/s2 rms]</td>
</tr>
</tbody>
</table>
<table id="orgf054360" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<caption class="t-above"><span class="table-number">Table 3:</span> Geophone (L22) Specifications</caption>
<colgroup>
<col class="org-left" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left"><b>Specification</b></th>
<th scope="col" class="org-left"><b>Value</b></th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Sensitivity</td>
<td class="org-left">To be measured [V/(m/s)]</td>
</tr>
<tr>
<td class="org-left">Resonant Frequency</td>
<td class="org-left">2 [Hz]</td>
</tr>
</tbody>
</table>
<p>
The ADC used are the IO131 Speedgoat module (<a href="https://www.speedgoat.com/products/io-connectivity-analog-io131">link</a>) with a 16bit resolution over +/- 10V.
</p>
<p>
The geophone signals are amplified using a DLPVA-100-B-D voltage amplified from Femto (<a href="https://www.femto.de/en/products/voltage-amplifiers/variable-gain-100-khz-dlpva.html">link</a>).
The force sensor signal is amplified using a Low Noise Voltage Preamplifier from Ametek (<a href="https://www.ameteksi.com/support-center/legacy-products/signal-recovery-legacy/5113-low-noise-preamplifier">link</a>).
</p>
<p>
Geophone electronics:
</p>
<ul class="org-ul">
<li>gain: 10 (20dB)</li>
<li>low pass filter: 1.5Hz</li>
<li>hifh pass filter: 100kHz (2nd order)</li>
</ul>
<p>
Force Sensor electronics:
</p>
<ul class="org-ul">
<li>gain: 10 (20dB)</li>
<li>low pass filter: 1st order at 3Hz</li>
<li>high pass filter: 1st order at 30kHz</li>
</ul>
</div>
</div>
<div id="outline-container-orgdfc8362" class="outline-2">
<h2 id="orgdfc8362"><span class="section-number-2">2</span> Huddle Test</h2>
<div id="outline-container-org2a43fcc" class="outline-2">
<h2 id="org2a43fcc"><span class="section-number-2">2</span> Huddle Test</h2>
<div class="outline-text-2" id="text-2">
<p>
The goal here is to measure the noise of the inertial sensors.
Is also permits to measure the motion level when nothing is actuated.
</p>
</div>
<div id="outline-container-orgb1de447" class="outline-3">
<h3 id="orgb1de447"><span class="section-number-3">2.1</span> Load Data</h3>
<div id="outline-container-org20554e9" class="outline-3">
<h3 id="org20554e9"><span class="section-number-3">2.1</span> Load Data</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-matlab">ht = load('./mat/huddle_test.mat', 'd', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 'f_meas', 'u', 't');
<pre class="src src-matlab">load('./mat/huddle_test.mat', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 't');
dt = t(2) - t(1);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc9f65e6" class="outline-3">
<h3 id="orgc9f65e6"><span class="section-number-3">2.2</span> Detrend Data</h3>
<div id="outline-container-orgfdfaa65" class="outline-3">
<h3 id="orgfdfaa65"><span class="section-number-3">2.2</span> Data</h3>
<div class="outline-text-3" id="text-2-2">
<div class="org-src-container">
<pre class="src src-matlab">ht.d = detrend(ht.d, 0); % [m]
ht.acc_1 = detrend(ht.acc_1, 0); % [V]
ht.acc_2 = detrend(ht.acc_2, 0); % [V]
ht.geo_1 = detrend(ht.geo_1, 0); % [V]
ht.geo_2 = detrend(ht.geo_2, 0); % [V]
ht.f_meas = detrend(ht.f_meas, 0); % [V]
<pre class="src src-matlab">acc_1 = acc_1 - mean(acc_1);
acc_2 = acc_2 - mean(acc_2);
geo_1 = geo_1 - mean(geo_1);
geo_2 = geo_2 - mean(geo_2);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfae408b" class="outline-3">
<h3 id="orgfae408b"><span class="section-number-3">2.3</span> Compute PSD</h3>
<div id="outline-container-org85724d7" class="outline-3">
<h3 id="org85724d7"><span class="section-number-3">2.3</span> Scale Data</h3>
<div class="outline-text-3" id="text-2-3">
<p>
We first define the parameters for the frequency domain analysis.
From raw data to estimated velocity.
This takes into account the sensibility of the sensor and possible integration to go from acceleration to velocity.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Ts = t(2) - t(1); % [s]
Fs = 1/Ts; % [Hz]
win = hanning(ceil(1*Fs));
<div class="org-src-container">
<pre class="src src-matlab">G0 = 1.02; % [V/(m/s2)]
G_acc = tf(G0);
</pre>
</div>
<p>
Then we compute the Power Spectral Density using <code>pwelch</code> function.
</p>
<div class="org-src-container">
<pre class="src src-matlab">[p_d, f] = pwelch(ht.d, win, [], [], 1/Ts);
[p_acc1, ~] = pwelch(ht.acc_1, win, [], [], 1/Ts);
[p_acc2, ~] = pwelch(ht.acc_2, win, [], [], 1/Ts);
[p_geo1, ~] = pwelch(ht.geo_1, win, [], [], 1/Ts);
[p_geo2, ~] = pwelch(ht.geo_2, win, [], [], 1/Ts);
[p_fmeas, ~] = pwelch(ht.f_meas, win, [], [], 1/Ts);
<pre class="src src-matlab">T = 276;
xi = 0.5;
w = 2*pi;
G_geo = -T*s^2/(s^2 + 2*xi*w*s + w^2);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">acc_1 = lsim(inv(G_acc), acc_1, t);
acc_2 = lsim(inv(G_acc), acc_2, t);
geo_1 = lsim(inv(G_geo), geo_1, t);
geo_2 = lsim(inv(G_geo), geo_2, t);
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfb0a50d" class="outline-3">
<h3 id="orgfb0a50d"><span class="section-number-3">2.4</span> Sensor Noise in Volts</h3>
<div id="outline-container-org1bbeff4" class="outline-3">
<h3 id="org1bbeff4"><span class="section-number-3">2.4</span> Compare Time Domain Signals</h3>
<div class="outline-text-3" id="text-2-4">
<div class="org-src-container">
<pre class="src src-matlab">[coh_acc, ~] = mscohere(ht.acc_1, ht.acc_2, win, [], [], Fs);
[coh_geo, ~] = mscohere(ht.geo_1, ht.geo_2, win, [], [], Fs);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">pN_acc = p_acc1.*(1 - coh_acc);
pN_geo = p_geo1.*(1 - coh_geo);
</pre>
</div>
<p>
PSD of the ADC quantization noise.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Sq = (20/2^16)^2/(12*Fs);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">figure;
hold on;
plot(f, sqrt(pN_acc), '-', 'DisplayName', 'Accelerometers');
plot(f, sqrt(pN_geo), '-', 'DisplayName', 'Geophones');
plot(f, ones(size(f))*sqrt(Sq), '-', 'DisplayName', 'ADC');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD of the Measurement Noise $[V/\sqrt{Hz}]$');
xlim([1, 5000]);
legend('location', 'northeast');
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org835a98a" class="outline-2">
<h2 id="org835a98a"><span class="section-number-2">3</span> After identification</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-org656f89a" class="outline-3">
<h3 id="org656f89a"><span class="section-number-3">3.1</span> Scale Data</h3>
<div class="outline-text-3" id="text-3-1">
<p>
Let&rsquo;s use a model of the accelerometer and geophone to compute the motion from the measured voltage.
</p>
<div class="org-src-container">
<pre class="src src-matlab">G_acc = 1/(1 + s/2/pi/2500); % [V/(m/s2)]
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">G_geo = 120*s^2/(s^2 + 2*0.7*2*pi*2*s + (2*pi*2)^2); % [V/(m/s)]
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">figure;
hold on;
set(gca, 'ColorOrderIndex', 1);
plot(f, sqrt(p_acc1)./abs(squeeze(freqresp(G_acc*s^2, f, 'Hz'))), ...
'DisplayName', 'Accelerometer');
set(gca, 'ColorOrderIndex', 1);
plot(f, sqrt(p_acc2)./abs(squeeze(freqresp(G_acc*s^2, f, 'Hz'))), ...
'HandleVisibility', 'off');
set(gca, 'ColorOrderIndex', 2);
plot(f, sqrt(p_geo1)./abs(squeeze(freqresp(G_geo*s, f, 'Hz'))), ...
'DisplayName', 'Geophone');
set(gca, 'ColorOrderIndex', 2);
plot(f, sqrt(p_geo2)./abs(squeeze(freqresp(G_geo*s, f, 'Hz'))), ...
'HandleVisibility', 'off');
set(gca, 'ColorOrderIndex', 3);
plot(f, sqrt(p_d), 'DisplayName', 'Interferometer');
hold off;
set(gca, 'Xscale', 'log'); set(gca, 'Yscale', 'log');
ylabel('ASD [$m/\sqrt{Hz}$]'); xlabel('Frequency [Hz]');
title('Huddle Test')
legend();
</pre>
</div>
</div>
</div>
<div id="outline-container-org9468f55" class="outline-3">
<h3 id="org9468f55"><span class="section-number-3">3.2</span> sdlkfj</h3>
<div class="outline-text-3" id="text-3-2">
<div class="org-src-container">
<pre class="src src-matlab">acc_1 = lsim(inv(G_acc), ht.acc_1, ht.t);
acc_2 = lsim(inv(G_acc), ht.acc_2, ht.t);
geo_1 = lsim(inv(G_geo), ht.geo_1, ht.t);
geo_2 = lsim(inv(G_geo), ht.geo_2, ht.t);
</pre>
</div>
</div>
</div>
<div id="outline-container-org0686d3d" class="outline-3">
<h3 id="org0686d3d"><span class="section-number-3">3.3</span> Compare Time Domain Signals</h3>
<div class="outline-text-3" id="text-3-3">
<div class="org-src-container">
<pre class="src src-matlab">figure;
hold on;
plot(t, acc_1);
@ -400,9 +149,9 @@ hold off;
</div>
</div>
<div id="outline-container-orgb43afdf" class="outline-3">
<h3 id="orgb43afdf"><span class="section-number-3">3.4</span> Compute PSD</h3>
<div class="outline-text-3" id="text-3-4">
<div id="outline-container-org3fdfc8f" class="outline-3">
<h3 id="org3fdfc8f"><span class="section-number-3">2.5</span> Compute PSD</h3>
<div class="outline-text-3" id="text-2-5">
<p>
We first define the parameters for the frequency domain analysis.
</p>
@ -452,9 +201,9 @@ xlim([1, 5000]);
</div>
</div>
<div id="outline-container-org02730d1" class="outline-3">
<h3 id="org02730d1"><span class="section-number-3">3.5</span> Dynamical Uncertainty</h3>
<div class="outline-text-3" id="text-3-5">
<div id="outline-container-org6f491a6" class="outline-3">
<h3 id="org6f491a6"><span class="section-number-3">2.6</span> Dynamical Uncertainty</h3>
<div class="outline-text-3" id="text-2-6">
<div class="org-src-container">
<pre class="src src-matlab">[T_acc, ~] = tfestimate(acc_1, acc_2, win, [], [], Fs);
[T_geo, ~] = tfestimate(geo_1, geo_2, win, [], [], Fs);
@ -463,37 +212,9 @@ xlim([1, 5000]);
</div>
</div>
<div id="outline-container-orga6b7413" class="outline-3">
<h3 id="orga6b7413"><span class="section-number-3">3.6</span> ADC Noise</h3>
<div class="outline-text-3" id="text-3-6">
<p>
Let&rsquo;s note:
</p>
<ul class="org-ul">
<li>\(\Delta V\) the ADC range in [V]</li>
<li>\(n\) the number of bits</li>
<li>\(q = \frac{\Delta V}{2^n}\) the quantization in [V]</li>
<li>\(f_N\) the sampling frequency in [Hz]</li>
</ul>
<p>
The Power Spectral Density of the quantization noise is then:
</p>
\begin{equation}
S_Q = \frac{q^2}{12 f_N} \quad [V^2/Hz]
\end{equation}
<div class="org-src-container">
<pre class="src src-matlab">Fs = 1/dt;
Sq = (20/2^16)^2/(12*Fs);
</pre>
</div>
</div>
</div>
<div id="outline-container-orge64b357" class="outline-3">
<h3 id="orge64b357"><span class="section-number-3">3.7</span> Sensor Noise</h3>
<div class="outline-text-3" id="text-3-7">
<div id="outline-container-org91b1273" class="outline-3">
<h3 id="org91b1273"><span class="section-number-3">2.7</span> Sensor Noise</h3>
<div class="outline-text-3" id="text-2-7">
<div class="org-src-container">
<pre class="src src-matlab">[coh_acc, ~] = mscohere(acc_1, acc_2, win, [], [], Fs);
[coh_geo, ~] = mscohere(geo_1, geo_2, win, [], [], Fs);
@ -521,499 +242,10 @@ legend('location', 'northeast');
</div>
</div>
</div>
<div id="outline-container-orgec75d07" class="outline-2">
<h2 id="orgec75d07"><span class="section-number-2">4</span> Sensor Dynamics</h2>
<div class="outline-text-2" id="text-4">
<p>
Thanks to the interferometer, it is possible to compute the transfer function from the mass displacement to the voltage generated by the inertial sensors.
This permits to estimate the sensor dynamics and to calibrate the sensors.
</p>
</div>
<div id="outline-container-org0fb20c4" class="outline-3">
<h3 id="org0fb20c4"><span class="section-number-3">4.1</span> Load Data</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-matlab">ht = load('./mat/huddle_test.mat', 'd', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 'f_meas', 'u', 't');
id_ol = load('./mat/identification_noise_bis.mat', 'd', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 'f_meas', 'u', 't');
</pre>
</div>
</div>
</div>
<div id="outline-container-orgbeb67bf" class="outline-3">
<h3 id="orgbeb67bf"><span class="section-number-3">4.2</span> Time Domain Signals</h3>
<div class="outline-text-3" id="text-4-2">
<p>
Excitation signal: noise.
</p>
<div id="org320dc7d" class="figure">
<p><img src="figs/first_exc_signal_time.png" alt="first_exc_signal_time.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Excitation signal used for the first identification</p>
</div>
</div>
</div>
<div id="outline-container-orge8d90a4" class="outline-3">
<h3 id="orge8d90a4"><span class="section-number-3">4.3</span> Identification of the IFF Plant</h3>
<div class="outline-text-3" id="text-4-3">
</div>
<div id="outline-container-orge57cb88" class="outline-4">
<h4 id="orge57cb88"><span class="section-number-4">4.3.1</span> Experimental Data</h4>
<div class="outline-text-4" id="text-4-3-1">
<div class="org-src-container">
<pre class="src src-matlab">Ts = ht.t(2) - ht.t(1);
win = hann(ceil(10/Ts));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">[tf_fmeas_est, f] = tfestimate(id_ol.u, id_ol.f_meas, win, [], [], 1/Ts); % [V/m]
[co_fmeas_est, ~] = mscohere( id_ol.u, id_ol.f_meas, win, [], [], 1/Ts);
</pre>
</div>
<div id="org16469a6" class="figure">
<p><img src="figs/iff_identification_coh.png" alt="iff_identification_coh.png" />
</p>
<p><span class="figure-number">Figure 2: </span>Coherence for the identification of the IFF plant</p>
</div>
<div id="orge81e76a" class="figure">
<p><img src="figs/iff_identification_bode_plot.png" alt="iff_identification_bode_plot.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Bode plot of the identified IFF plant</p>
</div>
</div>
</div>
<div id="outline-container-orgaa77ceb" class="outline-4">
<h4 id="orgaa77ceb"><span class="section-number-4">4.3.2</span> Model of the IFF Plant</h4>
<div class="outline-text-4" id="text-4-3-2">
<div class="org-src-container">
<pre class="src src-matlab">wz = 2*pi*102;
xi_z = 0.01;
wp = 2*pi*239.4;
xi_p = 0.015;
Giff = 2.2*(s^2 + 2*xi_z*s*wz + wz^2)/(s^2 + 2*xi_p*s*wp + wp^2) * ... % Dynamics
10*(s/3/pi/(1 + s/3/pi)) * ... % Low pass filter and gain of the voltage amplifier
exp(-Ts*s); % Time delay induced by ADC/DAC
</pre>
</div>
<div id="org04c5d91" class="figure">
<p><img src="figs/iff_plant_model.png" alt="iff_plant_model.png" />
</p>
<p><span class="figure-number">Figure 4: </span>IFF Plant + Model</p>
</div>
</div>
</div>
<div id="outline-container-org5109d47" class="outline-4">
<h4 id="org5109d47"><span class="section-number-4">4.3.3</span> Root Locus and optimal Controller</h4>
<div class="outline-text-4" id="text-4-3-3">
<div id="org6f813e3" class="figure">
<p><img src="figs/iff_root_locus.png" alt="iff_root_locus.png" />
</p>
<p><span class="figure-number">Figure 5: </span>Root Locus for the IFF control</p>
</div>
<p>
The controller that yield maximum damping is:
</p>
<div class="org-src-container">
<pre class="src src-matlab">Kiff_opt = 102/(s + 2*pi*2);
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgdd6e477" class="outline-3">
<h3 id="orgdd6e477"><span class="section-number-3">4.4</span> Identification of Sensor Dynamics with IFF activated</h3>
<div class="outline-text-3" id="text-4-4">
</div>
<div id="outline-container-orgb129175" class="outline-4">
<h4 id="orgb129175"><span class="section-number-4">4.4.1</span> Signals</h4>
<div class="outline-text-4" id="text-4-4-1">
<p>
A new identification is performed with the resonance damped.
It helps to not induce too much motion at the resonance and damage the actuator.
</p>
<div class="org-src-container">
<pre class="src src-matlab">id_cl = load('./mat/identification_noise_iff_bis.mat', 'd', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 'f_meas', 'u', 't');
</pre>
</div>
</div>
</div>
<div id="outline-container-org16c5098" class="outline-4">
<h4 id="org16c5098"><span class="section-number-4">4.4.2</span> Verification of the achievable damping</h4>
<div class="outline-text-4" id="text-4-4-2">
<div class="org-src-container">
<pre class="src src-matlab">[tf_G_ol_est, f] = tfestimate(id_ol.u, id_ol.d, win, [], [], 1/Ts);
[co_G_ol_est, ~] = mscohere( id_ol.u, id_ol.d, win, [], [], 1/Ts);
[tf_G_cl_est, ~] = tfestimate(id_cl.u, id_cl.d, win, [], [], 1/Ts);
[co_G_cl_est, ~] = mscohere( id_cl.u, id_cl.d, win, [], [], 1/Ts);
</pre>
</div>
<div id="org9566953" class="figure">
<p><img src="figs/Gd_identification_iff_coherence.png" alt="Gd_identification_iff_coherence.png" />
</p>
<p><span class="figure-number">Figure 6: </span>Coherence for the transfer function from F to d, with and without IFF</p>
</div>
<p>
Don&rsquo;t really understand the low frequency behavior.
</p>
<div id="org341e00c" class="figure">
<p><img src="figs/Gd_identification_iff_bode_plot.png" alt="Gd_identification_iff_bode_plot.png" />
</p>
<p><span class="figure-number">Figure 7: </span>Coherence for the transfer function from F to d, with and without IFF</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org7c6b6b8" class="outline-3">
<h3 id="org7c6b6b8"><span class="section-number-3">4.5</span> Generate the excitation signal</h3>
<div class="outline-text-3" id="text-4-5">
</div>
<div id="outline-container-org0a29bfb" class="outline-4">
<h4 id="org0a29bfb"><span class="section-number-4">4.5.1</span> Requirements</h4>
<div class="outline-text-4" id="text-4-5-1">
<p>
The requirements on the excitation signal is:
</p>
<ul class="org-ul">
<li>General much larger motion that the measured motion during the huddle test</li>
<li>Don&rsquo;t damage the actuator</li>
</ul>
<p>
To determine the perfect voltage signal to be generated, we need two things:
</p>
<ul class="org-ul">
<li>the transfer function from voltage to mass displacement</li>
<li>the PSD of the measured motion by the inertial sensors</li>
<li>not saturate the sensor signals</li>
<li>provide enough signal/noise ratio (good coherence) in the frequency band of interest (~0.5Hz to 3kHz)</li>
</ul>
</div>
</div>
<div id="outline-container-org70f432a" class="outline-4">
<h4 id="org70f432a"><span class="section-number-4">4.5.2</span> Transfer function from excitation signal to displacement</h4>
<div class="outline-text-4" id="text-4-5-2">
<p>
Let&rsquo;s first estimate the transfer function from the excitation signal in [V] to the generated displacement in [m] as measured by the inteferometer.
</p>
<div class="org-src-container">
<pre class="src src-matlab">id_cl = load('./mat/identification_noise_iff_bis.mat', 'd', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 'f_meas', 'u', 't');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">win = hann(ceil(10/Ts));
[tf_G_cl_est, f] = tfestimate(id_cl.u, id_cl.d, win, [], [], 1/Ts);
[co_G_cl_est, ~] = mscohere( id_cl.u, id_cl.d, win, [], [], 1/Ts);
</pre>
</div>
<p>
Approximate transfer function from voltage output to generated displacement when IFF is used, in [m/V].
</p>
<div class="org-src-container">
<pre class="src src-matlab">G_d_est = -5e-6*(2*pi*230)^2/(s^2 + 2*0.3*2*pi*240*s + (2*pi*240)^2);
</pre>
</div>
<div id="org5d992d5" class="figure">
<p><img src="figs/Gd_plant_estimation.png" alt="Gd_plant_estimation.png" />
</p>
<p><span class="figure-number">Figure 8: </span>Estimation of the transfer function from the excitation signal to the generated displacement</p>
</div>
</div>
</div>
<div id="outline-container-orgb35f216" class="outline-4">
<h4 id="orgb35f216"><span class="section-number-4">4.5.3</span> Motion measured during Huddle test</h4>
<div class="outline-text-4" id="text-4-5-3">
<p>
We now compute the PSD of the measured motion by the inertial sensors during the huddle test.
</p>
<div class="org-src-container">
<pre class="src src-matlab">ht = load('./mat/huddle_test.mat', 'd', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 'f_meas', 'u', 't');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">[p_d, f] = pwelch(ht.d, win, [], [], 1/Ts);
[p_acc1, ~] = pwelch(ht.acc_1, win, [], [], 1/Ts);
[p_acc2, ~] = pwelch(ht.acc_2, win, [], [], 1/Ts);
[p_geo1, ~] = pwelch(ht.geo_1, win, [], [], 1/Ts);
[p_geo2, ~] = pwelch(ht.geo_2, win, [], [], 1/Ts);
</pre>
</div>
<p>
Using an estimated model of the sensor dynamics from the documentation of the sensors, we can compute the ASD of the motion in \(m/\sqrt{Hz}\) measured by the sensors.
</p>
<div class="org-src-container">
<pre class="src src-matlab">G_acc = 1/(1 + s/2/pi/2500); % [V/(m/s2)]
G_geo = -120*s^2/(s^2 + 2*0.7*2*pi*2*s + (2*pi*2)^2); % [V/(m/s)]
</pre>
</div>
<div id="org8dac243" class="figure">
<p><img src="figs/huddle_test_psd_motion.png" alt="huddle_test_psd_motion.png" />
</p>
<p><span class="figure-number">Figure 9: </span>ASD of the motion measured by the sensors</p>
</div>
<p>
From the ASD of the motion measured by the sensors, we can create an excitation signal that will generate much motion motion that the motion under no excitation.
</p>
<p>
We create <code>G_exc</code> that corresponds to the wanted generated motion.
</p>
<div class="org-src-container">
<pre class="src src-matlab">G_exc = 0.2e-6/(1 + s/2/pi/2)/(1 + s/2/pi/50);
</pre>
</div>
<p>
And we create a time domain signal <code>y_d</code> that have the spectral density described by <code>G_exc</code>.
</p>
<div class="org-src-container">
<pre class="src src-matlab">Fs = 1/Ts;
t = 0:Ts:180; % Time Vector [s]
u = sqrt(Fs/2)*randn(length(t), 1); % Signal with an ASD equal to one
y_d = lsim(G_exc, u, t);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">[pxx, ~] = pwelch(y_d, win, 0, [], Fs);
</pre>
</div>
<div id="orgc88e114" class="figure">
<p><img src="figs/comp_huddle_test_excited_motion_psd.png" alt="comp_huddle_test_excited_motion_psd.png" />
</p>
<p><span class="figure-number">Figure 10: </span>Comparison of the ASD of the motion during Huddle and the wanted generated motion</p>
</div>
<p>
We can now generate the voltage signal that will generate the wanted motion.
</p>
<div class="org-src-container">
<pre class="src src-matlab">y_v = lsim(G_exc * ... % from unit PSD to shaped PSD
(1 + s/2/pi/50) * ... % Inverse of pre-filter included in the Simulink file
1/G_d_est * ... % Wanted displacement =&gt; required voltage
1/(1 + s/2/pi/5e3), ... % Add some high frequency filtering
u, t);
</pre>
</div>
<div id="org6993d4b" class="figure">
<p><img src="figs/optimal_exc_signal_time.png" alt="optimal_exc_signal_time.png" />
</p>
<p><span class="figure-number">Figure 11: </span>Generated excitation signal</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org5b6add7" class="outline-3">
<h3 id="org5b6add7"><span class="section-number-3">4.6</span> Identification of the Inertial Sensors Dynamics</h3>
<div class="outline-text-3" id="text-4-6">
</div>
<div id="outline-container-org00b0fdd" class="outline-4">
<h4 id="org00b0fdd"><span class="section-number-4">4.6.1</span> Load Data</h4>
<div class="outline-text-4" id="text-4-6-1">
<div class="org-src-container">
<pre class="src src-matlab">id = load('./mat/identification_noise_opt_iff.mat', 'd', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 'f_meas', 'u', 't');
ht = load('./mat/huddle_test.mat', 'd', 'acc_1', 'acc_2', 'geo_1', 'geo_2', 'f_meas', 'u', 't');
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">ht.d = detrend(ht.d, 0);
ht.acc_1 = detrend(ht.acc_1, 0);
ht.acc_2 = detrend(ht.acc_2, 0);
ht.geo_1 = detrend(ht.geo_1, 0);
ht.geo_2 = detrend(ht.geo_2, 0);
ht.f_meas = detrend(ht.f_meas, 0);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">id.d = detrend(id.d, 0);
id.acc_1 = detrend(id.acc_1, 0);
id.acc_2 = detrend(id.acc_2, 0);
id.geo_1 = detrend(id.geo_1, 0);
id.geo_2 = detrend(id.geo_2, 0);
id.f_meas = detrend(id.f_meas, 0);
</pre>
</div>
</div>
</div>
<div id="outline-container-org7eb216e" class="outline-4">
<h4 id="org7eb216e"><span class="section-number-4">4.6.2</span> Compare PSD during Huddle and and during identification</h4>
<div class="outline-text-4" id="text-4-6-2">
<div class="org-src-container">
<pre class="src src-matlab">Ts = ht.t(2) - ht.t(1);
win = hann(ceil(10/Ts));
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">[p_id_d, f] = pwelch(id.d, win, [], [], 1/Ts);
[p_id_acc1, ~] = pwelch(id.acc_1, win, [], [], 1/Ts);
[p_id_acc2, ~] = pwelch(id.acc_2, win, [], [], 1/Ts);
[p_id_geo1, ~] = pwelch(id.geo_1, win, [], [], 1/Ts);
[p_id_geo2, ~] = pwelch(id.geo_2, win, [], [], 1/Ts);
[p_id_fmeas, ~] = pwelch(id.f_meas, win, [], [], 1/Ts);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">[p_ht_d, ~] = pwelch(ht.d, win, [], [], 1/Ts);
[p_ht_acc1, ~] = pwelch(ht.acc_1, win, [], [], 1/Ts);
[p_ht_acc2, ~] = pwelch(ht.acc_2, win, [], [], 1/Ts);
[p_ht_geo1, ~] = pwelch(ht.geo_1, win, [], [], 1/Ts);
[p_ht_geo2, ~] = pwelch(ht.geo_2, win, [], [], 1/Ts);
[p_ht_fmeas, ~] = pwelch(ht.f_meas, win, [], [], 1/Ts);
</pre>
</div>
<div id="orgc6b8899" class="figure">
<p><img src="figs/comp_psd_huddle_test_identification.png" alt="comp_psd_huddle_test_identification.png" />
</p>
<p><span class="figure-number">Figure 12: </span>Comparison of the PSD of the measured motion during the Huddle test and during the identification</p>
</div>
</div>
</div>
<div id="outline-container-org9e50b3e" class="outline-4">
<h4 id="org9e50b3e"><span class="section-number-4">4.6.3</span> Compute transfer functions</h4>
<div class="outline-text-4" id="text-4-6-3">
<div class="org-src-container">
<pre class="src src-matlab">[tf_acc1_est, f] = tfestimate(id.d, id.acc_1, win, [], [], 1/Ts);
[co_acc1_est, ~] = mscohere( id.d, id.acc_1, win, [], [], 1/Ts);
[tf_acc2_est, ~] = tfestimate(id.d, id.acc_2, win, [], [], 1/Ts);
[co_acc2_est, ~] = mscohere( id.d, id.acc_2, win, [], [], 1/Ts);
[tf_geo1_est, ~] = tfestimate(id.d, id.geo_1, win, [], [], 1/Ts);
[co_geo1_est, ~] = mscohere( id.d, id.geo_1, win, [], [], 1/Ts);
[tf_geo2_est, ~] = tfestimate(id.d, id.geo_2, win, [], [], 1/Ts);
[co_geo2_est, ~] = mscohere( id.d, id.geo_2, win, [], [], 1/Ts);
</pre>
</div>
<div id="org717ec64" class="figure">
<p><img src="figs/id_sensor_dynamics_coherence.png" alt="id_sensor_dynamics_coherence.png" />
</p>
<p><span class="figure-number">Figure 13: </span>Coherence for the estimation of the sensor dynamics</p>
</div>
<p>
Model of the inertial sensors:
</p>
<div class="org-src-container">
<pre class="src src-matlab">G_acc = 1/(1 + s/2/pi/2500); % [V/(m/s2)]
G_geo = -1200*s^2/(s^2 + 2*0.7*2*pi*2*s + (2*pi*2)^2); % [[V/(m/s)]
</pre>
</div>
<div id="org1eddb61" class="figure">
<p><img src="figs/id_sensor_dynamics_accelerometers.png" alt="id_sensor_dynamics_accelerometers.png" />
</p>
<p><span class="figure-number">Figure 14: </span>Identified dynamics of the accelerometers</p>
</div>
<div id="org5b7e09e" class="figure">
<p><img src="figs/id_sensor_dynamics_geophones.png" alt="id_sensor_dynamics_geophones.png" />
</p>
<p><span class="figure-number">Figure 15: </span>Identified dynamics of the geophones</p>
</div>
</div>
</div>
</div>
<div id="outline-container-org12ea408" class="outline-3">
<h3 id="org12ea408"><span class="section-number-3">4.7</span> Compare Time domain Estimation of the displacement</h3>
<div class="outline-text-3" id="text-4-7">
<p>
Let&rsquo;s compare the measured accelerations instead of displacement (no integration).
</p>
<div class="org-src-container">
<pre class="src src-matlab">G_lpf = 1/(1 + s/2/pi/5e3);
acc1_a = lsim(1/G_acc*G_lpf, id.acc_1, id.t);
acc2_a = lsim(1/G_acc*G_lpf, id.acc_2, id.t);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">geo1_a = lsim(1/G_geo*s*G_lpf, id.geo_1, id.t);
geo2_a = lsim(1/G_geo*s*G_lpf, id.geo_2, id.t);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">int_a = lsim(s^2*G_lpf*G_lpf, id.d, id.t);
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">figure;
hold on;
plot(id.t, int_a);
plot(id.t, acc1_a);
plot(id.t, acc2_a);
plot(id.t, geo1_a);
plot(id.t, geo2_a);
hold off;
xlabel('Time [s]'); ylabel('Acceleration [m]');
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2020-09-09 mer. 20:38</p>
<p class="date">Created: 2020-08-31 lun. 16:09</p>
</div>
</body>
</html>

1087
index.org

File diff suppressed because it is too large Load Diff

BIN
test-bench.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

312
test-bench.svg Normal file
View File

@ -0,0 +1,312 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="108"
inkscape:export-xdpi="108"
inkscape:export-filename="/home/thomas/Cloud/thesis/matlab/sensor-fusion-test-bench/test-bench.png"
sodipodi:docname="test-bench.svg"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
id="svg8"
version="1.1"
viewBox="0 0 210 297"
height="297mm"
width="210mm">
<defs
id="defs2">
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker1394"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Send">
<path
transform="scale(0.2) rotate(180) translate(6,0)"
style="fill-rule:evenodd;stroke:#eb0000;stroke-width:1pt;stroke-opacity:1;fill:#eb0000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path1392" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="Arrow2Send"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow2Send">
<path
transform="scale(0.3) rotate(180) translate(-2.3,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"
id="path938" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="Arrow1Send"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Send">
<path
transform="scale(0.2) rotate(180) translate(6,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path920" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Lstart"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Lstart">
<path
transform="scale(0.8) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path905" />
</marker>
<marker
inkscape:stockid="Arrow2Send"
orient="auto"
refY="0"
refX="0"
id="Arrow2Send-7"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path938-5"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
</marker>
</defs>
<sodipodi:namedview
inkscape:window-maximized="1"
inkscape:window-y="39"
inkscape:window-x="12"
inkscape:window-height="1389"
inkscape:window-width="2536"
showgrid="false"
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="232.14066"
inkscape:cx="274.19593"
inkscape:zoom="2.8"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<path
id="path1390"
d="m 86.233168,67.064951 h 5.344007"
style="fill:none;stroke:#eb0000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-mid:url(#marker1394)" />
<rect
y="67.901093"
x="35.715916"
height="5.5735803"
width="48.913738"
id="rect833"
style="fill:#d8d8d8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000" />
<rect
y="59.588459"
x="50.793346"
height="8.2311792"
width="6.3454618"
id="rect835"
style="fill:#bbbbbb;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000" />
<rect
style="fill:#bbbbbb;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000"
id="rect835-3"
width="6.3454623"
height="8.2311792"
x="62.511879"
y="59.546967" />
<rect
y="26.52281"
x="17.099209"
height="7.1745605"
width="83.539795"
id="rect852"
style="fill:#5a5a5a;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000;fill-opacity:1" />
<rect
y="33.697372"
x="17.099209"
height="49.630802"
width="7.3197799"
id="rect854"
style="fill:#5a5a5a;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000;fill-opacity:1" />
<rect
style="fill:#5a5a5a;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000;fill-opacity:1"
id="rect854-6"
width="7.3197799"
height="49.630806"
x="93.319229"
y="33.697372" />
<rect
y="83.328171"
x="17.099209"
height="16.419174"
width="83.558167"
id="rect871"
style="fill:#5a5a5a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000" />
<path
sodipodi:nodetypes="cc"
id="path875"
d="M 35.715915,67.901092 V 33.639316"
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path877"
d="M 84.629655,67.901092 V 33.774395"
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="64.371132"
x="25.477324"
height="18.957037"
width="7.4897947"
id="rect879"
style="fill:#c0c0c0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000" />
<rect
y="69.946327"
x="32.984653"
height="1.2197647"
width="2.697495"
id="rect881"
style="fill:#c0c0c0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stop-color:#000000" />
<text
id="text885"
y="71.906921"
x="48.826237"
style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
xml:space="preserve"><tspan
style="font-size:4.93889px;stroke-width:0.264583"
y="71.906921"
x="48.826237"
id="tspan883"
sodipodi:role="line">Rigid Plate</tspan></text>
<text
transform="rotate(-90)"
id="text889"
y="30.73103"
x="-80.921989"
style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
xml:space="preserve"><tspan
style="font-size:4.93889px;stroke-width:0.264583"
y="30.73103"
x="-80.921989"
id="tspan887"
sodipodi:role="line">Shaker</tspan></text>
<text
id="text893"
y="52.432152"
x="61.281872"
style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
xml:space="preserve"><tspan
style="font-size:4.93889px;text-align:center;text-anchor:middle;stroke-width:0.264583"
y="52.432152"
x="61.281872"
id="tspan891"
sodipodi:role="line">Horizontal</tspan><tspan
id="tspan1526"
style="font-size:4.93889px;text-align:center;text-anchor:middle;stroke-width:0.264583"
y="58.605762"
x="61.281872"
sodipodi:role="line">Inertial Sensors</tspan></text>
<text
id="text897"
y="93.630379"
x="50.950893"
style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
xml:space="preserve"><tspan
style="font-size:4.93889px;stroke-width:0.264583"
y="93.630379"
x="50.950893"
id="tspan895"
sodipodi:role="line">Granite</tspan></text>
<text
id="text901"
y="42.773598"
x="42.221359"
style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
xml:space="preserve"><tspan
style="font-size:4.93889px;stroke-width:0.264583"
y="42.773598"
x="42.221359"
id="tspan899"
sodipodi:role="line">Wire / Suspension</tspan></text>
<path
id="path903"
d="M 41.931502,41.750186 36.18612,44.742367"
style="fill:none;stroke:#000000;stroke-width:0.265112;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Send)" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#000000;stroke-width:0.265112;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Send-7)"
d="m 79.231465,41.628323 4.805527,2.992181"
id="path903-3" />
<text
id="text1336"
y="31.073969"
x="52.767097"
style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
xml:space="preserve"><tspan
style="font-size:4.93889px;stroke-width:0.264583"
y="31.073969"
x="52.767097"
id="tspan1334"
sodipodi:role="line">Gantry</tspan></text>
<rect
y="64.425697"
x="91.557747"
height="6.2219667"
width="1.6990991"
id="rect1386"
style="fill:#26618e;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.265;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000" />
<rect
y="66.339363"
x="81.804291"
height="1.5354908"
width="4.4204054"
id="rect1388"
style="fill:#26618e;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.264999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000" />
<text
id="text1524"
y="68.345154"
x="101.04992"
style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
xml:space="preserve"><tspan
style="font-size:4.93889px;stroke-width:0.264583"
y="68.345154"
x="101.04992"
id="tspan1522"
sodipodi:role="line">Interferometer</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB