Compare commits
No commits in common. "3a8762ae9a3f0769a3224062f410e94bc6f9f38d" and "e3d6df852e3d705443f56ebee885062b0bbceb83" have entirely different histories.
3a8762ae9a
...
e3d6df852e
Before Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 101 KiB |
Before Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 2.9 MiB |
Before Width: | Height: | Size: 2.9 MiB |
Before Width: | Height: | Size: 197 KiB |
Before Width: | Height: | Size: 332 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 192 KiB |
Before Width: | Height: | Size: 167 KiB |
Before Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 125 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 232 KiB |
Before Width: | Height: | Size: 206 KiB |
Before Width: | Height: | Size: 27 KiB |
890
index.html
@ -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"> </th>
|
||||
<th scope="col" class="org-left"> </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">> 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’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’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’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’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’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 => 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’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>
|
||||
|
BIN
test-bench.png
Normal file
After Width: | Height: | Size: 17 KiB |
312
test-bench.svg
Normal 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 |