Update analysis => FRF in the global frame
BIN
modal-analysis/figs/aligned_accelerometers.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
modal-analysis/figs/all_coherence.png
Normal file
After Width: | Height: | Size: 114 KiB |
BIN
modal-analysis/figs/compare_acc_x_dir.png
Normal file
After Width: | Height: | Size: 272 KiB |
BIN
modal-analysis/figs/compare_acc_y_dir.png
Normal file
After Width: | Height: | Size: 289 KiB |
BIN
modal-analysis/figs/frf_all_bodies_one_direction.png
Normal file
After Width: | Height: | Size: 238 KiB |
BIN
modal-analysis/figs/frf_one_body_all_directions.png
Normal file
After Width: | Height: | Size: 239 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 20 KiB |
BIN
modal-analysis/figs/recovered_frf_comparison_hexa.png
Normal file
After Width: | Height: | Size: 254 KiB |
BIN
modal-analysis/figs/recovered_frf_comparison_ty.png
Normal file
After Width: | Height: | Size: 267 KiB |
BIN
modal-analysis/figs/relative_motion_comparison.png
Normal file
After Width: | Height: | Size: 298 KiB |
784
modal-analysis/frf_processing.html
Normal file
@ -0,0 +1,784 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||||
|
<head>
|
||||||
|
<!-- 2019-07-05 ven. 10:16 -->
|
||||||
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<title>Modal Analysis - Processing of FRF</title>
|
||||||
|
<meta name="generator" content="Org mode" />
|
||||||
|
<meta name="author" content="Dehaeze Thomas" />
|
||||||
|
<style type="text/css">
|
||||||
|
<!--/*--><![CDATA[/*><!--*/
|
||||||
|
.title { text-align: center;
|
||||||
|
margin-bottom: .2em; }
|
||||||
|
.subtitle { text-align: center;
|
||||||
|
font-size: medium;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top:0; }
|
||||||
|
.todo { font-family: monospace; color: red; }
|
||||||
|
.done { font-family: monospace; color: green; }
|
||||||
|
.priority { font-family: monospace; color: orange; }
|
||||||
|
.tag { background-color: #eee; font-family: monospace;
|
||||||
|
padding: 2px; font-size: 80%; font-weight: normal; }
|
||||||
|
.timestamp { color: #bebebe; }
|
||||||
|
.timestamp-kwd { color: #5f9ea0; }
|
||||||
|
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
|
||||||
|
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
|
||||||
|
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
|
||||||
|
.underline { text-decoration: underline; }
|
||||||
|
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
|
||||||
|
p.verse { margin-left: 3%; }
|
||||||
|
pre {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
box-shadow: 3px 3px 3px #eee;
|
||||||
|
padding: 8pt;
|
||||||
|
font-family: monospace;
|
||||||
|
overflow: auto;
|
||||||
|
margin: 1.2em;
|
||||||
|
}
|
||||||
|
pre.src {
|
||||||
|
position: relative;
|
||||||
|
overflow: visible;
|
||||||
|
padding-top: 1.2em;
|
||||||
|
}
|
||||||
|
pre.src:before {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
background-color: white;
|
||||||
|
top: -10px;
|
||||||
|
right: 10px;
|
||||||
|
padding: 3px;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
pre.src:hover:before { display: inline;}
|
||||||
|
/* Languages per Org manual */
|
||||||
|
pre.src-asymptote:before { content: 'Asymptote'; }
|
||||||
|
pre.src-awk:before { content: 'Awk'; }
|
||||||
|
pre.src-C:before { content: 'C'; }
|
||||||
|
/* pre.src-C++ doesn't work in CSS */
|
||||||
|
pre.src-clojure:before { content: 'Clojure'; }
|
||||||
|
pre.src-css:before { content: 'CSS'; }
|
||||||
|
pre.src-D:before { content: 'D'; }
|
||||||
|
pre.src-ditaa:before { content: 'ditaa'; }
|
||||||
|
pre.src-dot:before { content: 'Graphviz'; }
|
||||||
|
pre.src-calc:before { content: 'Emacs Calc'; }
|
||||||
|
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
|
||||||
|
pre.src-fortran:before { content: 'Fortran'; }
|
||||||
|
pre.src-gnuplot:before { content: 'gnuplot'; }
|
||||||
|
pre.src-haskell:before { content: 'Haskell'; }
|
||||||
|
pre.src-hledger:before { content: 'hledger'; }
|
||||||
|
pre.src-java:before { content: 'Java'; }
|
||||||
|
pre.src-js:before { content: 'Javascript'; }
|
||||||
|
pre.src-latex:before { content: 'LaTeX'; }
|
||||||
|
pre.src-ledger:before { content: 'Ledger'; }
|
||||||
|
pre.src-lisp:before { content: 'Lisp'; }
|
||||||
|
pre.src-lilypond:before { content: 'Lilypond'; }
|
||||||
|
pre.src-lua:before { content: 'Lua'; }
|
||||||
|
pre.src-matlab:before { content: 'MATLAB'; }
|
||||||
|
pre.src-mscgen:before { content: 'Mscgen'; }
|
||||||
|
pre.src-ocaml:before { content: 'Objective Caml'; }
|
||||||
|
pre.src-octave:before { content: 'Octave'; }
|
||||||
|
pre.src-org:before { content: 'Org mode'; }
|
||||||
|
pre.src-oz:before { content: 'OZ'; }
|
||||||
|
pre.src-plantuml:before { content: 'Plantuml'; }
|
||||||
|
pre.src-processing:before { content: 'Processing.js'; }
|
||||||
|
pre.src-python:before { content: 'Python'; }
|
||||||
|
pre.src-R:before { content: 'R'; }
|
||||||
|
pre.src-ruby:before { content: 'Ruby'; }
|
||||||
|
pre.src-sass:before { content: 'Sass'; }
|
||||||
|
pre.src-scheme:before { content: 'Scheme'; }
|
||||||
|
pre.src-screen:before { content: 'Gnu Screen'; }
|
||||||
|
pre.src-sed:before { content: 'Sed'; }
|
||||||
|
pre.src-sh:before { content: 'shell'; }
|
||||||
|
pre.src-sql:before { content: 'SQL'; }
|
||||||
|
pre.src-sqlite:before { content: 'SQLite'; }
|
||||||
|
/* additional languages in org.el's org-babel-load-languages alist */
|
||||||
|
pre.src-forth:before { content: 'Forth'; }
|
||||||
|
pre.src-io:before { content: 'IO'; }
|
||||||
|
pre.src-J:before { content: 'J'; }
|
||||||
|
pre.src-makefile:before { content: 'Makefile'; }
|
||||||
|
pre.src-maxima:before { content: 'Maxima'; }
|
||||||
|
pre.src-perl:before { content: 'Perl'; }
|
||||||
|
pre.src-picolisp:before { content: 'Pico Lisp'; }
|
||||||
|
pre.src-scala:before { content: 'Scala'; }
|
||||||
|
pre.src-shell:before { content: 'Shell Script'; }
|
||||||
|
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
|
||||||
|
/* additional language identifiers per "defun org-babel-execute"
|
||||||
|
in ob-*.el */
|
||||||
|
pre.src-cpp:before { content: 'C++'; }
|
||||||
|
pre.src-abc:before { content: 'ABC'; }
|
||||||
|
pre.src-coq:before { content: 'Coq'; }
|
||||||
|
pre.src-groovy:before { content: 'Groovy'; }
|
||||||
|
/* additional language identifiers from org-babel-shell-names in
|
||||||
|
ob-shell.el: ob-shell is the only babel language using a lambda to put
|
||||||
|
the execution function name together. */
|
||||||
|
pre.src-bash:before { content: 'bash'; }
|
||||||
|
pre.src-csh:before { content: 'csh'; }
|
||||||
|
pre.src-ash:before { content: 'ash'; }
|
||||||
|
pre.src-dash:before { content: 'dash'; }
|
||||||
|
pre.src-ksh:before { content: 'ksh'; }
|
||||||
|
pre.src-mksh:before { content: 'mksh'; }
|
||||||
|
pre.src-posh:before { content: 'posh'; }
|
||||||
|
/* Additional Emacs modes also supported by the LaTeX listings package */
|
||||||
|
pre.src-ada:before { content: 'Ada'; }
|
||||||
|
pre.src-asm:before { content: 'Assembler'; }
|
||||||
|
pre.src-caml:before { content: 'Caml'; }
|
||||||
|
pre.src-delphi:before { content: 'Delphi'; }
|
||||||
|
pre.src-html:before { content: 'HTML'; }
|
||||||
|
pre.src-idl:before { content: 'IDL'; }
|
||||||
|
pre.src-mercury:before { content: 'Mercury'; }
|
||||||
|
pre.src-metapost:before { content: 'MetaPost'; }
|
||||||
|
pre.src-modula-2:before { content: 'Modula-2'; }
|
||||||
|
pre.src-pascal:before { content: 'Pascal'; }
|
||||||
|
pre.src-ps:before { content: 'PostScript'; }
|
||||||
|
pre.src-prolog:before { content: 'Prolog'; }
|
||||||
|
pre.src-simula:before { content: 'Simula'; }
|
||||||
|
pre.src-tcl:before { content: 'tcl'; }
|
||||||
|
pre.src-tex:before { content: 'TeX'; }
|
||||||
|
pre.src-plain-tex:before { content: 'Plain TeX'; }
|
||||||
|
pre.src-verilog:before { content: 'Verilog'; }
|
||||||
|
pre.src-vhdl:before { content: 'VHDL'; }
|
||||||
|
pre.src-xml:before { content: 'XML'; }
|
||||||
|
pre.src-nxml:before { content: 'XML'; }
|
||||||
|
/* add a generic configuration mode; LaTeX export needs an additional
|
||||||
|
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
|
||||||
|
pre.src-conf:before { content: 'Configuration File'; }
|
||||||
|
|
||||||
|
table { border-collapse:collapse; }
|
||||||
|
caption.t-above { caption-side: top; }
|
||||||
|
caption.t-bottom { caption-side: bottom; }
|
||||||
|
td, th { vertical-align:top; }
|
||||||
|
th.org-right { text-align: center; }
|
||||||
|
th.org-left { text-align: center; }
|
||||||
|
th.org-center { text-align: center; }
|
||||||
|
td.org-right { text-align: right; }
|
||||||
|
td.org-left { text-align: left; }
|
||||||
|
td.org-center { text-align: center; }
|
||||||
|
dt { font-weight: bold; }
|
||||||
|
.footpara { display: inline; }
|
||||||
|
.footdef { margin-bottom: 1em; }
|
||||||
|
.figure { padding: 1em; }
|
||||||
|
.figure p { text-align: center; }
|
||||||
|
.equation-container {
|
||||||
|
display: table;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.equation {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.equation-label {
|
||||||
|
display: table-cell;
|
||||||
|
text-align: right;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.inlinetask {
|
||||||
|
padding: 10px;
|
||||||
|
border: 2px solid gray;
|
||||||
|
margin: 10px;
|
||||||
|
background: #ffffcc;
|
||||||
|
}
|
||||||
|
#org-div-home-and-up
|
||||||
|
{ text-align: right; font-size: 70%; white-space: nowrap; }
|
||||||
|
textarea { overflow-x: auto; }
|
||||||
|
.linenr { font-size: smaller }
|
||||||
|
.code-highlighted { background-color: #ffff00; }
|
||||||
|
.org-info-js_info-navigation { border-style: none; }
|
||||||
|
#org-info-js_console-label
|
||||||
|
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
|
||||||
|
.org-info-js_search-highlight
|
||||||
|
{ background-color: #ffff00; color: #000000; font-weight: bold; }
|
||||||
|
.org-svg { width: 90%; }
|
||||||
|
/*]]>*/-->
|
||||||
|
</style>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="../css/zenburn.css"/>
|
||||||
|
<script type="text/javascript" src="../js/jquery.min.js"></script>
|
||||||
|
<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 type="text/javascript">
|
||||||
|
/*
|
||||||
|
@licstart The following is the entire license notice for the
|
||||||
|
JavaScript code in this tag.
|
||||||
|
|
||||||
|
Copyright (C) 2012-2019 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
The JavaScript code in this tag is free software: you can
|
||||||
|
redistribute it and/or modify it under the terms of the GNU
|
||||||
|
General Public License (GNU GPL) as published by the Free Software
|
||||||
|
Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version. The code is distributed WITHOUT ANY WARRANTY;
|
||||||
|
without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
|
||||||
|
|
||||||
|
As additional permission under GNU GPL version 3 section 7, you
|
||||||
|
may distribute non-source (e.g., minimized or compacted) forms of
|
||||||
|
that code without the copy of the GNU GPL normally required by
|
||||||
|
section 4, provided you include this license notice and a URL
|
||||||
|
through which recipients can access the Corresponding Source.
|
||||||
|
|
||||||
|
|
||||||
|
@licend The above is the entire license notice
|
||||||
|
for the JavaScript code in this tag.
|
||||||
|
*/
|
||||||
|
<!--/*--><![CDATA[/*><!--*/
|
||||||
|
function CodeHighlightOn(elem, id)
|
||||||
|
{
|
||||||
|
var target = document.getElementById(id);
|
||||||
|
if(null != target) {
|
||||||
|
elem.cacheClassElem = elem.className;
|
||||||
|
elem.cacheClassTarget = target.className;
|
||||||
|
target.className = "code-highlighted";
|
||||||
|
elem.className = "code-highlighted";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function CodeHighlightOff(elem, id)
|
||||||
|
{
|
||||||
|
var target = document.getElementById(id);
|
||||||
|
if(elem.cacheClassElem)
|
||||||
|
elem.className = elem.cacheClassElem;
|
||||||
|
if(elem.cacheClassTarget)
|
||||||
|
target.className = elem.cacheClassTarget;
|
||||||
|
}
|
||||||
|
/*]]>*///-->
|
||||||
|
</script>
|
||||||
|
<script type="text/x-mathjax-config">
|
||||||
|
MathJax.Hub.Config({
|
||||||
|
displayAlign: "center",
|
||||||
|
displayIndent: "0em",
|
||||||
|
|
||||||
|
"HTML-CSS": { scale: 100,
|
||||||
|
linebreaks: { automatic: "false" },
|
||||||
|
webFont: "TeX"
|
||||||
|
},
|
||||||
|
SVG: {scale: 100,
|
||||||
|
linebreaks: { automatic: "false" },
|
||||||
|
font: "TeX"},
|
||||||
|
NativeMML: {scale: 100},
|
||||||
|
TeX: { equationNumbers: {autoNumber: "AMS"},
|
||||||
|
MultLineWidth: "85%",
|
||||||
|
TagSide: "right",
|
||||||
|
TagIndent: ".8em"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="org-div-home-and-up">
|
||||||
|
<a accesskey="h" href="./index.html"> UP </a>
|
||||||
|
|
|
||||||
|
<a accesskey="H" href="../index.html"> HOME </a>
|
||||||
|
</div><div id="content">
|
||||||
|
<h1 class="title">Modal Analysis - Processing of FRF</h1>
|
||||||
|
<div id="table-of-contents">
|
||||||
|
<h2>Table of Contents</h2>
|
||||||
|
<div id="text-table-of-contents">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#orgd95e287">1. Importation of measured FRF curves</a></li>
|
||||||
|
<li><a href="#org0649187">2. From accelerometer DOFs to solid body DOFs - Mathematics</a></li>
|
||||||
|
<li><a href="#orgbfc68dd">3. What reference frame to choose?</a></li>
|
||||||
|
<li><a href="#org5d9a38b">4. From accelerometer DOFs to solid body DOFs - Matlab Implementation</a></li>
|
||||||
|
<li><a href="#orgbb81ded">5. Analysis of some FRF in the global coordinates</a></li>
|
||||||
|
<li><a href="#orgb0c1df8">6. <span class="todo TODO">TODO</span> How to compare the relative motion of solid bodies</a></li>
|
||||||
|
<li><a href="#org9c93ccf">7. Relative Motion in the global coordinates</a></li>
|
||||||
|
<li><a href="#org7803dae">8. <span class="todo TODO">TODO</span> Compare original FRF measurements to transformed FRF in the global frame</a></li>
|
||||||
|
<li><a href="#org45fdd6c">9. Verify that we find the original FRF from the FRF in the global coordinates</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The measurements have been conducted and we have computed the \(n \times p \times q\) Frequency Response Functions Matrix with:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li>\(n\): the number of measurements: \(23 \times 3 = 69\) (23 accelerometers measuring 3 directions each)</li>
|
||||||
|
<li>\(p\): the number of excitation inputs: \(3\)</li>
|
||||||
|
<li>\(q\): the number of frequency points \(\omega_i\)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
However, in our model, we only consider 6 solid bodies, namely:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li>Bottom Granite</li>
|
||||||
|
<li>Top Granite</li>
|
||||||
|
<li>Translation Stage</li>
|
||||||
|
<li>Tilt Stage</li>
|
||||||
|
<li>Spindle</li>
|
||||||
|
<li>Hexapod</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Thus, we are only interested in \(6 \times 6 = 36\) degrees of freedom.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We here process the FRF matrix to go from the 69 measured DOFs to the wanted 36 DOFs.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div id="outline-container-orgd95e287" class="outline-2">
|
||||||
|
<h2 id="orgd95e287"><span class="section-number-2">1</span> Importation of measured FRF curves</h2>
|
||||||
|
<div class="outline-text-2" id="text-1">
|
||||||
|
<p>
|
||||||
|
We load the measured FRF and Coherence matrices.
|
||||||
|
We also load the geometric parameters of the station: solid bodies considered and the position of the accelerometers.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/geometry.mat', 'solids', 'solid_names', 'acc_pos'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org0649187" class="outline-2">
|
||||||
|
<h2 id="org0649187"><span class="section-number-2">2</span> From accelerometer DOFs to solid body DOFs - Mathematics</h2>
|
||||||
|
<div class="outline-text-2" id="text-2">
|
||||||
|
<p>
|
||||||
|
Let's consider the schematic shown on figure <a href="#org0345801">1</a> where we are measuring the motion of a (supposed) solid body at 4 distinct points in x-y-z.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The goal here is to link these \(4 \times 3 = 12\) measurements to the 6 DOFs of the solid body expressed in the frame \(\{O\}\).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="org0345801" class="figure">
|
||||||
|
<p><img src="figs/local_to_global_coordinates.png" alt="local_to_global_coordinates.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 1: </span>Schematic of the measured motions of a solid body</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
From the figure <a href="#org0345801">1</a>, we can write:
|
||||||
|
</p>
|
||||||
|
\begin{align*}
|
||||||
|
\vec{v}_1 &= \vec{v} + \Omega \vec{p}_1\\
|
||||||
|
\vec{v}_2 &= \vec{v} + \Omega \vec{p}_2\\
|
||||||
|
\vec{v}_3 &= \vec{v} + \Omega \vec{p}_3\\
|
||||||
|
\vec{v}_4 &= \vec{v} + \Omega \vec{p}_4
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
With
|
||||||
|
</p>
|
||||||
|
\begin{equation}
|
||||||
|
\Omega = \begin{bmatrix}
|
||||||
|
0 & -\Omega_z & \Omega_y \\
|
||||||
|
\Omega_z & 0 & -\Omega_x \\
|
||||||
|
-\Omega_y & \Omega_x & 0
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
<p>
|
||||||
|
\(\vec{v}\) and \(\Omega\) represent to velocity and rotation of the solid expressed in the frame \(\{O\}\).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We can rearrange the equations in a matrix form:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\left[\begin{array}{ccc|ccc}
|
||||||
|
1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
|
||||||
|
0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
|
||||||
|
0 & 0 & 1 & p_{1y} & -p_{1x} & 0 \\ \hline
|
||||||
|
& \vdots & & & \vdots & \\ \hline
|
||||||
|
1 & 0 & 0 & 0 & p_{4z} & -p_{4y} \\
|
||||||
|
0 & 1 & 0 & -p_{4z} & 0 & p_{4x} \\
|
||||||
|
0 & 0 & 1 & p_{4y} & -p_{4x} & 0
|
||||||
|
\end{array}\right] \begin{bmatrix}
|
||||||
|
v_x \\ v_y \\ v_z \\ \hline \Omega_x \\ \Omega_y \\ \Omega_z
|
||||||
|
\end{bmatrix} = \begin{bmatrix}
|
||||||
|
v_{1x} \\ v_{1y} \\ v_{1z} \\\hline \vdots \\\hline v_{4x} \\ v_{4y} \\ v_{4z}
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
and then we obtain the velocity and rotation of the solid in the wanted frame \(\{O\}\):
|
||||||
|
</p>
|
||||||
|
\begin{equation}
|
||||||
|
\begin{bmatrix}
|
||||||
|
v_x \\ v_y \\ v_z \\ \hline \Omega_x \\ \Omega_y \\ \Omega_z
|
||||||
|
\end{bmatrix} =
|
||||||
|
\left[\begin{array}{ccc|ccc}
|
||||||
|
1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
|
||||||
|
0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
|
||||||
|
0 & 0 & 1 & p_{1y} & -p_{1x} & 0 \\ \hline
|
||||||
|
& \vdots & & & \vdots & \\ \hline
|
||||||
|
1 & 0 & 0 & 0 & p_{4z} & -p_{4y} \\
|
||||||
|
0 & 1 & 0 & -p_{4z} & 0 & p_{4x} \\
|
||||||
|
0 & 0 & 1 & p_{4y} & -p_{4x} & 0
|
||||||
|
\end{array}\right]^{-1} \begin{bmatrix}
|
||||||
|
v_{1x} \\ v_{1y} \\ v_{1z} \\\hline \vdots \\\hline v_{4x} \\ v_{4y} \\ v_{4z}
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This inversion is equivalent to resolving a mean square problem.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-orgbfc68dd" class="outline-2">
|
||||||
|
<h2 id="orgbfc68dd"><span class="section-number-2">3</span> What reference frame to choose?</h2>
|
||||||
|
<div class="outline-text-2" id="text-3">
|
||||||
|
<p>
|
||||||
|
The question we wish here to answer is how to choose the reference frame \(\{O\}\) in which the DOFs of the solid bodies are defined.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The goal is to compare the motion of each solid body to see which relative DOFs between solid bodies can be neglected, that is to say, which joint between solid bodies can be regarded as perfect (and this in all the frequency range of interest).
|
||||||
|
Ideally, we would like to have the same number of degrees of freedom than the number of identified modes.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The possibles choices are:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li><b>One frame for each solid body</b> which is located at its center of mass</li>
|
||||||
|
<li><b>One common frame</b>, for instance located at the point of interest (\(270mm\) above the Hexapod)</li>
|
||||||
|
<li><b>Base located at the joint position</b>: this is where we want to see the motion and estimate stiffness</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<table id="org6509a46" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||||
|
<caption class="t-above"><span class="table-number">Table 1:</span> Advantages and disadvantages for the choice of reference frame</caption>
|
||||||
|
|
||||||
|
<colgroup>
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-left" />
|
||||||
|
|
||||||
|
<col class="org-left" />
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col" class="org-left">Chosen Frame</th>
|
||||||
|
<th scope="col" class="org-left">Advantages</th>
|
||||||
|
<th scope="col" class="org-left">Disadvantages</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">Frames at CoM</td>
|
||||||
|
<td class="org-left">Physically, it makes more sense</td>
|
||||||
|
<td class="org-left">How to compare the motion of the solid bodies?</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">Common Frame</td>
|
||||||
|
<td class="org-left">We can compare the motion of each solid body</td>
|
||||||
|
<td class="org-left">Small \(\theta_{x, y}\) may result in large \(T_{x, y}\)</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="org-left">Frames at joint position</td>
|
||||||
|
<td class="org-left">Directly gives which joint direction can be blocked</td>
|
||||||
|
<td class="org-left">How to choose the joint position?</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
As the easiest choice is to choose a common frame, we start with that solution.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org5d9a38b" class="outline-2">
|
||||||
|
<h2 id="org5d9a38b"><span class="section-number-2">4</span> From accelerometer DOFs to solid body DOFs - Matlab Implementation</h2>
|
||||||
|
<div class="outline-text-2" id="text-4">
|
||||||
|
<p>
|
||||||
|
First, we initialize a new FRF matrix <code>FRFs_O</code> which is an \(n \times p \times q\) with:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li>\(n\) is the number of DOFs of the considered 6 solid-bodies: \(6 \times 6 = 36\)</li>
|
||||||
|
<li>\(p\) is the number of excitation inputs: \(3\)</li>
|
||||||
|
<li>\(q\) is the number of frequency points \(\omega_i\)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">FRFs_O = zeros<span class="org-rainbow-delimiters-depth-1">(</span>length<span class="org-rainbow-delimiters-depth-2">(</span>solid_names<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span>, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">801</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Then, as we know the positions of the accelerometers on each solid body, and we have the response of those accelerometers, we can use the equations derived in the previous section to determine the response of each solid body expressed in the frame \(\{O\}\).
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab"><span class="org-keyword">for</span> <span class="org-variable-name">solid_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solid_names</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
||||||
|
solids_i = solids.<span class="org-rainbow-delimiters-depth-1">(</span>solid_names<span class="org-rainbow-delimiters-depth-2">{</span>solid_i<span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
|
||||||
|
A = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span>length<span class="org-rainbow-delimiters-depth-2">(</span>solids_i<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solids_i</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
||||||
|
acc_i = solids_i<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
|
||||||
|
A<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">1</span><span class="org-type">:</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span> = eye<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
A<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">4</span><span class="org-type">:</span><span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span> = <span class="org-rainbow-delimiters-depth-1">[</span> <span class="org-highlight-numbers-number">0</span> acc_pos<span class="org-rainbow-delimiters-depth-2">(</span>acc_i, <span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">-</span>acc_pos<span class="org-rainbow-delimiters-depth-2">(</span>acc_i, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span> ;
|
||||||
|
<span class="org-type">-</span>acc_pos<span class="org-rainbow-delimiters-depth-2">(</span>acc_i, <span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-highlight-numbers-number">0</span> acc_pos<span class="org-rainbow-delimiters-depth-2">(</span>acc_i, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span> ;
|
||||||
|
acc_pos<span class="org-rainbow-delimiters-depth-2">(</span>acc_i, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">-</span>acc_pos<span class="org-rainbow-delimiters-depth-2">(</span>acc_i, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">exc_dir</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">3</span></span>
|
||||||
|
FRFs_O<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span>solid_i<span class="org-type">*</span><span class="org-highlight-numbers-number">6</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span> = A<span class="org-type">\</span>squeeze<span class="org-rainbow-delimiters-depth-1">(</span>FRFs<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span>solids_i<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">3</span><span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span>solids_i<span class="org-rainbow-delimiters-depth-3">(</span>end<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">3</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-orgbb81ded" class="outline-2">
|
||||||
|
<h2 id="orgbb81ded"><span class="section-number-2">5</span> Analysis of some FRF in the global coordinates</h2>
|
||||||
|
<div class="outline-text-2" id="text-5">
|
||||||
|
<p>
|
||||||
|
First, we can compare the motions of the 6 solid bodies in one direction (figure <a href="#orgc2878f8">2</a>)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We can also compare all the DOFs of one solid body (figure <a href="#orgfd0203f">3</a>).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="orgc2878f8" class="figure">
|
||||||
|
<p><img src="figs/frf_all_bodies_one_direction.png" alt="frf_all_bodies_one_direction.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 2: </span>FRFs of all the 6 solid bodies in one direction</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="orgfd0203f" class="figure">
|
||||||
|
<p><img src="figs/frf_one_body_all_directions.png" alt="frf_one_body_all_directions.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 3: </span>FRFs of one solid body in all its DOFs</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-orgb0c1df8" class="outline-2">
|
||||||
|
<h2 id="orgb0c1df8"><span class="section-number-2">6</span> <span class="todo TODO">TODO</span> How to compare the relative motion of solid bodies</h2>
|
||||||
|
<div class="outline-text-2" id="text-6">
|
||||||
|
<p>
|
||||||
|
We have some of elements of the full FRF matrix:
|
||||||
|
\[ \frac{D_{1x}}{F_x},\ \frac{D_{1y}}{F_x},\ \frac{D_{1z}}{F_x},\ \frac{D_{2x}}{F_x},\ \dots \]
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
\[ \frac{D_{1x}}{D_{2x}} = \frac{\frac{D_{1x}}{F_x}}{\frac{D_{2x}}{F_x}} \]
|
||||||
|
Then, if \(\left| \frac{D_{1x}}{D_{2x}} \right| \approx 1\) in all the frequency band of interest, we can block the \(x\) motion between the solids 1 and 2.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
\[ \frac{D_{2x} - D_{1x}}{D_{1x} + D_{2x}} = \frac{\frac{D_{2x}}{F_x} - \frac{D_{1x}}{F_x}}{\frac{D_{1x}}{F_x} + \frac{D_{2x}}{F_x}} \]
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Then if \(\left| \frac{D_{2x} - D_{1x}}{D_{1x} + D_{2x}} \right| \ll 1\) in all the frequency band of interest, we can block the \(x\) motion between the solids 1 and 2.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org9c93ccf" class="outline-2">
|
||||||
|
<h2 id="org9c93ccf"><span class="section-number-2">7</span> Relative Motion in the global coordinates</h2>
|
||||||
|
<div class="outline-text-2" id="text-7">
|
||||||
|
<p>
|
||||||
|
Below we plot the normalized relative motion between each stage:
|
||||||
|
\[ 0 < \frac{\left| D_{ix} - D_{jx} \right|}{|D_{ix}| + |D_{jx}|} < 1 \]
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">DOFs = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'$T_x$', '$T_y$', '$T_z$', '</span>$<span class="org-type">\</span>theta_x$', '$<span class="org-type">\</span>theta_y$', '$<span class="org-type">\</span>theta_z$'<span class="org-rainbow-delimiters-depth-1">}</span>
|
||||||
|
|
||||||
|
dirs_i = <span class="org-highlight-numbers-number">1</span><span class="org-type">:</span><span class="org-highlight-numbers-number">6</span>;
|
||||||
|
exc_dir = <span class="org-highlight-numbers-number">1</span>;
|
||||||
|
|
||||||
|
<span class="org-type">figure</span>;
|
||||||
|
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">2</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">6</span></span>
|
||||||
|
subaxis<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">2</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
hold on;
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">dir_i</span> = <span class="org-constant">dirs_i</span>
|
||||||
|
H = <span class="org-rainbow-delimiters-depth-1">(</span>squeeze<span class="org-rainbow-delimiters-depth-2">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>dir_i, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">-</span>squeeze<span class="org-rainbow-delimiters-depth-2">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>dir_i, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">./</span><span class="org-rainbow-delimiters-depth-1">(</span>abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>dir_i, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">+</span>abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>dir_i, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>H<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
hold off;
|
||||||
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale', 'log'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'YScale', 'lin'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">200</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>; ylim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
<span class="org-comment">% xlabel('Frequency [Hz]'); ylabel('Relative Motion');</span>
|
||||||
|
title<span class="org-rainbow-delimiters-depth-1">(</span>sprintf<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'Normalized motion %s - %s'</span>, solid_names{<span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span>}, solid_names{<span class="org-constant">i</span>}));
|
||||||
|
<span class="org-keyword">if</span> <span class="org-constant">i</span> <span class="org-type">></span> <span class="org-highlight-numbers-number">4</span>
|
||||||
|
xlabel<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
<span class="org-keyword">else</span>
|
||||||
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XTickLabel'</span>,<span class="org-rainbow-delimiters-depth-4">[]</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-3">(</span></span><span class="org-constant">dirs_i</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-3">)</span></span>
|
||||||
|
legend_names<span class="org-rainbow-delimiters-depth-3">{</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-3">}</span> = DOFs<span class="org-rainbow-delimiters-depth-3">{</span>dirs_i<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">}</span>;
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
lgd = legend<span class="org-rainbow-delimiters-depth-3">(</span>legend_names<span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
|
||||||
|
hL = subplot<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
poshL = <span class="org-type">get</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-variable-name">hL</span>,<span class="org-string">'position'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
|
||||||
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-variable-name">lgd</span>,<span class="org-string">'position'</span>, poshL<span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
<span class="org-type">axis</span><span class="org-rainbow-delimiters-depth-3">(</span>hL, <span class="org-string">'off'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="org1cd90a2" class="figure">
|
||||||
|
<p><img src="figs/relative_motion_comparison.png" alt="relative_motion_comparison.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 4: </span>Relative motion between each stage</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org7803dae" class="outline-2">
|
||||||
|
<h2 id="org7803dae"><span class="section-number-2">8</span> <span class="todo TODO">TODO</span> Compare original FRF measurements to transformed FRF in the global frame</h2>
|
||||||
|
<div class="outline-text-2" id="text-8">
|
||||||
|
<p>
|
||||||
|
We wish here to compare the FRF in order to verify if there is any mistake.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">dir_names = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'X', 'Y', 'Z', '</span>$<span class="org-type">\</span>theta_X$', '$<span class="org-type">\</span>theta_Y$', '$<span class="org-type">\</span>theta_Z$'<span class="org-rainbow-delimiters-depth-1">}</span>;
|
||||||
|
|
||||||
|
solid_i = <span class="org-highlight-numbers-number">6</span>;
|
||||||
|
acc_dir_O = <span class="org-highlight-numbers-number">1</span>;
|
||||||
|
acc_dir = <span class="org-highlight-numbers-number">1</span>;
|
||||||
|
exc_dir = <span class="org-highlight-numbers-number">1</span>;
|
||||||
|
|
||||||
|
<span class="org-type">figure</span>;
|
||||||
|
|
||||||
|
ax1 = subplot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
hold on;
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant">solids.</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solid_names</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-2">{</span></span><span class="org-constant">solid_i</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-2">}</span></span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
||||||
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs<span class="org-rainbow-delimiters-depth-4">(</span>acc_dir<span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>acc_dir_O, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'-k'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
hold off;
|
||||||
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale', 'log'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'YScale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XTickLabel'</span>,<span class="org-rainbow-delimiters-depth-2">[]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
title<span class="org-rainbow-delimiters-depth-1">(</span>sprintf<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'%s motion measured by the Acc. vs %s motion computed in the common frame - %s'</span>, dir_names{acc_dir}, dir_names{acc_dir_O}, solid_names{solid_i}));
|
||||||
|
|
||||||
|
ax2 = subplot<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
hold on;
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant">solids.</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-3">(</span></span><span class="org-constant">solid_names</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-4">{</span></span><span class="org-constant">solid_i</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-4">}</span></span><span class="org-constant"><span class="org-rainbow-delimiters-depth-3">)</span></span>
|
||||||
|
plot<span class="org-rainbow-delimiters-depth-3">(</span>freqs, mod<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">180</span><span class="org-type">+</span><span class="org-highlight-numbers-number">180</span><span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>phase<span class="org-rainbow-delimiters-depth-5">(</span>squeeze<span class="org-rainbow-delimiters-depth-6">(</span>FRFs<span class="org-rainbow-delimiters-depth-7">(</span>acc_dir<span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-8">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-8">)</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span>, <span class="org-highlight-numbers-number">360</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-type">-</span><span class="org-highlight-numbers-number">180</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
plot<span class="org-rainbow-delimiters-depth-3">(</span>freqs, mod<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-highlight-numbers-number">180</span><span class="org-type">+</span><span class="org-highlight-numbers-number">180</span><span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>phase<span class="org-rainbow-delimiters-depth-5">(</span>squeeze<span class="org-rainbow-delimiters-depth-6">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-7">(</span><span class="org-rainbow-delimiters-depth-8">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-8">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>acc_dir_O, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span>, <span class="org-highlight-numbers-number">360</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-type">-</span><span class="org-highlight-numbers-number">180</span>, <span class="org-string">'-k'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
hold off;
|
||||||
|
ylim<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">[</span><span class="org-type">-</span><span class="org-highlight-numbers-number">180</span>, <span class="org-highlight-numbers-number">180</span><span class="org-rainbow-delimiters-depth-4">]</span><span class="org-rainbow-delimiters-depth-3">)</span>; yticks<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">-</span><span class="org-highlight-numbers-number">180</span><span class="org-type">:</span><span class="org-highlight-numbers-number">90</span><span class="org-type">:</span><span class="org-highlight-numbers-number">180</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
xlabel<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">]</span></span><span class="org-string">'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-3">)</span></span><span class="org-string">; ylabel</span><span class="org-string"><span class="org-rainbow-delimiters-depth-3">(</span></span><span class="org-string">'Phase </span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">[</span></span><span class="org-string">deg</span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'xscale', 'log'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
|
||||||
|
linkaxes<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">[</span>ax1,ax2<span class="org-rainbow-delimiters-depth-4">]</span>,<span class="org-string">'x'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
xlim<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">200</span><span class="org-rainbow-delimiters-depth-4">]</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org45fdd6c" class="outline-2">
|
||||||
|
<h2 id="org45fdd6c"><span class="section-number-2">9</span> Verify that we find the original FRF from the FRF in the global coordinates</h2>
|
||||||
|
<div class="outline-text-2" id="text-9">
|
||||||
|
<p>
|
||||||
|
We have computed the Frequency Response Functions Matrix <code>FRFs_O</code> representing the response of the 6 solid bodies in their 6 DOFs.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
From the response of one body in its 6 DOFs, we should be able to compute the FRF of each of its accelerometer fixed to it during the measurement.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We can then compare the result with the original measurements.
|
||||||
|
This will help us to determine if:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li>the previous inversion used is correct</li>
|
||||||
|
<li>the solid body assumption is correct in the frequency band of interest</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">FRF_recovered = zeros<span class="org-rainbow-delimiters-depth-1">(</span>size<span class="org-rainbow-delimiters-depth-2">(</span>FRFs<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
|
||||||
|
<span class="org-comment">% For each excitation direction</span>
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">exc_dir</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">3</span></span>
|
||||||
|
<span class="org-comment">% For each solid</span>
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">solid_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solid_names</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
||||||
|
v0 = squeeze<span class="org-rainbow-delimiters-depth-1">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span><span class="org-rainbow-delimiters-depth-3">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span><span class="org-highlight-numbers-number">3</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
W0 = squeeze<span class="org-rainbow-delimiters-depth-1">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span><span class="org-highlight-numbers-number">4</span><span class="org-type">:</span><span class="org-rainbow-delimiters-depth-3">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span><span class="org-highlight-numbers-number">6</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
|
||||||
|
<span class="org-comment">% For each accelerometer attached to the current solid</span>
|
||||||
|
<span class="org-keyword">for</span> <span class="org-variable-name">acc_i</span> = <span class="org-constant">solids.</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solid_names</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-2">{</span></span><span class="org-constant">solid_i</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-2">}</span></span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
||||||
|
<span class="org-comment">% We get the position of the accelerometer expressed in frame O</span>
|
||||||
|
pos = acc_pos<span class="org-rainbow-delimiters-depth-1">(</span>acc_i, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span>';
|
||||||
|
posX = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">0</span> pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">-</span>pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span>; <span class="org-type">-</span>pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-highlight-numbers-number">0</span> pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span> ; pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">-</span>pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
||||||
|
<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">0</span> acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">-</span>acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span> ; <span class="org-type">-</span>acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-highlight-numbers-number">0</span> acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span> ; acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-type">-</span>acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-highlight-numbers-number">0</span><span class="org-rainbow-delimiters-depth-1">]</span>
|
||||||
|
|
||||||
|
FRF_recovered<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">3</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span> = v0 <span class="org-type">+</span> posX<span class="org-type">*</span>W0;
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
<span class="org-keyword">end</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We then compare the original FRF measured for each accelerometer with the recovered FRF from the global FRF matrix in the common frame.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The FRF for the 4 accelerometers on the Hexapod are compared on figure <a href="#orgdf7e1b1">5</a>.
|
||||||
|
All the FRF are matching very well in all the frequency range displayed.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The FRF for accelerometers located on the translation stage are compared on figure <a href="#orgc07a0c4">6</a>.
|
||||||
|
The FRF are matching well until 100Hz.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="orgdf7e1b1" class="figure">
|
||||||
|
<p><img src="figs/recovered_frf_comparison_hexa.png" alt="recovered_frf_comparison_hexa.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 5: </span>Comparison of the original FRF with the recovered ones - Hexapod</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="orgc07a0c4" class="figure">
|
||||||
|
<p><img src="figs/recovered_frf_comparison_ty.png" alt="recovered_frf_comparison_ty.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 6: </span>Comparison of the original FRF with the recovered ones - Ty</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="important">
|
||||||
|
<p>
|
||||||
|
The reduction of the number of degrees of freedom from 69 (23 accelerometers with each 3DOF) to 36 (6 solid bodies with 6 DOF) seems to work well.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This confirms the fact that the stages are indeed behaving as a solid body in the frequency band of interest.
|
||||||
|
This valid the fact that a multi-body model can be used to represent the dynamics of the micro-station.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="postamble" class="status">
|
||||||
|
<p class="author">Author: Dehaeze Thomas</p>
|
||||||
|
<p class="date">Created: 2019-07-05 ven. 10:16</p>
|
||||||
|
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
680
modal-analysis/frf_processing.org
Normal file
@ -0,0 +1,680 @@
|
|||||||
|
#+TITLE: Modal Analysis - Processing of FRF
|
||||||
|
:DRAWER:
|
||||||
|
#+STARTUP: overview
|
||||||
|
|
||||||
|
#+LANGUAGE: en
|
||||||
|
#+EMAIL: dehaeze.thomas@gmail.com
|
||||||
|
#+AUTHOR: Dehaeze Thomas
|
||||||
|
|
||||||
|
#+HTML_LINK_HOME: ../index.html
|
||||||
|
#+HTML_LINK_UP: ./index.html
|
||||||
|
|
||||||
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
|
||||||
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
|
||||||
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/zenburn.css"/>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="../js/jquery.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="../js/bootstrap.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="../js/jquery.stickytableheaders.min.js"></script>
|
||||||
|
#+HTML_HEAD: <script type="text/javascript" src="../js/readtheorg.js"></script>
|
||||||
|
|
||||||
|
#+HTML_MATHJAX: align: center tagside: right font: TeX
|
||||||
|
|
||||||
|
#+PROPERTY: header-args:matlab :session *MATLAB*
|
||||||
|
#+PROPERTY: header-args:matlab+ :comments org
|
||||||
|
#+PROPERTY: header-args:matlab+ :results none
|
||||||
|
#+PROPERTY: header-args:matlab+ :exports both
|
||||||
|
#+PROPERTY: header-args:matlab+ :eval no-export
|
||||||
|
#+PROPERTY: header-args:matlab+ :output-dir figs
|
||||||
|
|
||||||
|
#+PROPERTY: header-args:shell :eval no-export
|
||||||
|
|
||||||
|
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/MEGA/These/LaTeX/}{config.tex}")
|
||||||
|
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
|
||||||
|
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
|
||||||
|
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
|
||||||
|
#+PROPERTY: header-args:latex+ :results raw replace :buffer no
|
||||||
|
#+PROPERTY: header-args:latex+ :eval no-export
|
||||||
|
#+PROPERTY: header-args:latex+ :exports both
|
||||||
|
#+PROPERTY: header-args:latex+ :mkdirp yes
|
||||||
|
#+PROPERTY: header-args:latex+ :output-dir figs
|
||||||
|
:END:
|
||||||
|
|
||||||
|
The measurements have been conducted and we have computed the $n \times p \times q$ Frequency Response Functions Matrix with:
|
||||||
|
- $n$: the number of measurements: $23 \times 3 = 69$ (23 accelerometers measuring 3 directions each)
|
||||||
|
- $p$: the number of excitation inputs: $3$
|
||||||
|
- $q$: the number of frequency points $\omega_i$
|
||||||
|
|
||||||
|
However, in our model, we only consider 6 solid bodies, namely:
|
||||||
|
- Bottom Granite
|
||||||
|
- Top Granite
|
||||||
|
- Translation Stage
|
||||||
|
- Tilt Stage
|
||||||
|
- Spindle
|
||||||
|
- Hexapod
|
||||||
|
|
||||||
|
Thus, we are only interested in $6 \times 6 = 36$ degrees of freedom.
|
||||||
|
|
||||||
|
We here process the FRF matrix to go from the 69 measured DOFs to the wanted 36 DOFs.
|
||||||
|
|
||||||
|
* Matlab Init :noexport:ignore:
|
||||||
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||||
|
<<matlab-dir>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none :results silent :noweb yes
|
||||||
|
<<matlab-init>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Importation of measured FRF curves
|
||||||
|
We load the measured FRF and Coherence matrices.
|
||||||
|
We also load the geometric parameters of the station: solid bodies considered and the position of the accelerometers.
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
load('./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs');
|
||||||
|
load('mat/geometry.mat', 'solids', 'solid_names', 'acc_pos');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* From accelerometer DOFs to solid body DOFs - Mathematics
|
||||||
|
Let's consider the schematic shown on figure [[fig:local_to_global_coordinates]] where we are measuring the motion of a (supposed) solid body at 4 distinct points in x-y-z.
|
||||||
|
|
||||||
|
The goal here is to link these $4 \times 3 = 12$ measurements to the 6 DOFs of the solid body expressed in the frame $\{O\}$.
|
||||||
|
|
||||||
|
#+begin_src latex :file local_to_global_coordinates.pdf :post pdf2svg(file=*this*, ext="png") :exports results
|
||||||
|
\newcommand\irregularcircle[2]{% radius, irregularity
|
||||||
|
\pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}}
|
||||||
|
+(0:\len pt)
|
||||||
|
\foreach \a in {10,20,...,350}{
|
||||||
|
\pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}}
|
||||||
|
-- +(\a:\len pt)
|
||||||
|
} -- cycle
|
||||||
|
}
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\draw[rounded corners=1mm, fill=blue!30!white] (0, 0) \irregularcircle{3cm}{1mm};
|
||||||
|
|
||||||
|
\node[] (origin) at (4, -1) {$\bullet$};
|
||||||
|
\begin{scope}[shift={(origin)}]
|
||||||
|
\def\axissize{0.8cm}
|
||||||
|
\draw[->] (0, 0) -- ++(\axissize, 0) node[above left]{$x$};
|
||||||
|
\draw[->] (0, 0) -- ++(0, \axissize) node[below right]{$y$};
|
||||||
|
\draw[fill, color=black] (0, 0) circle (0.05*\axissize);
|
||||||
|
\node[draw, circle, inner sep=0pt, minimum size=0.4*\axissize, label=left:$z$] (yaxis) at (0, 0){};
|
||||||
|
\node[below right] at (0, 0){$\{O\}$};
|
||||||
|
\end{scope}
|
||||||
|
|
||||||
|
\coordinate[] (p1) at (-1.5, -1.5);
|
||||||
|
\coordinate[] (p2) at (-1.5, 1.5);
|
||||||
|
\coordinate[] (p3) at ( 1.5, 1.5);
|
||||||
|
\coordinate[] (p4) at ( 1.5, -1.5);
|
||||||
|
|
||||||
|
\draw[->] (p1)node[]{$\bullet$}node[above]{$p_1$} -- ++(1, 0.5)node[right]{$v_1$};
|
||||||
|
\draw[->] (p2)node[]{$\bullet$}node[above]{$p_2$} -- ++(-0.5, 1)node[right]{$v_2$};
|
||||||
|
\draw[->] (p3)node[]{$\bullet$}node[above]{$p_3$} -- ++(1, 0.5)node[right]{$v_3$};
|
||||||
|
\draw[->] (p4)node[]{$\bullet$}node[above]{$p_4$} -- ++(0.5, 1)node[right]{$v_4$};
|
||||||
|
\end{tikzpicture}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:local_to_global_coordinates
|
||||||
|
#+caption: Schematic of the measured motions of a solid body
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/local_to_global_coordinates.png]]
|
||||||
|
|
||||||
|
From the figure [[fig:local_to_global_coordinates]], we can write:
|
||||||
|
\begin{align*}
|
||||||
|
\vec{v}_1 &= \vec{v} + \Omega \vec{p}_1\\
|
||||||
|
\vec{v}_2 &= \vec{v} + \Omega \vec{p}_2\\
|
||||||
|
\vec{v}_3 &= \vec{v} + \Omega \vec{p}_3\\
|
||||||
|
\vec{v}_4 &= \vec{v} + \Omega \vec{p}_4
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
With
|
||||||
|
\begin{equation}
|
||||||
|
\Omega = \begin{bmatrix}
|
||||||
|
0 & -\Omega_z & \Omega_y \\
|
||||||
|
\Omega_z & 0 & -\Omega_x \\
|
||||||
|
-\Omega_y & \Omega_x & 0
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
$\vec{v}$ and $\Omega$ represent to velocity and rotation of the solid expressed in the frame $\{O\}$.
|
||||||
|
|
||||||
|
We can rearrange the equations in a matrix form:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\left[\begin{array}{ccc|ccc}
|
||||||
|
1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
|
||||||
|
0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
|
||||||
|
0 & 0 & 1 & p_{1y} & -p_{1x} & 0 \\ \hline
|
||||||
|
& \vdots & & & \vdots & \\ \hline
|
||||||
|
1 & 0 & 0 & 0 & p_{4z} & -p_{4y} \\
|
||||||
|
0 & 1 & 0 & -p_{4z} & 0 & p_{4x} \\
|
||||||
|
0 & 0 & 1 & p_{4y} & -p_{4x} & 0
|
||||||
|
\end{array}\right] \begin{bmatrix}
|
||||||
|
v_x \\ v_y \\ v_z \\ \hline \Omega_x \\ \Omega_y \\ \Omega_z
|
||||||
|
\end{bmatrix} = \begin{bmatrix}
|
||||||
|
v_{1x} \\ v_{1y} \\ v_{1z} \\\hline \vdots \\\hline v_{4x} \\ v_{4y} \\ v_{4z}
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
and then we obtain the velocity and rotation of the solid in the wanted frame $\{O\}$:
|
||||||
|
\begin{equation}
|
||||||
|
\begin{bmatrix}
|
||||||
|
v_x \\ v_y \\ v_z \\ \hline \Omega_x \\ \Omega_y \\ \Omega_z
|
||||||
|
\end{bmatrix} =
|
||||||
|
\left[\begin{array}{ccc|ccc}
|
||||||
|
1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
|
||||||
|
0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
|
||||||
|
0 & 0 & 1 & p_{1y} & -p_{1x} & 0 \\ \hline
|
||||||
|
& \vdots & & & \vdots & \\ \hline
|
||||||
|
1 & 0 & 0 & 0 & p_{4z} & -p_{4y} \\
|
||||||
|
0 & 1 & 0 & -p_{4z} & 0 & p_{4x} \\
|
||||||
|
0 & 0 & 1 & p_{4y} & -p_{4x} & 0
|
||||||
|
\end{array}\right]^{-1} \begin{bmatrix}
|
||||||
|
v_{1x} \\ v_{1y} \\ v_{1z} \\\hline \vdots \\\hline v_{4x} \\ v_{4y} \\ v_{4z}
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
This inversion is equivalent to resolving a mean square problem.
|
||||||
|
|
||||||
|
* What reference frame to choose?
|
||||||
|
The question we wish here to answer is how to choose the reference frame $\{O\}$ in which the DOFs of the solid bodies are defined.
|
||||||
|
|
||||||
|
The goal is to compare the motion of each solid body to see which relative DOFs between solid bodies can be neglected, that is to say, which joint between solid bodies can be regarded as perfect (and this in all the frequency range of interest).
|
||||||
|
Ideally, we would like to have the same number of degrees of freedom than the number of identified modes.
|
||||||
|
|
||||||
|
The possibles choices are:
|
||||||
|
- *One frame for each solid body* which is located at its center of mass
|
||||||
|
- *One common frame*, for instance located at the point of interest ($270mm$ above the Hexapod)
|
||||||
|
- *Base located at the joint position*: this is where we want to see the motion and estimate stiffness
|
||||||
|
|
||||||
|
#+name: tab:frame_comparison
|
||||||
|
#+caption: Advantages and disadvantages for the choice of reference frame
|
||||||
|
| Chosen Frame | Advantages | Disadvantages |
|
||||||
|
|--------------------------+-----------------------------------------------------+------------------------------------------------------|
|
||||||
|
| Frames at CoM | Physically, it makes more sense | How to compare the motion of the solid bodies? |
|
||||||
|
| Common Frame | We can compare the motion of each solid body | Small $\theta_{x, y}$ may result in large $T_{x, y}$ |
|
||||||
|
| Frames at joint position | Directly gives which joint direction can be blocked | How to choose the joint position? |
|
||||||
|
|
||||||
|
As the easiest choice is to choose a common frame, we start with that solution.
|
||||||
|
|
||||||
|
* From accelerometer DOFs to solid body DOFs - Matlab Implementation
|
||||||
|
First, we initialize a new FRF matrix =FRFs_O= which is an $n \times p \times q$ with:
|
||||||
|
- $n$ is the number of DOFs of the considered 6 solid-bodies: $6 \times 6 = 36$
|
||||||
|
- $p$ is the number of excitation inputs: $3$
|
||||||
|
- $q$ is the number of frequency points $\omega_i$
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
FRFs_O = zeros(length(solid_names)*6, 3, 801);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Then, as we know the positions of the accelerometers on each solid body, and we have the response of those accelerometers, we can use the equations derived in the previous section to determine the response of each solid body expressed in the frame $\{O\}$.
|
||||||
|
#+begin_src matlab
|
||||||
|
for solid_i = 1:length(solid_names)
|
||||||
|
solids_i = solids.(solid_names{solid_i});
|
||||||
|
|
||||||
|
A = zeros(3*length(solids_i), 6);
|
||||||
|
for i = 1:length(solids_i)
|
||||||
|
acc_i = solids_i(i);
|
||||||
|
|
||||||
|
A(3*(i-1)+1:3*i, 1:3) = eye(3);
|
||||||
|
A(3*(i-1)+1:3*i, 4:6) = [ 0 acc_pos(acc_i, 3) -acc_pos(acc_i, 2) ;
|
||||||
|
-acc_pos(acc_i, 3) 0 acc_pos(acc_i, 1) ;
|
||||||
|
acc_pos(acc_i, 2) -acc_pos(acc_i, 1) 0];
|
||||||
|
end
|
||||||
|
|
||||||
|
for exc_dir = 1:3
|
||||||
|
FRFs_O((solid_i-1)*6+1:solid_i*6, exc_dir, :) = A\squeeze(FRFs((solids_i(1)-1)*3+1:solids_i(end)*3, exc_dir, :));
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Analysis of some FRF in the global coordinates
|
||||||
|
First, we can compare the motions of the 6 solid bodies in one direction (figure [[fig:frf_all_bodies_one_direction]])
|
||||||
|
|
||||||
|
We can also compare all the DOFs of one solid body (figure [[fig:frf_one_body_all_directions]]).
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
exc_names = {'$F_x$', '$F_y$', '$F_z$'};
|
||||||
|
DOFs = {'$T_x$', '$T_y$', '$T_z$', '$\theta_x$', '$\theta_y$', '$\theta_z$'}
|
||||||
|
solids_i = 1:6;
|
||||||
|
dir_i = 1;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
|
||||||
|
ax1 = subaxis(2, 1, 1);
|
||||||
|
hold on;
|
||||||
|
for solid_i = solids_i
|
||||||
|
plot(freqs, abs(squeeze(FRFs_O((solid_i-1)*6+dir_i, exc_dir, :))), 'DisplayName', solid_names{solid_i});
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel('Amplitude');
|
||||||
|
legend('Location', 'northwest');
|
||||||
|
title(sprintf('FRF between %s and %s', exc_names{exc_dir}, DOFs{dir_i}));
|
||||||
|
|
||||||
|
ax2 = subaxis(2, 1, 2);
|
||||||
|
hold on;
|
||||||
|
for solid_i = solids_i
|
||||||
|
plot(freqs, mod(180+180/pi*phase(squeeze(FRFs_O((solid_i-1)*6+dir_i, exc_dir, :))), 360)-180);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
ylim([-180, 180]); yticks(-180:90:180);
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
set(gca, 'xscale', 'log');
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 200]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/frf_all_bodies_one_direction.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:frf_all_bodies_one_direction
|
||||||
|
#+CAPTION: FRFs of all the 6 solid bodies in one direction
|
||||||
|
[[file:figs/frf_all_bodies_one_direction.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
DOFs = {'$T_x$', '$T_y$', '$T_z$', '$\theta_x$', '$\theta_y$', '$\theta_z$'}
|
||||||
|
solid_i = 3;
|
||||||
|
dirs_i = 1:6;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
|
||||||
|
ax1 = subplot(2, 1, 1);
|
||||||
|
hold on;
|
||||||
|
for dir_i = dirs_i
|
||||||
|
plot(freqs, abs(squeeze(FRFs_O((solid_i-1)*6+dir_i, exc_dir, :))), 'DisplayName', DOFs{dir_i});
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel('Amplitude');
|
||||||
|
legend('Location', 'northwest');
|
||||||
|
title(sprintf('Motion of %s due to %s', solid_names{solid_i}, exc_names{exc_dir}));
|
||||||
|
|
||||||
|
ax2 = subplot(2, 1, 2);
|
||||||
|
hold on;
|
||||||
|
for dir_i = dirs_i
|
||||||
|
plot(freqs, mod(180+180/pi*phase(squeeze(FRFs_O((solid_i-1)*6+dir_i, exc_dir, :))), 360)-180);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
ylim([-180, 180]); yticks(-180:90:180);
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
set(gca, 'xscale', 'log');
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 200]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/frf_one_body_all_directions.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:frf_one_body_all_directions
|
||||||
|
#+CAPTION: FRFs of one solid body in all its DOFs
|
||||||
|
[[file:figs/frf_one_body_all_directions.png]]
|
||||||
|
|
||||||
|
* TODO How to compare the relative motion of solid bodies
|
||||||
|
We have some of elements of the full FRF matrix:
|
||||||
|
\[ \frac{D_{1x}}{F_x},\ \frac{D_{1y}}{F_x},\ \frac{D_{1z}}{F_x},\ \frac{D_{2x}}{F_x},\ \dots \]
|
||||||
|
|
||||||
|
\[ \frac{D_{1x}}{D_{2x}} = \frac{\frac{D_{1x}}{F_x}}{\frac{D_{2x}}{F_x}} \]
|
||||||
|
Then, if $\left| \frac{D_{1x}}{D_{2x}} \right| \approx 1$ in all the frequency band of interest, we can block the $x$ motion between the solids 1 and 2.
|
||||||
|
|
||||||
|
\[ \frac{D_{2x} - D_{1x}}{D_{1x} + D_{2x}} = \frac{\frac{D_{2x}}{F_x} - \frac{D_{1x}}{F_x}}{\frac{D_{1x}}{F_x} + \frac{D_{2x}}{F_x}} \]
|
||||||
|
|
||||||
|
Then if $\left| \frac{D_{2x} - D_{1x}}{D_{1x} + D_{2x}} \right| \ll 1$ in all the frequency band of interest, we can block the $x$ motion between the solids 1 and 2.
|
||||||
|
|
||||||
|
* Relative Motion in the global coordinates
|
||||||
|
Below we plot the normalized relative motion between each stage:
|
||||||
|
\[ 0 < \frac{\left| D_{ix} - D_{jx} \right|}{|D_{ix}| + |D_{jx}|} < 1 \]
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
DOFs = {'$T_x$', '$T_y$', '$T_z$', '$\theta_x$', '$\theta_y$', '$\theta_z$'}
|
||||||
|
|
||||||
|
dirs_i = 1:6;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
|
||||||
|
for i = 2:6
|
||||||
|
subaxis(3, 2, i);
|
||||||
|
hold on;
|
||||||
|
for dir_i = dirs_i
|
||||||
|
H = (squeeze(FRFs_O((i-1)*6+dir_i, exc_dir, :))-squeeze(FRFs_O((i-2)*6+dir_i, exc_dir, :)))./(abs(squeeze(FRFs_O((i-1)*6+dir_i, exc_dir, :)))+abs(squeeze(FRFs_O((i-2)*6+dir_i, exc_dir, :))));
|
||||||
|
plot(freqs, abs(H));
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||||
|
xlim([1, 200]); ylim([0, 1]);
|
||||||
|
% xlabel('Frequency [Hz]'); ylabel('Relative Motion');
|
||||||
|
title(sprintf('Normalized motion %s - %s', solid_names{i-1}, solid_names{i}));
|
||||||
|
if i > 4
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
else
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1:length(dirs_i)
|
||||||
|
legend_names{i} = DOFs{dirs_i(i)};
|
||||||
|
end
|
||||||
|
lgd = legend(legend_names);
|
||||||
|
|
||||||
|
hL = subplot(3, 2, 1);
|
||||||
|
poshL = get(hL,'position');
|
||||||
|
|
||||||
|
set(lgd,'position', poshL);
|
||||||
|
axis(hL, 'off');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/relative_motion_comparison.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:relative_motion_comparison
|
||||||
|
#+CAPTION: Relative motion between each stage
|
||||||
|
[[file:figs/relative_motion_comparison.png]]
|
||||||
|
|
||||||
|
* TODO Compare original FRF measurements to transformed FRF in the global frame
|
||||||
|
We wish here to compare the FRF in order to verify if there is any mistake.
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
dir_names = {'X', 'Y', 'Z', '$\theta_X$', '$\theta_Y$', '$\theta_Z$'};
|
||||||
|
|
||||||
|
solid_i = 6;
|
||||||
|
acc_dir_O = 1;
|
||||||
|
acc_dir = 1;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
|
||||||
|
ax1 = subplot(2, 1, 1);
|
||||||
|
hold on;
|
||||||
|
for i = solids.(solid_names{solid_i})
|
||||||
|
plot(freqs, abs(squeeze(FRFs(acc_dir+3*(i-1), exc_dir, :))));
|
||||||
|
end
|
||||||
|
plot(freqs, abs(squeeze(FRFs_O((solid_i-1)*6+acc_dir_O, exc_dir, :))), '-k');
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel('Amplitude');
|
||||||
|
title(sprintf('%s motion measured by the Acc. vs %s motion computed in the common frame - %s', dir_names{acc_dir}, dir_names{acc_dir_O}, solid_names{solid_i}));
|
||||||
|
|
||||||
|
ax2 = subplot(2, 1, 2);
|
||||||
|
hold on;
|
||||||
|
for i = solids.(solid_names{solid_i})
|
||||||
|
plot(freqs, mod(180+180/pi*phase(squeeze(FRFs(acc_dir+3*(i-1), exc_dir, :))), 360)-180);
|
||||||
|
end
|
||||||
|
plot(freqs, mod(180+180/pi*phase(squeeze(FRFs_O((solid_i-1)*6+acc_dir_O, exc_dir, :))), 360)-180, '-k');
|
||||||
|
hold off;
|
||||||
|
ylim([-180, 180]); yticks(-180:90:180);
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
set(gca, 'xscale', 'log');
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 200]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Verify that we find the original FRF from the FRF in the global coordinates
|
||||||
|
We have computed the Frequency Response Functions Matrix =FRFs_O= representing the response of the 6 solid bodies in their 6 DOFs.
|
||||||
|
|
||||||
|
From the response of one body in its 6 DOFs, we should be able to compute the FRF of each of its accelerometer fixed to it during the measurement.
|
||||||
|
|
||||||
|
We can then compare the result with the original measurements.
|
||||||
|
This will help us to determine if:
|
||||||
|
- the previous inversion used is correct
|
||||||
|
- the solid body assumption is correct in the frequency band of interest
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
FRF_recovered = zeros(size(FRFs));
|
||||||
|
|
||||||
|
% For each excitation direction
|
||||||
|
for exc_dir = 1:3
|
||||||
|
% For each solid
|
||||||
|
for solid_i = 1:length(solid_names)
|
||||||
|
v0 = squeeze(FRFs_O((solid_i-1)*6+1:(solid_i-1)*6+3, exc_dir, :));
|
||||||
|
W0 = squeeze(FRFs_O((solid_i-1)*6+4:(solid_i-1)*6+6, exc_dir, :));
|
||||||
|
|
||||||
|
% For each accelerometer attached to the current solid
|
||||||
|
for acc_i = solids.(solid_names{solid_i})
|
||||||
|
% We get the position of the accelerometer expressed in frame O
|
||||||
|
pos = acc_pos(acc_i, :)';
|
||||||
|
posX = [0 pos(3) -pos(2); -pos(3) 0 pos(1) ; pos(2) -pos(1) 0];
|
||||||
|
[0 acc_pos(i, 3) -acc_pos(i, 2) ; -acc_pos(i, 3) 0 acc_pos(i, 1) ; acc_pos(i, 2) -acc_pos(i, 1) 0]
|
||||||
|
|
||||||
|
FRF_recovered(3*(acc_i-1)+1:3*(acc_i-1)+3, exc_dir, :) = v0 + posX*W0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
We then compare the original FRF measured for each accelerometer with the recovered FRF from the global FRF matrix in the common frame.
|
||||||
|
|
||||||
|
The FRF for the 4 accelerometers on the Hexapod are compared on figure [[fig:recovered_frf_comparison_hexa]].
|
||||||
|
All the FRF are matching very well in all the frequency range displayed.
|
||||||
|
|
||||||
|
The FRF for accelerometers located on the translation stage are compared on figure [[fig:recovered_frf_comparison_ty]].
|
||||||
|
The FRF are matching well until 100Hz.
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
exc_names = {'$F_x$', '$F_y$', '$F_z$'};
|
||||||
|
DOFs = {'$T_x$', '$T_y$', '$T_z$', '$\theta_x$', '$\theta_y$', '$\theta_z$'}
|
||||||
|
|
||||||
|
solid_i = 6;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
accs_i = solids.(solid_names{solid_i});
|
||||||
|
|
||||||
|
figure;
|
||||||
|
|
||||||
|
for i = 1:length(accs_i)
|
||||||
|
acc_i = accs_i(i);
|
||||||
|
|
||||||
|
subaxis(2, 2, i);
|
||||||
|
|
||||||
|
hold on;
|
||||||
|
for dir_i = 1:3
|
||||||
|
plot(freqs, abs(squeeze(FRFs(3*(acc_i-1)+dir_i, exc_dir, :))), '-', 'DisplayName', DOFs{dir_i});
|
||||||
|
end
|
||||||
|
set(gca,'ColorOrderIndex',1)
|
||||||
|
for dir_i = 1:3
|
||||||
|
plot(freqs, abs(squeeze(FRF_recovered(3*(acc_i-1)+dir_i, exc_dir, :))), '--', 'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
if i > 2
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
else
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
end
|
||||||
|
|
||||||
|
if rem(i, 2) == 1
|
||||||
|
ylabel('Amplitude');
|
||||||
|
end
|
||||||
|
|
||||||
|
xlim([1, 200]);
|
||||||
|
title(sprintf('Accelerometer %i', accs_i(i)));
|
||||||
|
legend('location', 'northwest');
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/recovered_frf_comparison_hexa.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:recovered_frf_comparison_hexa
|
||||||
|
#+CAPTION: Comparison of the original FRF with the recovered ones - Hexapod
|
||||||
|
[[file:figs/recovered_frf_comparison_hexa.png]]
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
exc_names = {'$F_x$', '$F_y$', '$F_z$'};
|
||||||
|
DOFs = {'$T_x$', '$T_y$', '$T_z$', '$\theta_x$', '$\theta_y$', '$\theta_z$'}
|
||||||
|
|
||||||
|
solid_i = 3;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
accs_i = solids.(solid_names{solid_i});
|
||||||
|
|
||||||
|
figure;
|
||||||
|
|
||||||
|
for i = 1:length(accs_i)
|
||||||
|
acc_i = accs_i(i);
|
||||||
|
|
||||||
|
subaxis(2, 2, i);
|
||||||
|
|
||||||
|
hold on;
|
||||||
|
for dir_i = 1:3
|
||||||
|
plot(freqs, abs(squeeze(FRFs(3*(acc_i-1)+dir_i, exc_dir, :))), '-', 'DisplayName', DOFs{dir_i});
|
||||||
|
end
|
||||||
|
set(gca,'ColorOrderIndex',1)
|
||||||
|
for dir_i = 1:3
|
||||||
|
plot(freqs, abs(squeeze(FRF_recovered(3*(acc_i-1)+dir_i, exc_dir, :))), '--', 'HandleVisibility', 'off');
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
if i > 2
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
else
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
end
|
||||||
|
|
||||||
|
if rem(i, 2) == 1
|
||||||
|
ylabel('Amplitude');
|
||||||
|
end
|
||||||
|
|
||||||
|
xlim([1, 200]);
|
||||||
|
title(sprintf('Accelerometer %i', accs_i(i)));
|
||||||
|
legend('location', 'northwest');
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/recovered_frf_comparison_ty.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:recovered_frf_comparison_ty
|
||||||
|
#+CAPTION: Comparison of the original FRF with the recovered ones - Ty
|
||||||
|
[[file:figs/recovered_frf_comparison_ty.png]]
|
||||||
|
|
||||||
|
|
||||||
|
#+begin_important
|
||||||
|
The reduction of the number of degrees of freedom from 69 (23 accelerometers with each 3DOF) to 36 (6 solid bodies with 6 DOF) seems to work well.
|
||||||
|
|
||||||
|
This confirms the fact that the stages are indeed behaving as a solid body in the frequency band of interest.
|
||||||
|
This valid the fact that a multi-body model can be used to represent the dynamics of the micro-station.
|
||||||
|
#+end_important
|
||||||
|
|
||||||
|
* Importation of measured FRF curves :noexport:ignore:
|
||||||
|
There are 24 measurements files corresponding to 24 series of impacts:
|
||||||
|
- 3 directions, 8 sets of 3 accelerometers
|
||||||
|
For each measurement file, the FRF and coherence between the impact and the 9 accelerations measured.
|
||||||
|
|
||||||
|
In reality: 4 sets of 10 things
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
a = load('mat/meas_frf_coh_1.mat');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
figure;
|
||||||
|
|
||||||
|
ax1 = subplot(2, 1, 1);
|
||||||
|
hold on;
|
||||||
|
plot(a.FFT1_AvXSpc_2_1_RMS_X_Val, a.FFT1_AvXSpc_2_1_RMS_Y_Mod)
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel('Amplitude');
|
||||||
|
title(sprintf('From %s, to %s', FFT1_AvXSpc_2_1_RfName, FFT1_AvXSpc_2_1_RpName))
|
||||||
|
|
||||||
|
ax2 = subplot(2, 1, 2);
|
||||||
|
hold on;
|
||||||
|
plot(a.FFT1_AvXSpc_2_1_RMS_X_Val, a.FFT1_AvXSpc_2_1_RMS_Y_Phas)
|
||||||
|
hold off;
|
||||||
|
ylim([-180, 180]); yticks(-180:90:180);
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
set(gca, 'xscale', 'log');
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 200]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Analysis of some FRFs :noexport:ignore:
|
||||||
|
#+begin_src matlab
|
||||||
|
acc_i = 3;
|
||||||
|
acc_dir = 1;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
|
||||||
|
ax1 = subplot(2, 1, 1);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs(acc_dir+3*(acc_i-1), exc_dir, :))));
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel('Amplitude');
|
||||||
|
|
||||||
|
ax2 = subplot(2, 1, 2);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, mod(180+180/pi*phase(squeeze(FRFs(acc_dir+3*(acc_i-1), exc_dir, :))), 360)-180);
|
||||||
|
hold off;
|
||||||
|
ylim([-180, 180]); yticks(-180:90:180);
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
set(gca, 'xscale', 'log');
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
xlim([1, 200]);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
for i = 1:3*n_acc
|
||||||
|
plot(freqs, squeeze(COHs(i, 1, :)), 'color', [0, 0, 0, 0.2]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
ylabel('Coherence [\%]');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
Composite Response Function.
|
||||||
|
|
||||||
|
We here sum the norm instead of the complex numbers.
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
HHx = squeeze(sum(abs(FRFs(:, 1, :))));
|
||||||
|
HHy = squeeze(sum(abs(FRFs(:, 2, :))));
|
||||||
|
HHz = squeeze(sum(abs(FRFs(:, 3, :))));
|
||||||
|
HH = squeeze(sum([HHx, HHy, HHz], 2));
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src matlab
|
||||||
|
exc_dir = 3;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
for i = 1:3*n_acc
|
||||||
|
plot(freqs, abs(squeeze(FRFs(i, exc_dir, :))), 'color', [0, 0, 0, 0.2]);
|
||||||
|
end
|
||||||
|
plot(freqs, abs(HHx));
|
||||||
|
plot(freqs, abs(HHy));
|
||||||
|
plot(freqs, abs(HHz));
|
||||||
|
plot(freqs, abs(HH), 'k');
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'lin');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Amplitude');
|
||||||
|
xlim([1, 200]);
|
||||||
|
#+end_src
|
@ -17,7 +17,7 @@
|
|||||||
7 4.2000e-001 2.8000e-001 -4.1680e-001
|
7 4.2000e-001 2.8000e-001 -4.1680e-001
|
||||||
6 -4.2000e-001 2.8000e-001 -4.1680e-001
|
6 -4.2000e-001 2.8000e-001 -4.1680e-001
|
||||||
5 -3.8500e-001 -3.0000e-001 -4.1680e-001
|
5 -3.8500e-001 -3.0000e-001 -4.1680e-001
|
||||||
4 6.4000e-002 -6.4000e-002 -2.9600e-001
|
4 6.4000e-002 -6.4000e-002 -2.7000e-001
|
||||||
3 6.4000e-002 6.4000e-002 -2.9600e-001
|
3 6.4000e-002 6.4000e-002 -2.7000e-001
|
||||||
2 -6.4000e-002 6.4000e-002 -2.9600e-001
|
2 -6.4000e-002 6.4000e-002 -2.7000e-001
|
||||||
1 -6.4000e-002 -6.4000e-002 -2.9600e-001
|
1 -6.4000e-002 -6.4000e-002 -2.7000e-001
|
||||||
|
@ -60,3 +60,35 @@ However, each of the DOF of the system may not be relevant for the modes present
|
|||||||
For instance, the translation stage may not vibrate in the Z direction for all the modes identified. Then, we can block this DOF and this simplifies the model.
|
For instance, the translation stage may not vibrate in the Z direction for all the modes identified. Then, we can block this DOF and this simplifies the model.
|
||||||
|
|
||||||
The modal identification done here will thus permit us to determine *which DOF can be neglected*.
|
The modal identification done here will thus permit us to determine *which DOF can be neglected*.
|
||||||
|
|
||||||
|
* Some notes about constraining the number of degrees of freedom
|
||||||
|
We want to have the two eigen matrices.
|
||||||
|
|
||||||
|
They should have the same size $n \times n$ where $n$ is the number of modes as well as the number of degrees of freedom.
|
||||||
|
Thus, if we consider 21 modes, we should restrict our system to have only 21 DOFs.
|
||||||
|
|
||||||
|
Actually, we are measured 6 DOFs of 6 solids, thus we have 36 DOFs.
|
||||||
|
|
||||||
|
From the mode shapes animations, it seems that in the frequency range of interest, the two marbles can be considered as one solid.
|
||||||
|
We thus have 5 solids and 30 DOFs.
|
||||||
|
|
||||||
|
|
||||||
|
In order to determine which DOF can be neglected, two solutions seems possible:
|
||||||
|
- compare the mode shapes
|
||||||
|
- compare the FRFs
|
||||||
|
|
||||||
|
The question is: in which base (frame) should be express the modes shapes and FRFs?
|
||||||
|
Is it meaningful to compare mode shapes as they give no information about the amplitudes of vibration?
|
||||||
|
|
||||||
|
|
||||||
|
| Stage | Motion DOFs | Parasitic DOF | Total DOF | Description of DOF |
|
||||||
|
|---------+-------------+---------------+-----------+--------------------|
|
||||||
|
| Granite | 0 | 3 | 3 | |
|
||||||
|
| Ty | 1 | 2 | 3 | Ty, Rz |
|
||||||
|
| Ry | 1 | 2 | 3 | Ry, |
|
||||||
|
| Rz | 1 | 2 | 3 | Rz, Rx, Ry |
|
||||||
|
| Hexapod | 6 | 0 | 6 | Txyz, Rxyz |
|
||||||
|
|---------+-------------+---------------+-----------+--------------------|
|
||||||
|
| | 9 | 9 | 18 | |
|
||||||
|
#+TBLFM: $4=vsum($2..$3)
|
||||||
|
#+TBLFM: @>$2..$>=vsum(@I..@II)
|
||||||
|
@ -4,6 +4,21 @@ clear; close all; clc;
|
|||||||
%% Intialize Laplace variable
|
%% Intialize Laplace variable
|
||||||
s = zpk('s');
|
s = zpk('s');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% We then import that on =matlab=, and sort them.
|
||||||
|
|
||||||
|
acc_pos = readtable('mat/acc_pos.txt', 'ReadVariableNames', false);
|
||||||
|
acc_pos = table2array(acc_pos(:, 1:4));
|
||||||
|
[~, i] = sort(acc_pos(:, 1));
|
||||||
|
acc_pos = acc_pos(i, 2:4);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% The positions of the sensors relative to the point of interest are shown below.
|
||||||
|
|
||||||
|
data2orgtable([[1:23]', 1000*acc_pos], {}, {'ID', 'x [mm]', 'y [mm]', 'z [mm]'}, ' %.0f ');
|
||||||
|
|
||||||
% Windowing
|
% Windowing
|
||||||
% Windowing is used on the force and response signals.
|
% Windowing is used on the force and response signals.
|
||||||
|
|
||||||
@ -301,9 +316,6 @@ for i = 1:n_meas
|
|||||||
meas_factor = meas_factor*(-1);
|
meas_factor = meas_factor*(-1);
|
||||||
end
|
end
|
||||||
|
|
||||||
% FRFs(acc_i+n_acc*(find(dirs==meas_dir)-1), find(dirs==exc_dir), :) = exc_factor*meas_factor*meas.(sprintf('FFT1_H1_%i_1_Y_ReIm', j));
|
|
||||||
% COHs(acc_i+n_acc*(find(dirs==meas_dir)-1), find(dirs==exc_dir), :) = meas.(sprintf('FFT1_Coh_%i_1_RMS_Y_Val', j));
|
|
||||||
|
|
||||||
FRFs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = exc_factor*meas_factor*meas.(sprintf('FFT1_H1_%i_1_Y_ReIm', j));
|
FRFs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = exc_factor*meas_factor*meas.(sprintf('FFT1_H1_%i_1_Y_ReIm', j));
|
||||||
COHs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = meas.(sprintf('FFT1_Coh_%i_1_RMS_Y_Val', j));
|
COHs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = meas.(sprintf('FFT1_Coh_%i_1_RMS_Y_Val', j));
|
||||||
end
|
end
|
||||||
@ -315,3 +327,30 @@ freqs = meas.FFT1_Coh_10_1_RMS_X_Val;
|
|||||||
% And we save the obtained FRF matrix and Coherence matrix in a =.mat= file.
|
% And we save the obtained FRF matrix and Coherence matrix in a =.mat= file.
|
||||||
|
|
||||||
save('./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs');
|
save('./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs');
|
||||||
|
|
||||||
|
% Solid Bodies considered for further analysis
|
||||||
|
% We consider the following solid bodies for further analysis:
|
||||||
|
% - Bottom Granite
|
||||||
|
% - Top Granite
|
||||||
|
% - Translation Stage
|
||||||
|
% - Tilt Stage
|
||||||
|
% - Spindle
|
||||||
|
% - Hexapod
|
||||||
|
|
||||||
|
% We create a =matlab= structure =solids= that contains the accelerometers ID connected to each solid bodies (as shown on figure [[fig:nass-modal-test]]).
|
||||||
|
|
||||||
|
solids = {};
|
||||||
|
solids.granite_bot = [17, 18, 19, 20];
|
||||||
|
solids.granite_top = [13, 14, 15, 16];
|
||||||
|
solids.ty = [9, 10, 11, 12];
|
||||||
|
solids.ry = [5, 6, 7, 8];
|
||||||
|
solids.rz = [21, 22, 23];
|
||||||
|
solids.hexa = [1, 2, 3, 4];
|
||||||
|
|
||||||
|
solid_names = fields(solids);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% Finally, we save that into a =.mat= file.
|
||||||
|
|
||||||
|
save('mat/geometry.mat', 'solids', 'solid_names', 'acc_pos');
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- 2019-07-03 mer. 17:24 -->
|
<!-- 2019-07-04 jeu. 17:49 -->
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>Modal Analysis - Measurement</title>
|
<title>Modal Analysis - Measurement</title>
|
||||||
@ -280,30 +280,34 @@ for the JavaScript code in this tag.
|
|||||||
<h2>Table of Contents</h2>
|
<h2>Table of Contents</h2>
|
||||||
<div id="text-table-of-contents">
|
<div id="text-table-of-contents">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orgc2c9984">1. Instrumentation Used</a></li>
|
<li><a href="#org85e5106">1. Goal</a></li>
|
||||||
<li><a href="#org8b7c836">2. Structure Preparation and Test Planning</a>
|
<li><a href="#org47f3940">2. Instrumentation Used</a></li>
|
||||||
|
<li><a href="#org977bbae">3. Structure Preparation and Test Planning</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org4e2067f">2.1. Structure Preparation</a></li>
|
<li><a href="#orgde64688">3.1. Structure Preparation</a></li>
|
||||||
<li><a href="#orge159695">2.2. Test Planing</a></li>
|
<li><a href="#orgd83fa83">3.2. Test Planing</a></li>
|
||||||
<li><a href="#org93e879f">2.3. Location of the Accelerometers</a></li>
|
<li><a href="#org3e409fe">3.3. Location of the Accelerometers</a></li>
|
||||||
<li><a href="#org155f119">2.4. Hammer Impacts</a></li>
|
<li><a href="#org7cb5221">3.4. Hammer Impacts</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#orgf4d3979">3. Signal Processing</a>
|
<li><a href="#org2124857">4. Signal Processing</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org5818e34">3.1. Averaging</a></li>
|
<li><a href="#org600eae0">4.1. Averaging</a></li>
|
||||||
<li><a href="#orgc6aff30">3.2. Windowing</a></li>
|
<li><a href="#org83d4969">4.2. Windowing</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#org58ab5bf">4. Force and Response signals</a>
|
<li><a href="#org25e02aa">5. Force and Response signals</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org2216b49">4.1. Raw Force Data</a></li>
|
<li><a href="#orgbf40925">5.1. Raw Force Data</a></li>
|
||||||
<li><a href="#org91939ab">4.2. Raw Response Data</a></li>
|
<li><a href="#org2cf0a3e">5.2. Raw Response Data</a></li>
|
||||||
<li><a href="#orgc34cf19">4.3. Computation of one Frequency Response Function</a></li>
|
<li><a href="#orgad3fa68">5.3. Computation of one Frequency Response Function</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#orgc91b48e">5. Frequency Response Functions and Coherence Results</a></li>
|
<li><a href="#org4bffecd">6. Frequency Response Functions and Coherence Results</a></li>
|
||||||
<li><a href="#org6c0132c">6. Generation of a FRF matrix and a Coherence matrix from the measurements</a></li>
|
<li><a href="#org093edb6">7. <span class="todo TODO">TODO</span> Plot all coherences in one plot</a></li>
|
||||||
|
<li><a href="#org23b7ad3">8. Generation of a FRF matrix and a Coherence matrix from the measurements</a></li>
|
||||||
|
<li><a href="#org8a40769">9. Solid Bodies considered for further analysis</a></li>
|
||||||
|
<li><a href="#org2405c81">10. Notes the solid body assumption</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -315,20 +319,29 @@ All the files (data and Matlab scripts) are accessible <a href="data/modal_frf_c
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgc2c9984" class="outline-2">
|
<div id="outline-container-org85e5106" class="outline-2">
|
||||||
<h2 id="orgc2c9984"><span class="section-number-2">1</span> Instrumentation Used</h2>
|
<h2 id="org85e5106"><span class="section-number-2">1</span> Goal</h2>
|
||||||
<div class="outline-text-2" id="text-1">
|
<div class="outline-text-2" id="text-1">
|
||||||
<p>
|
<p>
|
||||||
|
The goal is to measure the dynamic of the Micro-Station and to extract Frequency Response Functions.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org47f3940" class="outline-2">
|
||||||
|
<h2 id="org47f3940"><span class="section-number-2">2</span> Instrumentation Used</h2>
|
||||||
|
<div class="outline-text-2" id="text-2">
|
||||||
|
<p>
|
||||||
In order to perform to <b>Modal Analysis</b> and to obtain first a <b>Response Model</b>, the following devices are used:
|
In order to perform to <b>Modal Analysis</b> and to obtain first a <b>Response Model</b>, the following devices are used:
|
||||||
</p>
|
</p>
|
||||||
<ul class="org-ul">
|
<ul class="org-ul">
|
||||||
<li>An <b>acquisition system</b> (OROS) with 24bits ADCs (figure <a href="#org8935b8f">1</a>)</li>
|
<li>An <b>acquisition system</b> (OROS) with 24bits ADCs (figure <a href="#org5f44420">1</a>)</li>
|
||||||
<li>3 tri-axis <b>Accelerometers</b> (figure <a href="#org48dfe3a">2</a>) with parameters shown on table <a href="#org4d70939">1</a></li>
|
<li>3 tri-axis <b>Accelerometers</b> (figure <a href="#orgc28a203">2</a>) with parameters shown on table <a href="#org8770ead">1</a></li>
|
||||||
<li>An <b>Instrumented Hammer</b> with various Tips (figure <a href="#org2a2c278">3</a>) (figure <a href="#org982b599">4</a>)</li>
|
<li>An <b>Instrumented Hammer</b> with various Tips (figure <a href="#orge4928f3">3</a>) (figure <a href="#orge94631e">4</a>)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<div id="org8935b8f" class="figure">
|
<div id="org5f44420" class="figure">
|
||||||
<p><img src="img/instrumentation/oros.png" alt="oros.png" width="500px" />
|
<p><img src="img/instrumentation/oros.png" alt="oros.png" width="500px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 1: </span>Acquisition system: OROS</p>
|
<p><span class="figure-number">Figure 1: </span>Acquisition system: OROS</p>
|
||||||
@ -341,13 +354,13 @@ Anti-aliasing filters are also included in the system.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="org48dfe3a" class="figure">
|
<div id="orgc28a203" class="figure">
|
||||||
<p><img src="img/instrumentation/accelero_M393B05.png" alt="accelero_M393B05.png" width="500px" />
|
<p><img src="img/instrumentation/accelero_M393B05.png" alt="accelero_M393B05.png" width="500px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 2: </span>Accelerometer used: M393B05</p>
|
<p><span class="figure-number">Figure 2: </span>Accelerometer used: M393B05</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table id="org4d70939" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
<table id="org8770ead" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||||
<caption class="t-above"><span class="table-number">Table 1:</span> 393B05 Accelerometer Data Sheet</caption>
|
<caption class="t-above"><span class="table-number">Table 1:</span> 393B05 Accelerometer Data Sheet</caption>
|
||||||
|
|
||||||
<colgroup>
|
<colgroup>
|
||||||
@ -390,14 +403,14 @@ It excites more the low frequency range where the coherence is low, the overall
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="org2a2c278" class="figure">
|
<div id="orge4928f3" class="figure">
|
||||||
<p><img src="img/instrumentation/instrumented_hammer.png" alt="instrumented_hammer.png" width="500px" />
|
<p><img src="img/instrumentation/instrumented_hammer.png" alt="instrumented_hammer.png" width="500px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 3: </span>Instrumented Hammer</p>
|
<p><span class="figure-number">Figure 3: </span>Instrumented Hammer</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org982b599" class="figure">
|
<div id="orge94631e" class="figure">
|
||||||
<p><img src="img/instrumentation/hammer_tips.png" alt="hammer_tips.png" width="500px" />
|
<p><img src="img/instrumentation/hammer_tips.png" alt="hammer_tips.png" width="500px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 4: </span>Hammer tips</p>
|
<p><span class="figure-number">Figure 4: </span>Hammer tips</p>
|
||||||
@ -409,13 +422,13 @@ The accelerometers are glued on the structure.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org8b7c836" class="outline-2">
|
<div id="outline-container-org977bbae" class="outline-2">
|
||||||
<h2 id="org8b7c836"><span class="section-number-2">2</span> Structure Preparation and Test Planning</h2>
|
<h2 id="org977bbae"><span class="section-number-2">3</span> Structure Preparation and Test Planning</h2>
|
||||||
<div class="outline-text-2" id="text-2">
|
<div class="outline-text-2" id="text-3">
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org4e2067f" class="outline-3">
|
<div id="outline-container-orgde64688" class="outline-3">
|
||||||
<h3 id="org4e2067f"><span class="section-number-3">2.1</span> Structure Preparation</h3>
|
<h3 id="orgde64688"><span class="section-number-3">3.1</span> Structure Preparation</h3>
|
||||||
<div class="outline-text-3" id="text-2-1">
|
<div class="outline-text-3" id="text-3-1">
|
||||||
<p>
|
<p>
|
||||||
All the stages are turned ON.
|
All the stages are turned ON.
|
||||||
This is done for two reasons:
|
This is done for two reasons:
|
||||||
@ -457,9 +470,9 @@ All other elements have been remove from the granite such as another heavy posit
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orge159695" class="outline-3">
|
<div id="outline-container-orgd83fa83" class="outline-3">
|
||||||
<h3 id="orge159695"><span class="section-number-3">2.2</span> Test Planing</h3>
|
<h3 id="orgd83fa83"><span class="section-number-3">3.2</span> Test Planing</h3>
|
||||||
<div class="outline-text-3" id="text-2-2">
|
<div class="outline-text-3" id="text-3-2">
|
||||||
<p>
|
<p>
|
||||||
The goal is to identify the full \(N \times N\) FRF matrix (where \(N\) is the number of degree of freedom of the system).
|
The goal is to identify the full \(N \times N\) FRF matrix (where \(N\) is the number of degree of freedom of the system).
|
||||||
</p>
|
</p>
|
||||||
@ -491,9 +504,9 @@ The measurement thus consists of:
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org93e879f" class="outline-3">
|
<div id="outline-container-org3e409fe" class="outline-3">
|
||||||
<h3 id="org93e879f"><span class="section-number-3">2.3</span> Location of the Accelerometers</h3>
|
<h3 id="org3e409fe"><span class="section-number-3">3.3</span> Location of the Accelerometers</h3>
|
||||||
<div class="outline-text-3" id="text-2-3">
|
<div class="outline-text-3" id="text-3-3">
|
||||||
<p>
|
<p>
|
||||||
4 tri-axis accelerometers are used for each solid body.
|
4 tri-axis accelerometers are used for each solid body.
|
||||||
</p>
|
</p>
|
||||||
@ -511,11 +524,11 @@ The position of the accelerometers are:
|
|||||||
</p>
|
</p>
|
||||||
<ul class="org-ul">
|
<ul class="org-ul">
|
||||||
<li>4 on the first granite</li>
|
<li>4 on the first granite</li>
|
||||||
<li>4 on the second granite (figure <a href="#org552acb7">5</a>)</li>
|
<li>4 on the second granite (figure <a href="#org7b547b6">5</a>)</li>
|
||||||
<li>4 on top of the translation stage (figure <a href="#orgd191f19">6</a>)</li>
|
<li>4 on top of the translation stage (figure <a href="#orgf41551b">6</a>)</li>
|
||||||
<li>4 on top of the tilt stage</li>
|
<li>4 on top of the tilt stage</li>
|
||||||
<li>3 on top of the spindle</li>
|
<li>3 on top of the spindle</li>
|
||||||
<li>4 on top of the hexapod (figure <a href="#org0b791f2">7</a>)</li>
|
<li>4 on top of the hexapod (figure <a href="#org168dfba">7</a>)</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -523,43 +536,43 @@ In total, 23 accelerometers are used: <b>69 DOFs are thus measured</b>.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The position and orientation of all the accelerometers used are shown on figure <a href="#org29de56f">8</a>.
|
The position and orientation of all the accelerometers used are shown on figure <a href="#org92f8aa8">8</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The precise determination of the position of each accelerometer is done using the SolidWorks model (shown on figure <a href="#org6cedca1">9</a>).
|
The precise determination of the position of each accelerometer is done using the SolidWorks model (shown on figure <a href="#org87fdd26">9</a>).
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="org552acb7" class="figure">
|
<div id="org7b547b6" class="figure">
|
||||||
<p><img src="img/accelerometers/accelerometers_granite2_overview.jpg" alt="accelerometers_granite2_overview.jpg" width="500px" />
|
<p><img src="img/accelerometers/accelerometers_granite2_overview.jpg" alt="accelerometers_granite2_overview.jpg" width="500px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 5: </span>Accelerometers located on the top granite</p>
|
<p><span class="figure-number">Figure 5: </span>Accelerometers located on the top granite</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgd191f19" class="figure">
|
<div id="orgf41551b" class="figure">
|
||||||
<p><img src="img/accelerometers/accelerometers_ty_overview.jpg" alt="accelerometers_ty_overview.jpg" width="500px" />
|
<p><img src="img/accelerometers/accelerometers_ty_overview.jpg" alt="accelerometers_ty_overview.jpg" width="500px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 6: </span>Accelerometers located on top of the translation stage</p>
|
<p><span class="figure-number">Figure 6: </span>Accelerometers located on top of the translation stage</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org0b791f2" class="figure">
|
<div id="org168dfba" class="figure">
|
||||||
<p><img src="img/accelerometers/accelerometers_hexa_overview.jpg" alt="accelerometers_hexa_overview.jpg" width="500px" />
|
<p><img src="img/accelerometers/accelerometers_hexa_overview.jpg" alt="accelerometers_hexa_overview.jpg" width="500px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 7: </span>Accelerometers located on the Hexapod</p>
|
<p><span class="figure-number">Figure 7: </span>Accelerometers located on the Hexapod</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org29de56f" class="figure">
|
<div id="org92f8aa8" class="figure">
|
||||||
<p><img src="figs/nass-modal-test.png" alt="nass-modal-test.png" width="800px" />
|
<p><img src="figs/nass-modal-test.png" alt="nass-modal-test.png" width="800px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 8: </span>Position and orientation of the accelerometer used</p>
|
<p><span class="figure-number">Figure 8: </span>Position and orientation of the accelerometer used</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org6cedca1" class="figure">
|
<div id="org87fdd26" class="figure">
|
||||||
<p><img src="img/location_accelerometers.png" alt="location_accelerometers.png" width="800px" />
|
<p><img src="img/location_accelerometers.png" alt="location_accelerometers.png" width="800px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 9: </span>Position of the accelerometers using SolidWorks</p>
|
<p><span class="figure-number">Figure 9: </span>Position of the accelerometers using SolidWorks</p>
|
||||||
@ -569,9 +582,27 @@ The precise determination of the position of each accelerometer is done using th
|
|||||||
The precise position of all the 23 accelerometer with respect to a frame located at the point of interest (located 270mm above the top platform of the hexapod) is shown below. The values are in meter.
|
The precise position of all the 23 accelerometer with respect to a frame located at the point of interest (located 270mm above the top platform of the hexapod) is shown below. The values are in meter.
|
||||||
They are contained in the <code>mat/id31_nanostation.cfg</code> file.
|
They are contained in the <code>mat/id31_nanostation.cfg</code> file.
|
||||||
</p>
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-bash">cat mat/id31_nanostation.cfg | grep NODES -A <span class="org-highlight-numbers-number">23</span> | sed <span class="org-string">'/\s\+[0-9]\+/!d'</span> | sed <span class="org-string">'s/\(.*\)\s\+0\s\+.\+/\1/'</span> > mat/acc_pos.txt
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
<p>
|
||||||
|
We then import that on <code>matlab</code>, and sort them.
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">acc_pos = readtable<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/acc_pos.txt', 'ReadVariableNames'</span>, false<span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
acc_pos = table2array<span class="org-rainbow-delimiters-depth-1">(</span>acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">1</span><span class="org-type">:</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-type">~</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">]</span> = sort<span class="org-rainbow-delimiters-depth-1">(</span>acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
acc_pos = acc_pos<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">i</span>, <span class="org-highlight-numbers-number">2</span><span class="org-type">:</span><span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The positions of the sensors relative to the point of interest are shown below (table <a href="#org65ae8c9">2</a>).
|
||||||
|
</p>
|
||||||
|
<table id="org65ae8c9" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||||
|
<caption class="t-above"><span class="table-number">Table 2:</span> position of the accelerometers</caption>
|
||||||
|
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col class="org-right" />
|
<col class="org-right" />
|
||||||
@ -585,186 +616,186 @@ They are contained in the <code>mat/id31_nanostation.cfg</code> file.
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col" class="org-right">ID</th>
|
<th scope="col" class="org-right">ID</th>
|
||||||
<th scope="col" class="org-right">X[m]</th>
|
<th scope="col" class="org-right">x [mm]</th>
|
||||||
<th scope="col" class="org-right">Y[m]</th>
|
<th scope="col" class="org-right">y [mm]</th>
|
||||||
<th scope="col" class="org-right">Z[m]</th>
|
<th scope="col" class="org-right">z [mm]</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">1</td>
|
<td class="org-right">1</td>
|
||||||
<td class="org-right">-6.4000e-002</td>
|
<td class="org-right">-64</td>
|
||||||
<td class="org-right">-6.4000e-002</td>
|
<td class="org-right">-64</td>
|
||||||
<td class="org-right">-2.7000e-001</td>
|
<td class="org-right">-270</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">2</td>
|
<td class="org-right">2</td>
|
||||||
<td class="org-right">-6.4000e-002</td>
|
<td class="org-right">-64</td>
|
||||||
<td class="org-right">6.4000e-002</td>
|
<td class="org-right">64</td>
|
||||||
<td class="org-right">-2.7000e-001</td>
|
<td class="org-right">-270</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">3</td>
|
<td class="org-right">3</td>
|
||||||
<td class="org-right">6.4000e-002</td>
|
<td class="org-right">64</td>
|
||||||
<td class="org-right">6.4000e-002</td>
|
<td class="org-right">64</td>
|
||||||
<td class="org-right">-2.7000e-001</td>
|
<td class="org-right">-270</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">4</td>
|
<td class="org-right">4</td>
|
||||||
<td class="org-right">6.4000e-002</td>
|
<td class="org-right">64</td>
|
||||||
<td class="org-right">-6.4000e-002</td>
|
<td class="org-right">-64</td>
|
||||||
<td class="org-right">-2.7000e-001</td>
|
<td class="org-right">-270</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">5</td>
|
<td class="org-right">5</td>
|
||||||
<td class="org-right">-3.8500e-001</td>
|
<td class="org-right">-385</td>
|
||||||
<td class="org-right">-3.0000e-001</td>
|
<td class="org-right">-300</td>
|
||||||
<td class="org-right">-4.1680e-001</td>
|
<td class="org-right">-417</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">6</td>
|
<td class="org-right">6</td>
|
||||||
<td class="org-right">-4.2000e-001</td>
|
<td class="org-right">-420</td>
|
||||||
<td class="org-right">2.8000e-001</td>
|
<td class="org-right">280</td>
|
||||||
<td class="org-right">-4.1680e-001</td>
|
<td class="org-right">-417</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">7</td>
|
<td class="org-right">7</td>
|
||||||
<td class="org-right">4.2000e-001</td>
|
<td class="org-right">420</td>
|
||||||
<td class="org-right">2.8000e-001</td>
|
<td class="org-right">280</td>
|
||||||
<td class="org-right">-4.1680e-001</td>
|
<td class="org-right">-417</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">8</td>
|
<td class="org-right">8</td>
|
||||||
<td class="org-right">3.8000e-001</td>
|
<td class="org-right">380</td>
|
||||||
<td class="org-right">-3.0000e-001</td>
|
<td class="org-right">-300</td>
|
||||||
<td class="org-right">-4.1680e-001</td>
|
<td class="org-right">-417</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">9</td>
|
<td class="org-right">9</td>
|
||||||
<td class="org-right">-4.7500e-001</td>
|
<td class="org-right">-475</td>
|
||||||
<td class="org-right">-4.1400e-001</td>
|
<td class="org-right">-414</td>
|
||||||
<td class="org-right">-4.2730e-001</td>
|
<td class="org-right">-427</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">10</td>
|
<td class="org-right">10</td>
|
||||||
<td class="org-right">-4.6500e-001</td>
|
<td class="org-right">-465</td>
|
||||||
<td class="org-right">4.0700e-001</td>
|
<td class="org-right">407</td>
|
||||||
<td class="org-right">-4.2730e-001</td>
|
<td class="org-right">-427</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">11</td>
|
<td class="org-right">11</td>
|
||||||
<td class="org-right">4.7500e-001</td>
|
<td class="org-right">475</td>
|
||||||
<td class="org-right">4.2400e-001</td>
|
<td class="org-right">424</td>
|
||||||
<td class="org-right">-4.2730e-001</td>
|
<td class="org-right">-427</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">12</td>
|
<td class="org-right">12</td>
|
||||||
<td class="org-right">4.7500e-001</td>
|
<td class="org-right">475</td>
|
||||||
<td class="org-right">-4.1900e-001</td>
|
<td class="org-right">-419</td>
|
||||||
<td class="org-right">-4.2730e-001</td>
|
<td class="org-right">-427</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">13</td>
|
<td class="org-right">13</td>
|
||||||
<td class="org-right">-3.2000e-001</td>
|
<td class="org-right">-320</td>
|
||||||
<td class="org-right">-4.4600e-001</td>
|
<td class="org-right">-446</td>
|
||||||
<td class="org-right">-7.8560e-001</td>
|
<td class="org-right">-786</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">14</td>
|
<td class="org-right">14</td>
|
||||||
<td class="org-right">-4.8000e-001</td>
|
<td class="org-right">-480</td>
|
||||||
<td class="org-right">5.3400e-001</td>
|
<td class="org-right">534</td>
|
||||||
<td class="org-right">-7.8560e-001</td>
|
<td class="org-right">-786</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">15</td>
|
<td class="org-right">15</td>
|
||||||
<td class="org-right">4.5000e-001</td>
|
<td class="org-right">450</td>
|
||||||
<td class="org-right">5.3400e-001</td>
|
<td class="org-right">534</td>
|
||||||
<td class="org-right">-7.8560e-001</td>
|
<td class="org-right">-786</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">16</td>
|
<td class="org-right">16</td>
|
||||||
<td class="org-right">2.9500e-001</td>
|
<td class="org-right">295</td>
|
||||||
<td class="org-right">-4.8100e-001</td>
|
<td class="org-right">-481</td>
|
||||||
<td class="org-right">-7.8560e-001</td>
|
<td class="org-right">-786</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">17</td>
|
<td class="org-right">17</td>
|
||||||
<td class="org-right">-7.3000e-001</td>
|
<td class="org-right">-730</td>
|
||||||
<td class="org-right">-5.2600e-001</td>
|
<td class="org-right">-526</td>
|
||||||
<td class="org-right">-9.5060e-001</td>
|
<td class="org-right">-951</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">18</td>
|
<td class="org-right">18</td>
|
||||||
<td class="org-right">-7.3500e-001</td>
|
<td class="org-right">-735</td>
|
||||||
<td class="org-right">8.1400e-001</td>
|
<td class="org-right">814</td>
|
||||||
<td class="org-right">-9.5060e-001</td>
|
<td class="org-right">-951</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">19</td>
|
<td class="org-right">19</td>
|
||||||
<td class="org-right">8.7500e-001</td>
|
<td class="org-right">875</td>
|
||||||
<td class="org-right">7.9900e-001</td>
|
<td class="org-right">799</td>
|
||||||
<td class="org-right">-9.5060e-001</td>
|
<td class="org-right">-951</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">20</td>
|
<td class="org-right">20</td>
|
||||||
<td class="org-right">8.6490e-001</td>
|
<td class="org-right">865</td>
|
||||||
<td class="org-right">-5.0600e-001</td>
|
<td class="org-right">-506</td>
|
||||||
<td class="org-right">-9.5060e-001</td>
|
<td class="org-right">-951</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">21</td>
|
<td class="org-right">21</td>
|
||||||
<td class="org-right">-1.5500e-001</td>
|
<td class="org-right">-155</td>
|
||||||
<td class="org-right">-9.0000e-002</td>
|
<td class="org-right">-90</td>
|
||||||
<td class="org-right">-5.9400e-001</td>
|
<td class="org-right">-594</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">22</td>
|
<td class="org-right">22</td>
|
||||||
<td class="org-right">0.0000e+000</td>
|
<td class="org-right">0</td>
|
||||||
<td class="org-right">1.8000e-001</td>
|
<td class="org-right">180</td>
|
||||||
<td class="org-right">-5.9400e-001</td>
|
<td class="org-right">-594</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="org-right">23</td>
|
<td class="org-right">23</td>
|
||||||
<td class="org-right">1.5500e-001</td>
|
<td class="org-right">155</td>
|
||||||
<td class="org-right">-9.0000e-002</td>
|
<td class="org-right">-90</td>
|
||||||
<td class="org-right">-5.9400e-001</td>
|
<td class="org-right">-594</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org155f119" class="outline-3">
|
<div id="outline-container-org7cb5221" class="outline-3">
|
||||||
<h3 id="org155f119"><span class="section-number-3">2.4</span> Hammer Impacts</h3>
|
<h3 id="org7cb5221"><span class="section-number-3">3.4</span> Hammer Impacts</h3>
|
||||||
<div class="outline-text-3" id="text-2-4">
|
<div class="outline-text-3" id="text-3-4">
|
||||||
<p>
|
<p>
|
||||||
Only 3 impact points are used.
|
Only 3 impact points are used.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The impact points are shown on figures <a href="#org6cb6a5e">10</a>, <a href="#org9228a0f">11</a> and <a href="#orgf3797df">12</a>.
|
The impact points are shown on figures <a href="#orge9d3fcb">10</a>, <a href="#org689764c">11</a> and <a href="#orgb4d4ec1">12</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -772,21 +803,21 @@ We chose this excitation point as it seems to excite all the modes in the freque
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="org6cb6a5e" class="figure">
|
<div id="orge9d3fcb" class="figure">
|
||||||
<p><img src="img/impacts/hammer_x.gif" alt="hammer_x.gif" width="300px" />
|
<p><img src="img/impacts/hammer_x.gif" alt="hammer_x.gif" width="300px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 10: </span>Hammer Blow in the X direction</p>
|
<p><span class="figure-number">Figure 10: </span>Hammer Blow in the X direction</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org9228a0f" class="figure">
|
<div id="org689764c" class="figure">
|
||||||
<p><img src="img/impacts/hammer_y.gif" alt="hammer_y.gif" width="300px" />
|
<p><img src="img/impacts/hammer_y.gif" alt="hammer_y.gif" width="300px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 11: </span>Hammer Blow in the Y direction</p>
|
<p><span class="figure-number">Figure 11: </span>Hammer Blow in the Y direction</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgf3797df" class="figure">
|
<div id="orgb4d4ec1" class="figure">
|
||||||
<p><img src="img/impacts/hammer_z.gif" alt="hammer_z.gif" width="300px" />
|
<p><img src="img/impacts/hammer_z.gif" alt="hammer_z.gif" width="300px" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 12: </span>Hammer Blow in the Z direction</p>
|
<p><span class="figure-number">Figure 12: </span>Hammer Blow in the Z direction</p>
|
||||||
@ -795,20 +826,20 @@ We chose this excitation point as it seems to excite all the modes in the freque
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgf4d3979" class="outline-2">
|
<div id="outline-container-org2124857" class="outline-2">
|
||||||
<h2 id="orgf4d3979"><span class="section-number-2">3</span> Signal Processing</h2>
|
<h2 id="org2124857"><span class="section-number-2">4</span> Signal Processing</h2>
|
||||||
<div class="outline-text-2" id="text-3">
|
<div class="outline-text-2" id="text-4">
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org5818e34" class="outline-3">
|
<div id="outline-container-org600eae0" class="outline-3">
|
||||||
<h3 id="org5818e34"><span class="section-number-3">3.1</span> Averaging</h3>
|
<h3 id="org600eae0"><span class="section-number-3">4.1</span> Averaging</h3>
|
||||||
<div class="outline-text-3" id="text-3-1">
|
<div class="outline-text-3" id="text-4-1">
|
||||||
<p>
|
<p>
|
||||||
The measurements are averaged 10 times corresponding to 10 hammer impacts in order to reduce the effect of random noise.
|
The measurements are averaged 10 times corresponding to 10 hammer impacts in order to reduce the effect of random noise.
|
||||||
The parameters for the impact test are shown on table <a href="#orga755bcd">2</a>.
|
The parameters for the impact test are shown on table <a href="#orgc7dedc2">3</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<table id="orga755bcd" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
<table id="orgc7dedc2" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
||||||
<caption class="t-above"><span class="table-number">Table 2:</span> Impact test parameters</caption>
|
<caption class="t-above"><span class="table-number">Table 3:</span> Impact test parameters</caption>
|
||||||
|
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col class="org-left" />
|
<col class="org-left" />
|
||||||
@ -845,15 +876,15 @@ The parameters for the impact test are shown on table <a href="#orga755bcd">2</a
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgc6aff30" class="outline-3">
|
<div id="outline-container-org83d4969" class="outline-3">
|
||||||
<h3 id="orgc6aff30"><span class="section-number-3">3.2</span> Windowing</h3>
|
<h3 id="org83d4969"><span class="section-number-3">4.2</span> Windowing</h3>
|
||||||
<div class="outline-text-3" id="text-3-2">
|
<div class="outline-text-3" id="text-4-2">
|
||||||
<p>
|
<p>
|
||||||
Windowing is used on the force and response signals.
|
Windowing is used on the force and response signals.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
A boxcar window (figure <a href="#orgd10fc79">13</a>) is used for the force signal as once the impact on the structure is done, the measured signal is meaningless.
|
A boxcar window (figure <a href="#org36f5bec">13</a>) is used for the force signal as once the impact on the structure is done, the measured signal is meaningless.
|
||||||
The parameters are:
|
The parameters are:
|
||||||
</p>
|
</p>
|
||||||
<ul class="org-ul">
|
<ul class="org-ul">
|
||||||
@ -862,14 +893,14 @@ The parameters are:
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgd10fc79" class="figure">
|
<div id="org36f5bec" class="figure">
|
||||||
<p><img src="figs/windowing_force_signal.png" alt="windowing_force_signal.png" />
|
<p><img src="figs/windowing_force_signal.png" alt="windowing_force_signal.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 13: </span>Window used for the force signal</p>
|
<p><span class="figure-number">Figure 13: </span>Window used for the force signal</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
An exponential window (figure <a href="#orgdd629ee">14</a>) is used for the response signal as we are measuring transient signals and most of the information is located at the beginning of the signal.
|
An exponential window (figure <a href="#orgf99890f">14</a>) is used for the response signal as we are measuring transient signals and most of the information is located at the beginning of the signal.
|
||||||
The parameters are:
|
The parameters are:
|
||||||
</p>
|
</p>
|
||||||
<ul class="org-ul">
|
<ul class="org-ul">
|
||||||
@ -886,7 +917,7 @@ The parameters are:
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgdd629ee" class="figure">
|
<div id="orgf99890f" class="figure">
|
||||||
<p><img src="figs/windowing_response_signal.png" alt="windowing_response_signal.png" />
|
<p><img src="figs/windowing_response_signal.png" alt="windowing_response_signal.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 14: </span>Window used for the response signals</p>
|
<p><span class="figure-number">Figure 14: </span>Window used for the response signals</p>
|
||||||
@ -895,9 +926,9 @@ The parameters are:
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org58ab5bf" class="outline-2">
|
<div id="outline-container-org25e02aa" class="outline-2">
|
||||||
<h2 id="org58ab5bf"><span class="section-number-2">4</span> Force and Response signals</h2>
|
<h2 id="org25e02aa"><span class="section-number-2">5</span> Force and Response signals</h2>
|
||||||
<div class="outline-text-2" id="text-4">
|
<div class="outline-text-2" id="text-5">
|
||||||
<p>
|
<p>
|
||||||
Let's load some obtained data to look at the force and response signals.
|
Let's load some obtained data to look at the force and response signals.
|
||||||
</p>
|
</p>
|
||||||
@ -908,33 +939,33 @@ Let's load some obtained data to look at the force and response signals.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org2216b49" class="outline-3">
|
<div id="outline-container-orgbf40925" class="outline-3">
|
||||||
<h3 id="org2216b49"><span class="section-number-3">4.1</span> Raw Force Data</h3>
|
<h3 id="orgbf40925"><span class="section-number-3">5.1</span> Raw Force Data</h3>
|
||||||
<div class="outline-text-3" id="text-4-1">
|
<div class="outline-text-3" id="text-5-1">
|
||||||
<p>
|
<p>
|
||||||
The force input for the first measurement is shown on figure <a href="#org22bc8af">15</a>. We can see 10 impacts, one zoom on one impact is shown on figure <a href="#org6947c62">16</a>.
|
The force input for the first measurement is shown on figure <a href="#org01af530">15</a>. We can see 10 impacts, one zoom on one impact is shown on figure <a href="#org90778c7">16</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The Fourier transform of the force is shown on figure <a href="#org3431ecd">17</a>. This has been obtained without any windowing.
|
The Fourier transform of the force is shown on figure <a href="#orga594684">17</a>. This has been obtained without any windowing.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="org22bc8af" class="figure">
|
<div id="org01af530" class="figure">
|
||||||
<p><img src="figs/raw_data_force.png" alt="raw_data_force.png" />
|
<p><img src="figs/raw_data_force.png" alt="raw_data_force.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 15: </span>Raw Force Data from Hammer Blow</p>
|
<p><span class="figure-number">Figure 15: </span>Raw Force Data from Hammer Blow</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org6947c62" class="figure">
|
<div id="org90778c7" class="figure">
|
||||||
<p><img src="figs/raw_data_force_zoom.png" alt="raw_data_force_zoom.png" />
|
<p><img src="figs/raw_data_force_zoom.png" alt="raw_data_force_zoom.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 16: </span>Raw Force Data from Hammer Blow - Zoom</p>
|
<p><span class="figure-number">Figure 16: </span>Raw Force Data from Hammer Blow - Zoom</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org3431ecd" class="figure">
|
<div id="orga594684" class="figure">
|
||||||
<p><img src="figs/fourier_transfor_force_impact.png" alt="fourier_transfor_force_impact.png" />
|
<p><img src="figs/fourier_transfor_force_impact.png" alt="fourier_transfor_force_impact.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 17: </span>Fourier Transform of the 10 force impacts for the first measurement</p>
|
<p><span class="figure-number">Figure 17: </span>Fourier Transform of the 10 force impacts for the first measurement</p>
|
||||||
@ -942,33 +973,33 @@ The Fourier transform of the force is shown on figure <a href="#org3431ecd">17</
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org91939ab" class="outline-3">
|
<div id="outline-container-org2cf0a3e" class="outline-3">
|
||||||
<h3 id="org91939ab"><span class="section-number-3">4.2</span> Raw Response Data</h3>
|
<h3 id="org2cf0a3e"><span class="section-number-3">5.2</span> Raw Response Data</h3>
|
||||||
<div class="outline-text-3" id="text-4-2">
|
<div class="outline-text-3" id="text-5-2">
|
||||||
<p>
|
<p>
|
||||||
The response signal for the first measurement is shown on figure <a href="#orgf99383e">18</a>. One zoom on one response is shown on figure <a href="#orgb1fed61">19</a>.
|
The response signal for the first measurement is shown on figure <a href="#org2612da5">18</a>. One zoom on one response is shown on figure <a href="#org4bfecd1">19</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The Fourier transform of the response signals is shown on figure <a href="#org9e5f2eb">20</a>. This has been obtained without any windowing.
|
The Fourier transform of the response signals is shown on figure <a href="#org716c433">20</a>. This has been obtained without any windowing.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgf99383e" class="figure">
|
<div id="org2612da5" class="figure">
|
||||||
<p><img src="figs/raw_data_acceleration.png" alt="raw_data_acceleration.png" />
|
<p><img src="figs/raw_data_acceleration.png" alt="raw_data_acceleration.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 18: </span>Raw Acceleration Data from Accelerometer</p>
|
<p><span class="figure-number">Figure 18: </span>Raw Acceleration Data from Accelerometer</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="orgb1fed61" class="figure">
|
<div id="org4bfecd1" class="figure">
|
||||||
<p><img src="figs/raw_data_acceleration_zoom.png" alt="raw_data_acceleration_zoom.png" />
|
<p><img src="figs/raw_data_acceleration_zoom.png" alt="raw_data_acceleration_zoom.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 19: </span>Raw Acceleration Data from Accelerometer - Zoom</p>
|
<p><span class="figure-number">Figure 19: </span>Raw Acceleration Data from Accelerometer - Zoom</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org9e5f2eb" class="figure">
|
<div id="org716c433" class="figure">
|
||||||
<p><img src="figs/fourier_transform_response_signals.png" alt="fourier_transform_response_signals.png" />
|
<p><img src="figs/fourier_transform_response_signals.png" alt="fourier_transform_response_signals.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 20: </span>Fourier transform of the measured response signals</p>
|
<p><span class="figure-number">Figure 20: </span>Fourier transform of the measured response signals</p>
|
||||||
@ -976,15 +1007,15 @@ The Fourier transform of the response signals is shown on figure <a href="#org9e
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgc34cf19" class="outline-3">
|
<div id="outline-container-orgad3fa68" class="outline-3">
|
||||||
<h3 id="orgc34cf19"><span class="section-number-3">4.3</span> Computation of one Frequency Response Function</h3>
|
<h3 id="orgad3fa68"><span class="section-number-3">5.3</span> Computation of one Frequency Response Function</h3>
|
||||||
<div class="outline-text-3" id="text-4-3">
|
<div class="outline-text-3" id="text-5-3">
|
||||||
<p>
|
<p>
|
||||||
Now that we have obtained the Fourier transform of both the force input and the response signal, we can compute the Frequency Response Function from the force to the acceleration.
|
Now that we have obtained the Fourier transform of both the force input and the response signal, we can compute the Frequency Response Function from the force to the acceleration.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
We then compare the result obtained with the FRF computed by the modal software (figure <a href="#org01c1f1c">21</a>).
|
We then compare the result obtained with the FRF computed by the modal software (figure <a href="#orgc57fff5">21</a>).
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -1001,7 +1032,7 @@ In the following analysis, FRF computed from the software will be used.
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org01c1f1c" class="figure">
|
<div id="orgc57fff5" class="figure">
|
||||||
<p><img src="figs/frf_comparison_software.png" alt="frf_comparison_software.png" />
|
<p><img src="figs/frf_comparison_software.png" alt="frf_comparison_software.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 21: </span>Comparison of the computed FRF from the Fourier transform and using the modal software</p>
|
<p><span class="figure-number">Figure 21: </span>Comparison of the computed FRF from the Fourier transform and using the modal software</p>
|
||||||
@ -1010,9 +1041,9 @@ In the following analysis, FRF computed from the software will be used.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgc91b48e" class="outline-2">
|
<div id="outline-container-org4bffecd" class="outline-2">
|
||||||
<h2 id="orgc91b48e"><span class="section-number-2">5</span> Frequency Response Functions and Coherence Results</h2>
|
<h2 id="org4bffecd"><span class="section-number-2">6</span> Frequency Response Functions and Coherence Results</h2>
|
||||||
<div class="outline-text-2" id="text-5">
|
<div class="outline-text-2" id="text-6">
|
||||||
<p>
|
<p>
|
||||||
Let's see one computed Frequency Response Function and one coherence in order to attest the quality of the measurement.
|
Let's see one computed Frequency Response Function and one coherence in order to attest the quality of the measurement.
|
||||||
</p>
|
</p>
|
||||||
@ -1026,22 +1057,22 @@ First, we load the data.
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
And we plot on figure <a href="#org2962423">22</a> the frequency response function from the force applied in the \(X\) direction at the location of the accelerometer number 11 to the acceleration in the \(X\) direction as measured by the first accelerometer located on the top platform of the hexapod.
|
And we plot on figure <a href="#org0618b41">22</a> the frequency response function from the force applied in the \(X\) direction at the location of the accelerometer number 11 to the acceleration in the \(X\) direction as measured by the first accelerometer located on the top platform of the hexapod.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The coherence associated is shown on figure <a href="#org2962423">22</a>.
|
The coherence associated is shown on figure <a href="#org0618b41">22</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<div id="org2962423" class="figure">
|
<div id="org0618b41" class="figure">
|
||||||
<p><img src="figs/frf_result_example.png" alt="frf_result_example.png" />
|
<p><img src="figs/frf_result_example.png" alt="frf_result_example.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 22: </span>Example of one measured FRF</p>
|
<p><span class="figure-number">Figure 22: </span>Example of one measured FRF</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="org46c579a" class="figure">
|
<div id="org8a24269" class="figure">
|
||||||
<p><img src="figs/coh_result_example.png" alt="coh_result_example.png" />
|
<p><img src="figs/coh_result_example.png" alt="coh_result_example.png" />
|
||||||
</p>
|
</p>
|
||||||
<p><span class="figure-number">Figure 23: </span>Example of one measured Coherence</p>
|
<p><span class="figure-number">Figure 23: </span>Example of one measured Coherence</p>
|
||||||
@ -1049,9 +1080,12 @@ The coherence associated is shown on figure <a href="#org2962423">22</a>.
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org6c0132c" class="outline-2">
|
<div id="outline-container-org093edb6" class="outline-2">
|
||||||
<h2 id="org6c0132c"><span class="section-number-2">6</span> Generation of a FRF matrix and a Coherence matrix from the measurements</h2>
|
<h2 id="org093edb6"><span class="section-number-2">7</span> <span class="todo TODO">TODO</span> Plot all coherences in one plot</h2>
|
||||||
<div class="outline-text-2" id="text-6">
|
</div>
|
||||||
|
<div id="outline-container-org23b7ad3" class="outline-2">
|
||||||
|
<h2 id="org23b7ad3"><span class="section-number-2">8</span> Generation of a FRF matrix and a Coherence matrix from the measurements</h2>
|
||||||
|
<div class="outline-text-2" id="text-8">
|
||||||
<p>
|
<p>
|
||||||
We want here to combine all the Frequency Response Functions measured into one big array called the <b>Frequency Response Matrix</b>.
|
We want here to combine all the Frequency Response Functions measured into one big array called the <b>Frequency Response Matrix</b>.
|
||||||
</p>
|
</p>
|
||||||
@ -1128,9 +1162,6 @@ COHs = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="or
|
|||||||
meas_factor = meas_factor<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-4">)</span>;
|
meas_factor = meas_factor<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-4">)</span>;
|
||||||
<span class="org-keyword">end</span>
|
<span class="org-keyword">end</span>
|
||||||
|
|
||||||
% FRFs(acc_i<span class="org-type">+</span>n_acc<span class="org-type">*</span>(find(dirs<span class="org-type">==</span>meas_dir)<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span>), find(dirs<span class="org-type">==</span>exc_dir), <span class="org-type">:</span>) = exc_factor<span class="org-type">*</span>meas_factor<span class="org-type">*</span>meas.(sprintf('FFT1_H1_<span class="org-comment">%i_1_Y_ReIm', j));</span>
|
|
||||||
% COHs(acc_i<span class="org-type">+</span>n_acc<span class="org-type">*</span>(find(dirs<span class="org-type">==</span>meas_dir)<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span>), find(dirs<span class="org-type">==</span>exc_dir), <span class="org-type">:</span>) = meas.(sprintf('FFT1_Coh_<span class="org-comment">%i_1_RMS_Y_Val', j));</span>
|
|
||||||
|
|
||||||
FRFs<span class="org-rainbow-delimiters-depth-4">(</span>find<span class="org-rainbow-delimiters-depth-5">(</span>dirs<span class="org-type">==</span>meas_dir<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span>, find<span class="org-rainbow-delimiters-depth-5">(</span>dirs<span class="org-type">==</span>exc_dir<span class="org-rainbow-delimiters-depth-5">)</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span> = exc_factor<span class="org-type">*</span>meas_factor<span class="org-type">*</span>meas.<span class="org-rainbow-delimiters-depth-4">(</span>sprintf<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">'FFT1_H1_%i_1_Y_ReIm'</span>, <span class="org-constant">j</span>));
|
FRFs<span class="org-rainbow-delimiters-depth-4">(</span>find<span class="org-rainbow-delimiters-depth-5">(</span>dirs<span class="org-type">==</span>meas_dir<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span>, find<span class="org-rainbow-delimiters-depth-5">(</span>dirs<span class="org-type">==</span>exc_dir<span class="org-rainbow-delimiters-depth-5">)</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span> = exc_factor<span class="org-type">*</span>meas_factor<span class="org-type">*</span>meas.<span class="org-rainbow-delimiters-depth-4">(</span>sprintf<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">'FFT1_H1_%i_1_Y_ReIm'</span>, <span class="org-constant">j</span>));
|
||||||
COHs<span class="org-rainbow-delimiters-depth-6">(</span>find<span class="org-rainbow-delimiters-depth-7">(</span>dirs<span class="org-type">==</span>meas_dir<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-7">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-7">)</span>, find<span class="org-rainbow-delimiters-depth-7">(</span>dirs<span class="org-type">==</span>exc_dir<span class="org-rainbow-delimiters-depth-7">)</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-6">)</span> = meas.<span class="org-rainbow-delimiters-depth-6">(</span>sprintf<span class="org-rainbow-delimiters-depth-7">(</span><span class="org-string">'FFT1_Coh_%i_1_RMS_Y_Val'</span>, <span class="org-constant">j</span>));
|
COHs<span class="org-rainbow-delimiters-depth-6">(</span>find<span class="org-rainbow-delimiters-depth-7">(</span>dirs<span class="org-type">==</span>meas_dir<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-7">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-7">)</span>, find<span class="org-rainbow-delimiters-depth-7">(</span>dirs<span class="org-type">==</span>exc_dir<span class="org-rainbow-delimiters-depth-7">)</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-6">)</span> = meas.<span class="org-rainbow-delimiters-depth-6">(</span>sprintf<span class="org-rainbow-delimiters-depth-7">(</span><span class="org-string">'FFT1_Coh_%i_1_RMS_Y_Val'</span>, <span class="org-constant">j</span>));
|
||||||
<span class="org-keyword">end</span>
|
<span class="org-keyword">end</span>
|
||||||
@ -1145,13 +1176,140 @@ And we save the obtained FRF matrix and Coherence matrix in a <code>.mat</code>
|
|||||||
<div class="org-src-container">
|
<div class="org-src-container">
|
||||||
<pre class="src src-matlab">save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
<pre class="src src-matlab">save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
</pre>
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-org8a40769" class="outline-2">
|
||||||
|
<h2 id="org8a40769"><span class="section-number-2">9</span> Solid Bodies considered for further analysis</h2>
|
||||||
|
<div class="outline-text-2" id="text-9">
|
||||||
|
<p>
|
||||||
|
We consider the following solid bodies for further analysis:
|
||||||
|
</p>
|
||||||
|
<ul class="org-ul">
|
||||||
|
<li>Bottom Granite</li>
|
||||||
|
<li>Top Granite</li>
|
||||||
|
<li>Translation Stage</li>
|
||||||
|
<li>Tilt Stage</li>
|
||||||
|
<li>Spindle</li>
|
||||||
|
<li>Hexapod</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We create a <code>matlab</code> structure <code>solids</code> that contains the accelerometers ID connected to each solid bodies (as shown on figure <a href="#org92f8aa8">8</a>).
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">solids = <span class="org-rainbow-delimiters-depth-1">{}</span>;
|
||||||
|
solids.gbot = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">17</span>, <span class="org-highlight-numbers-number">18</span>, <span class="org-highlight-numbers-number">19</span>, <span class="org-highlight-numbers-number">20</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
||||||
|
solids.gtop = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">13</span>, <span class="org-highlight-numbers-number">14</span>, <span class="org-highlight-numbers-number">15</span>, <span class="org-highlight-numbers-number">16</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
||||||
|
solids.ty = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">9</span>, <span class="org-highlight-numbers-number">10</span>, <span class="org-highlight-numbers-number">11</span>, <span class="org-highlight-numbers-number">12</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
||||||
|
solids.ry = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">5</span>, <span class="org-highlight-numbers-number">6</span>, <span class="org-highlight-numbers-number">7</span>, <span class="org-highlight-numbers-number">8</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
||||||
|
solids.rz = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">21</span>, <span class="org-highlight-numbers-number">22</span>, <span class="org-highlight-numbers-number">23</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
||||||
|
solids.hexa = <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">4</span><span class="org-rainbow-delimiters-depth-1">]</span>;
|
||||||
|
|
||||||
|
solid_names = fields<span class="org-rainbow-delimiters-depth-1">(</span>solids<span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Finally, we save that into a <code>.mat</code> file.
|
||||||
|
</p>
|
||||||
|
<div class="org-src-container">
|
||||||
|
<pre class="src src-matlab">save<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/geometry.mat', 'solids', 'solid_names', 'acc_pos'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="outline-container-org2405c81" class="outline-2">
|
||||||
|
<h2 id="org2405c81"><span class="section-number-2">10</span> Notes the solid body assumption</h2>
|
||||||
|
<div class="outline-text-2" id="text-10">
|
||||||
|
<p>
|
||||||
|
If we measure the motion of a rigid body along a direction \(\vec{x}\) using 2 sensors that are co-linear with the same direction \(\vec{x}\) (\(\vec{p}_2 = \vec{p}_1 + \alpha \vec{x}\)), they will measured the same quantity.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This is illustrated on figure <a href="#org4627880">24</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="org4627880" class="figure">
|
||||||
|
<p><img src="figs/aligned_accelerometers.png" alt="aligned_accelerometers.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 24: </span>Aligned measurement of the motion of a solid body</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The motion of the rigid body of figure <a href="#org4627880">24</a> is defined by the velocity \(\vec{v}\) and rotation \(\vec{\Omega}\) with respect to the reference frame \(\{O\}\).
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The motions at points \(1\) and \(2\) are:
|
||||||
|
</p>
|
||||||
|
\begin{align*}
|
||||||
|
v_1 &= v + \Omega \times p_1 \\
|
||||||
|
v_2 &= v + \Omega \times p_2
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Taking only the \(x\) direction:
|
||||||
|
</p>
|
||||||
|
\begin{align*}
|
||||||
|
v_{x1} &= v + \Omega_y p_{z1} - \Omega_z p_{y1} \\
|
||||||
|
v_{x2} &= v + \Omega_y p_{z2} - \Omega_z p_{y2}
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
However, we have \(p_{1y} = p_{2y}\) and \(p_{1z} = p_{2z}\) because of the co-linearity of the two sensors in the \(x\) direction, and thus we obtain
|
||||||
|
</p>
|
||||||
|
\begin{equation}
|
||||||
|
v_{x1} = v_{x2}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
<div class="important">
|
||||||
|
<p>
|
||||||
|
Two sensors that are measuring the co-linear motion of a rigid body should measure the same quantity.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
We can verify that the rigid body assumption is correct by comparing the measurement of the sensors.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
From the table <a href="#org65ae8c9">2</a>, we can guess which sensors will give the same results in the X and Y directions.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Comparison of such measurements in the X direction is shown on figure <a href="#orgac307f7">25</a> and in the Y direction on figure <a href="#org3f01b7c">26</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="orgac307f7" class="figure">
|
||||||
|
<p><img src="figs/compare_acc_x_dir.png" alt="compare_acc_x_dir.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 25: </span>Compare accelerometers align in the X direction</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="org3f01b7c" class="figure">
|
||||||
|
<p><img src="figs/compare_acc_y_dir.png" alt="compare_acc_y_dir.png" />
|
||||||
|
</p>
|
||||||
|
<p><span class="figure-number">Figure 26: </span>Compare accelerometers align in the Y direction</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="important">
|
||||||
|
<p>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="postamble" class="status">
|
<div id="postamble" class="status">
|
||||||
<p class="author">Author: Dehaeze Thomas</p>
|
<p class="author">Author: Dehaeze Thomas</p>
|
||||||
<p class="date">Created: 2019-07-03 mer. 17:24</p>
|
<p class="date">Created: 2019-07-04 jeu. 17:49</p>
|
||||||
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -29,6 +29,16 @@
|
|||||||
#+PROPERTY: header-args:matlab+ :mkdirp yes
|
#+PROPERTY: header-args:matlab+ :mkdirp yes
|
||||||
|
|
||||||
#+PROPERTY: header-args:shell :eval no-export
|
#+PROPERTY: header-args:shell :eval no-export
|
||||||
|
|
||||||
|
#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/MEGA/These/LaTeX/}{config.tex}")
|
||||||
|
#+PROPERTY: header-args:latex+ :imagemagick t :fit yes
|
||||||
|
#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150
|
||||||
|
#+PROPERTY: header-args:latex+ :imoutoptions -quality 100
|
||||||
|
#+PROPERTY: header-args:latex+ :results raw replace :buffer no
|
||||||
|
#+PROPERTY: header-args:latex+ :eval no-export
|
||||||
|
#+PROPERTY: header-args:latex+ :exports both
|
||||||
|
#+PROPERTY: header-args:latex+ :mkdirp yes
|
||||||
|
#+PROPERTY: header-args:latex+ :output-dir figs
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
* ZIP file containing the data and matlab files :ignore:
|
* ZIP file containing the data and matlab files :ignore:
|
||||||
@ -57,6 +67,9 @@
|
|||||||
<<matlab-init>>
|
<<matlab-init>>
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
* Goal
|
||||||
|
The goal is to measure the dynamic of the Micro-Station and to extract Frequency Response Functions.
|
||||||
|
|
||||||
* Instrumentation Used
|
* Instrumentation Used
|
||||||
In order to perform to *Modal Analysis* and to obtain first a *Response Model*, the following devices are used:
|
In order to perform to *Modal Analysis* and to obtain first a *Response Model*, the following devices are used:
|
||||||
- An *acquisition system* (OROS) with 24bits ADCs (figure [[fig:oros]])
|
- An *acquisition system* (OROS) with 24bits ADCs (figure [[fig:oros]])
|
||||||
@ -188,38 +201,51 @@ The precise determination of the position of each accelerometer is done using th
|
|||||||
|
|
||||||
The precise position of all the 23 accelerometer with respect to a frame located at the point of interest (located 270mm above the top platform of the hexapod) is shown below. The values are in meter.
|
The precise position of all the 23 accelerometer with respect to a frame located at the point of interest (located 270mm above the top platform of the hexapod) is shown below. The values are in meter.
|
||||||
They are contained in the =mat/id31_nanostation.cfg= file.
|
They are contained in the =mat/id31_nanostation.cfg= file.
|
||||||
|
#+begin_src bash :results none
|
||||||
#+begin_src bash :exports results :eval no-export :post addhdr(*this*)
|
cat mat/id31_nanostation.cfg | grep NODES -A 23 | sed '/\s\+[0-9]\+/!d' | sed 's/\(.*\)\s\+0\s\+.\+/\1/' > mat/acc_pos.txt
|
||||||
echo " ID X[m] Y[m] Z[m]"
|
|
||||||
cat mat/id31_nanostation.cfg | grep NODES -A 23 | sed '/\s\+[0-9]\+/!d' | sed 's/\(.*\)\s\+0\s\+.\+/\1/' | tac --
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
We then import that on =matlab=, and sort them.
|
||||||
|
#+begin_src matlab
|
||||||
|
acc_pos = readtable('mat/acc_pos.txt', 'ReadVariableNames', false);
|
||||||
|
acc_pos = table2array(acc_pos(:, 1:4));
|
||||||
|
[~, i] = sort(acc_pos(:, 1));
|
||||||
|
acc_pos = acc_pos(i, 2:4);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
The positions of the sensors relative to the point of interest are shown below (table [[tab:position_accelerometers]]).
|
||||||
|
#+begin_src matlab :exports results :results value table replace :post addhdr(*this*)
|
||||||
|
data2orgtable([[1:23]', 1000*acc_pos], {}, {'ID', 'x [mm]', 'y [mm]', 'z [mm]'}, ' %.0f ');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: tab:position_accelerometers
|
||||||
|
#+caption: position of the accelerometers
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
| ID | X[m] | Y[m] | Z[m] |
|
| ID | x [mm] | y [mm] | z [mm] |
|
||||||
|----+--------------+--------------+--------------|
|
|----+--------+--------+--------|
|
||||||
| 1 | -6.4000e-002 | -6.4000e-002 | -2.7000e-001 |
|
| 1 | -64 | -64 | -270 |
|
||||||
| 2 | -6.4000e-002 | 6.4000e-002 | -2.7000e-001 |
|
| 2 | -64 | 64 | -270 |
|
||||||
| 3 | 6.4000e-002 | 6.4000e-002 | -2.7000e-001 |
|
| 3 | 64 | 64 | -270 |
|
||||||
| 4 | 6.4000e-002 | -6.4000e-002 | -2.7000e-001 |
|
| 4 | 64 | -64 | -270 |
|
||||||
| 5 | -3.8500e-001 | -3.0000e-001 | -4.1680e-001 |
|
| 5 | -385 | -300 | -417 |
|
||||||
| 6 | -4.2000e-001 | 2.8000e-001 | -4.1680e-001 |
|
| 6 | -420 | 280 | -417 |
|
||||||
| 7 | 4.2000e-001 | 2.8000e-001 | -4.1680e-001 |
|
| 7 | 420 | 280 | -417 |
|
||||||
| 8 | 3.8000e-001 | -3.0000e-001 | -4.1680e-001 |
|
| 8 | 380 | -300 | -417 |
|
||||||
| 9 | -4.7500e-001 | -4.1400e-001 | -4.2730e-001 |
|
| 9 | -475 | -414 | -427 |
|
||||||
| 10 | -4.6500e-001 | 4.0700e-001 | -4.2730e-001 |
|
| 10 | -465 | 407 | -427 |
|
||||||
| 11 | 4.7500e-001 | 4.2400e-001 | -4.2730e-001 |
|
| 11 | 475 | 424 | -427 |
|
||||||
| 12 | 4.7500e-001 | -4.1900e-001 | -4.2730e-001 |
|
| 12 | 475 | -419 | -427 |
|
||||||
| 13 | -3.2000e-001 | -4.4600e-001 | -7.8560e-001 |
|
| 13 | -320 | -446 | -786 |
|
||||||
| 14 | -4.8000e-001 | 5.3400e-001 | -7.8560e-001 |
|
| 14 | -480 | 534 | -786 |
|
||||||
| 15 | 4.5000e-001 | 5.3400e-001 | -7.8560e-001 |
|
| 15 | 450 | 534 | -786 |
|
||||||
| 16 | 2.9500e-001 | -4.8100e-001 | -7.8560e-001 |
|
| 16 | 295 | -481 | -786 |
|
||||||
| 17 | -7.3000e-001 | -5.2600e-001 | -9.5060e-001 |
|
| 17 | -730 | -526 | -951 |
|
||||||
| 18 | -7.3500e-001 | 8.1400e-001 | -9.5060e-001 |
|
| 18 | -735 | 814 | -951 |
|
||||||
| 19 | 8.7500e-001 | 7.9900e-001 | -9.5060e-001 |
|
| 19 | 875 | 799 | -951 |
|
||||||
| 20 | 8.6490e-001 | -5.0600e-001 | -9.5060e-001 |
|
| 20 | 865 | -506 | -951 |
|
||||||
| 21 | -1.5500e-001 | -9.0000e-002 | -5.9400e-001 |
|
| 21 | -155 | -90 | -594 |
|
||||||
| 22 | 0.0000e+000 | 1.8000e-001 | -5.9400e-001 |
|
| 22 | 0 | 180 | -594 |
|
||||||
| 23 | 1.5500e-001 | -9.0000e-002 | -5.9400e-001 |
|
| 23 | 155 | -90 | -594 |
|
||||||
|
|
||||||
** Hammer Impacts
|
** Hammer Impacts
|
||||||
Only 3 impact points are used.
|
Only 3 impact points are used.
|
||||||
@ -635,9 +661,6 @@ We generate such FRF matrix from the measurements using the following script.
|
|||||||
meas_factor = meas_factor*(-1);
|
meas_factor = meas_factor*(-1);
|
||||||
end
|
end
|
||||||
|
|
||||||
% FRFs(acc_i+n_acc*(find(dirs==meas_dir)-1), find(dirs==exc_dir), :) = exc_factor*meas_factor*meas.(sprintf('FFT1_H1_%i_1_Y_ReIm', j));
|
|
||||||
% COHs(acc_i+n_acc*(find(dirs==meas_dir)-1), find(dirs==exc_dir), :) = meas.(sprintf('FFT1_Coh_%i_1_RMS_Y_Val', j));
|
|
||||||
|
|
||||||
FRFs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = exc_factor*meas_factor*meas.(sprintf('FFT1_H1_%i_1_Y_ReIm', j));
|
FRFs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = exc_factor*meas_factor*meas.(sprintf('FFT1_H1_%i_1_Y_ReIm', j));
|
||||||
COHs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = meas.(sprintf('FFT1_Coh_%i_1_RMS_Y_Val', j));
|
COHs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = meas.(sprintf('FFT1_Coh_%i_1_RMS_Y_Val', j));
|
||||||
end
|
end
|
||||||
@ -649,3 +672,221 @@ And we save the obtained FRF matrix and Coherence matrix in a =.mat= file.
|
|||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
save('./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs');
|
save('./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs');
|
||||||
#+end_src
|
#+end_src
|
||||||
|
* Plot showing the coherence of all the measurements
|
||||||
|
Now that we have defined a Coherence matrix, we can plot each of its elements to have an idea of the overall coherence and thus, quality of the measurement.
|
||||||
|
The result is shown on figure [[fig:all_coherence]].
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
n_acc = 23;
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
for i = 1:3*n_acc
|
||||||
|
plot(freqs, squeeze(COHs(i, 1, :)), 'color', [0, 0, 0, 0.2]);
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
ylabel('Coherence [\%]');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/all_coherence.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:all_coherence
|
||||||
|
#+CAPTION: Plot of the coherence of all the measurements
|
||||||
|
[[file:figs/all_coherence.png]]
|
||||||
|
|
||||||
|
* Solid Bodies considered for further analysis
|
||||||
|
We consider the following solid bodies for further analysis:
|
||||||
|
- Bottom Granite
|
||||||
|
- Top Granite
|
||||||
|
- Translation Stage
|
||||||
|
- Tilt Stage
|
||||||
|
- Spindle
|
||||||
|
- Hexapod
|
||||||
|
|
||||||
|
We create a =matlab= structure =solids= that contains the accelerometers ID connected to each solid bodies (as shown on figure [[fig:nass-modal-test]]).
|
||||||
|
#+begin_src matlab
|
||||||
|
solids = {};
|
||||||
|
solids.gbot = [17, 18, 19, 20];
|
||||||
|
solids.gtop = [13, 14, 15, 16];
|
||||||
|
solids.ty = [9, 10, 11, 12];
|
||||||
|
solids.ry = [5, 6, 7, 8];
|
||||||
|
solids.rz = [21, 22, 23];
|
||||||
|
solids.hexa = [1, 2, 3, 4];
|
||||||
|
|
||||||
|
solid_names = fields(solids);
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Finally, we save that into a =.mat= file.
|
||||||
|
#+begin_src matlab
|
||||||
|
save('mat/geometry.mat', 'solids', 'solid_names', 'acc_pos');
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Note about the solid body assumption
|
||||||
|
If we measure the motion of a rigid body along a direction $\vec{x}$ using 2 sensors that are co-linear with the same direction $\vec{x}$ ($\vec{p}_2 = \vec{p}_1 + \alpha \vec{x}$), they will measured the same quantity.
|
||||||
|
|
||||||
|
This is illustrated on figure [[fig:aligned_accelerometers]].
|
||||||
|
|
||||||
|
#+begin_src latex :file aligned_accelerometers.pdf :post pdf2svg(file=*this*, ext="png") :exports results
|
||||||
|
\newcommand\irregularcircle[2]{% radius, irregularity
|
||||||
|
\pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}}
|
||||||
|
+(0:\len pt)
|
||||||
|
\foreach \a in {10,20,...,350}{
|
||||||
|
\pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}}
|
||||||
|
-- +(\a:\len pt)
|
||||||
|
} -- cycle
|
||||||
|
}
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\draw[rounded corners=1mm, fill=blue!30!white] (0, 0) \irregularcircle{3cm}{1mm};
|
||||||
|
|
||||||
|
\node[] (origin) at (4, -1) {$\bullet$};
|
||||||
|
\begin{scope}[shift={(origin)}]
|
||||||
|
\def\axissize{0.8cm}
|
||||||
|
\draw[->] (0, 0) -- ++(\axissize, 0) node[above left]{$x$};
|
||||||
|
\draw[->] (0, 0) -- ++(0, \axissize) node[below right]{$y$};
|
||||||
|
\draw[fill, color=black] (0, 0) circle (0.05*\axissize);
|
||||||
|
\node[draw, circle, inner sep=0pt, minimum size=0.4*\axissize, label=left:$z$] (yaxis) at (0, 0){};
|
||||||
|
\node[below right] at (0, 0){$\{O\}$};
|
||||||
|
\end{scope}
|
||||||
|
|
||||||
|
\coordinate[] (p1) at (-1.5, 1.5);
|
||||||
|
\coordinate[] (p2) at ( 1.5, 1.5);
|
||||||
|
|
||||||
|
\draw[->] (p1)node[]{$\bullet$}node[above]{$p_1$} -- ++(1, 0)node[above]{$v_{x1}$};
|
||||||
|
\draw[->] (p2)node[]{$\bullet$}node[above]{$p_2$} -- ++(1, 0)node[above]{$v_{x2}$};
|
||||||
|
|
||||||
|
\draw[dashed] ($(p1)+(-1, 0)$) -- ($(p2)+(2, 0)$);
|
||||||
|
\end{tikzpicture}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+name: fig:aligned_accelerometers
|
||||||
|
#+caption: Aligned measurement of the motion of a solid body
|
||||||
|
#+RESULTS:
|
||||||
|
[[file:figs/aligned_accelerometers.png]]
|
||||||
|
|
||||||
|
The motion of the rigid body of figure [[fig:aligned_accelerometers]] is defined by the velocity $\vec{v}$ and rotation $\vec{\Omega}$ with respect to the reference frame $\{O\}$.
|
||||||
|
|
||||||
|
The motions at points $1$ and $2$ are:
|
||||||
|
\begin{align*}
|
||||||
|
v_1 &= v + \Omega \times p_1 \\
|
||||||
|
v_2 &= v + \Omega \times p_2
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Taking only the $x$ direction:
|
||||||
|
\begin{align*}
|
||||||
|
v_{x1} &= v + \Omega_y p_{z1} - \Omega_z p_{y1} \\
|
||||||
|
v_{x2} &= v + \Omega_y p_{z2} - \Omega_z p_{y2}
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
However, we have $p_{1y} = p_{2y}$ and $p_{1z} = p_{2z}$ because of the co-linearity of the two sensors in the $x$ direction, and thus we obtain
|
||||||
|
\begin{equation}
|
||||||
|
v_{x1} = v_{x2}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
#+begin_important
|
||||||
|
Two sensors that are measuring the motion of a rigid body in the direction of the line linking the two sensors should measure the same quantity.
|
||||||
|
#+end_important
|
||||||
|
|
||||||
|
We can verify that the rigid body assumption is correct by comparing the measurement of the sensors.
|
||||||
|
|
||||||
|
From the table [[tab:position_accelerometers]], we can guess which sensors will give the same results in the X and Y directions.
|
||||||
|
|
||||||
|
Comparison of such measurements in the X direction is shown on figure [[fig:compare_acc_x_dir]] and in the Y direction on figure [[fig:compare_acc_y_dir]].
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
meas_dir = 1;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
acc_i = [1 , 4 ;
|
||||||
|
2 , 3 ;
|
||||||
|
5 , 8 ;
|
||||||
|
6 , 7 ;
|
||||||
|
9 , 12;
|
||||||
|
10, 11;
|
||||||
|
14, 15;
|
||||||
|
18, 19;
|
||||||
|
21, 23];
|
||||||
|
|
||||||
|
figure;
|
||||||
|
for i = 1:size(acc_i, 1)
|
||||||
|
subaxis(3, 3, i);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs(meas_dir+3*(acc_i(i, 1)-1), exc_dir, :))))
|
||||||
|
plot(freqs, abs(squeeze(FRFs(meas_dir+3*(acc_i(i, 2)-1), exc_dir, :))))
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
if i > 6
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
else
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
end
|
||||||
|
|
||||||
|
if rem(i, 3) == 1
|
||||||
|
ylabel('Amplitude');
|
||||||
|
end
|
||||||
|
xlim([1, 200]);
|
||||||
|
title(sprintf('Acc %i and %i - X', acc_i(i, 1), acc_i(i, 2)));
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/compare_acc_x_dir.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:compare_acc_x_dir
|
||||||
|
#+CAPTION: Compare accelerometers align in the X direction
|
||||||
|
[[file:figs/compare_acc_x_dir.png]]
|
||||||
|
|
||||||
|
|
||||||
|
#+begin_src matlab :exports none
|
||||||
|
meas_dir = 2;
|
||||||
|
exc_dir = 1;
|
||||||
|
|
||||||
|
acc_i = [1, 2;
|
||||||
|
5, 6;
|
||||||
|
7, 8;
|
||||||
|
9, 10;
|
||||||
|
11, 12;
|
||||||
|
13, 14;
|
||||||
|
15, 16;
|
||||||
|
17, 18;
|
||||||
|
19, 20];
|
||||||
|
|
||||||
|
figure;
|
||||||
|
for i = 1:size(acc_i, 1)
|
||||||
|
subaxis(3, 3, i);
|
||||||
|
hold on;
|
||||||
|
plot(freqs, abs(squeeze(FRFs(meas_dir+3*(acc_i(i, 1)-1), exc_dir, :))))
|
||||||
|
plot(freqs, abs(squeeze(FRFs(meas_dir+3*(acc_i(i, 2)-1), exc_dir, :))))
|
||||||
|
hold off;
|
||||||
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||||
|
if i > 6
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
else
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
end
|
||||||
|
|
||||||
|
if rem(i, 3) == 1
|
||||||
|
ylabel('Amplitude');
|
||||||
|
end
|
||||||
|
xlim([1, 200]);
|
||||||
|
title(sprintf('Acc %i and %i - Y', acc_i(i, 1), acc_i(i, 2)));
|
||||||
|
end
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/compare_acc_y_dir.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:compare_acc_y_dir
|
||||||
|
#+CAPTION: Compare accelerometers align in the Y direction
|
||||||
|
[[file:figs/compare_acc_y_dir.png]]
|
||||||
|
|
||||||
|
#+begin_important
|
||||||
|
From the two figures above, we are more confident about the rigid body assumption in the frequency band of interest.
|
||||||
|
#+end_important
|
||||||
|
@ -48,28 +48,10 @@
|
|||||||
<<matlab-init>>
|
<<matlab-init>>
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
* TODO Part to explain how to choose the modes frequencies
|
||||||
|
- bro-band method used
|
||||||
* TODO After that, this should be in the modal extraction
|
- Stabilization Chart
|
||||||
* TODO Part to explain how to choose the modes
|
- 21 modes
|
||||||
* Obtained Mode Shapes animations
|
|
||||||
One all the FRFs are obtained, we can estimate the modal parameters (resonance frequencies, modal shapes and modal damping) within the modal software.
|
|
||||||
|
|
||||||
For that, multiple modal extraction techniques can be used (SIMO, MIMO, narrow band, wide band, ...).
|
|
||||||
|
|
||||||
Then, it is possible to show the modal shapes with an animation.
|
|
||||||
|
|
||||||
Examples are shown on figures [[fig:mode1]] and [[fig:mode6]].
|
|
||||||
|
|
||||||
Animations of all the other modes are accessible using the following links: [[file:img/modes/mode1.gif][mode 1]], [[file:img/modes/mode2.gif][mode 2]], [[file:img/modes/mode3.gif][mode 3]], [[file:img/modes/mode4.gif][mode 4]], [[file:img/modes/mode5.gif][mode 5]], [[file:img/modes/mode6.gif][mode 6]], [[file:img/modes/mode7.gif][mode 7]], [[file:img/modes/mode8.gif][mode 8]], [[file:img/modes/mode9.gif][mode 9]], [[file:img/modes/mode10.gif][mode 10]], [[file:img/modes/mode11.gif][mode 11]], [[file:img/modes/mode12.gif][mode 12]], [[file:img/modes/mode13.gif][mode 13]], [[file:img/modes/mode14.gif][mode 14]], [[file:img/modes/mode15.gif][mode 15]], [[file:img/modes/mode16.gif][mode 16]], [[file:img/modes/mode17.gif][mode 17]], [[file:img/modes/mode18.gif][mode 18]], [[file:img/modes/mode19.gif][mode 19]], [[file:img/modes/mode20.gif][mode 20]], [[file:img/modes/mode21.gif][mode 21]].
|
|
||||||
|
|
||||||
#+name: fig:mode1
|
|
||||||
#+caption: Mode 1
|
|
||||||
[[file:img/modes/mode1.gif]]
|
|
||||||
|
|
||||||
#+name: fig:mode6
|
|
||||||
#+caption: Mode 6
|
|
||||||
[[file:img/modes/mode6.gif]]
|
|
||||||
|
|
||||||
* Obtained Modal Parameters
|
* Obtained Modal Parameters
|
||||||
From the modal analysis software, we can export the obtained modal parameters:
|
From the modal analysis software, we can export the obtained modal parameters:
|
||||||
@ -212,6 +194,25 @@ The obtained mode frequencies and damping are shown below.
|
|||||||
| 150.1 | 2.2 |
|
| 150.1 | 2.2 |
|
||||||
| 164.7 | 1.4 |
|
| 164.7 | 1.4 |
|
||||||
|
|
||||||
|
* Obtained Mode Shapes animations
|
||||||
|
One all the FRFs are obtained, we can estimate the modal parameters (resonance frequencies, modal shapes and modal damping) within the modal software.
|
||||||
|
|
||||||
|
For that, multiple modal extraction techniques can be used (SIMO, MIMO, narrow band, wide band, ...).
|
||||||
|
|
||||||
|
Then, it is possible to show the modal shapes with an animation.
|
||||||
|
|
||||||
|
Examples are shown on figures [[fig:mode1]] and [[fig:mode6]].
|
||||||
|
|
||||||
|
Animations of all the other modes are accessible using the following links: [[file:img/modes/mode1.gif][mode 1]], [[file:img/modes/mode2.gif][mode 2]], [[file:img/modes/mode3.gif][mode 3]], [[file:img/modes/mode4.gif][mode 4]], [[file:img/modes/mode5.gif][mode 5]], [[file:img/modes/mode6.gif][mode 6]], [[file:img/modes/mode7.gif][mode 7]], [[file:img/modes/mode8.gif][mode 8]], [[file:img/modes/mode9.gif][mode 9]], [[file:img/modes/mode10.gif][mode 10]], [[file:img/modes/mode11.gif][mode 11]], [[file:img/modes/mode12.gif][mode 12]], [[file:img/modes/mode13.gif][mode 13]], [[file:img/modes/mode14.gif][mode 14]], [[file:img/modes/mode15.gif][mode 15]], [[file:img/modes/mode16.gif][mode 16]], [[file:img/modes/mode17.gif][mode 17]], [[file:img/modes/mode18.gif][mode 18]], [[file:img/modes/mode19.gif][mode 19]], [[file:img/modes/mode20.gif][mode 20]], [[file:img/modes/mode21.gif][mode 21]].
|
||||||
|
|
||||||
|
#+name: fig:mode1
|
||||||
|
#+caption: Mode 1
|
||||||
|
[[file:img/modes/mode1.gif]]
|
||||||
|
|
||||||
|
#+name: fig:mode6
|
||||||
|
#+caption: Mode 6
|
||||||
|
[[file:img/modes/mode6.gif]]
|
||||||
|
|
||||||
* Compute the Modal Model
|
* Compute the Modal Model
|
||||||
** Matlab Init :noexport:ignore:
|
** Matlab Init :noexport:ignore:
|
||||||
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
|
||||||
@ -1201,7 +1202,6 @@ This could be due to the 4 Airloc Levelers that are used for the granite (figure
|
|||||||
|
|
||||||
They are probably *not well leveled*, so the granite is supported only by two Airloc.
|
They are probably *not well leveled*, so the granite is supported only by two Airloc.
|
||||||
|
|
||||||
|
|
||||||
* Setup
|
* Setup
|
||||||
#+name: fig:nass-modal-test
|
#+name: fig:nass-modal-test
|
||||||
#+caption: Position and orientation of the accelerometer used
|
#+caption: Position and orientation of the accelerometer used
|
||||||
@ -1356,7 +1356,7 @@ We create a structure =solids= that contains the accelerometer number of each so
|
|||||||
solid_names = fields(solids);
|
solid_names = fields(solids);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
* From local coordinates to global coordinates
|
* From local coordinates to global coordinates for the mode shapes
|
||||||
#+begin_src latex :file local_to_global_coordinates.pdf :post pdf2svg(file=*this*, ext="png") :exports results
|
#+begin_src latex :file local_to_global_coordinates.pdf :post pdf2svg(file=*this*, ext="png") :exports results
|
||||||
\newcommand\irregularcircle[2]{% radius, irregularity
|
\newcommand\irregularcircle[2]{% radius, irregularity
|
||||||
\pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}}
|
\pgfextra {\pgfmathsetmacro\len{(#1)+rand*(#2)}}
|
||||||
@ -1791,21 +1791,7 @@ FRF matrix $n \times p$:
|
|||||||
xlim([1, 200]);
|
xlim([1, 200]);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
* Composite Response Function
|
||||||
#+begin_src matlab
|
|
||||||
figure;
|
|
||||||
hold on;
|
|
||||||
for i = 1:3*n_acc
|
|
||||||
plot(freqs, squeeze(COHs(i, 1, :)), 'color', [0, 0, 0, 0.2]);
|
|
||||||
end
|
|
||||||
hold off;
|
|
||||||
xlabel('Frequency [Hz]');
|
|
||||||
ylabel('Coherence [\%]');
|
|
||||||
#+end_src
|
|
||||||
|
|
||||||
|
|
||||||
Composite Response Function.
|
|
||||||
|
|
||||||
We here sum the norm instead of the complex numbers.
|
We here sum the norm instead of the complex numbers.
|
||||||
|
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
@ -1833,6 +1819,30 @@ We here sum the norm instead of the complex numbers.
|
|||||||
xlim([1, 200]);
|
xlim([1, 200]);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
#+HEADER: :tangle no :exports results :results none :noweb yes
|
||||||
|
#+begin_src matlab :var filepath="figs/composite_response_function.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png")
|
||||||
|
<<plt-matlab>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+NAME: fig:composite_response_function
|
||||||
|
#+CAPTION: Composite Response Function
|
||||||
|
[[file:figs/composite_response_function.png]]
|
||||||
|
|
||||||
|
|
||||||
|
* TODO Singular Value Decomposition - Modal Indication Function
|
||||||
|
Show the same plot as in the modal software.
|
||||||
|
This helps to identify double modes.
|
||||||
|
|
||||||
|
From the documentation of the modal software:
|
||||||
|
#+begin_quote
|
||||||
|
The MIF consist of the singular values of the Frequency response function matrix.
|
||||||
|
The number of MIFs equals the number of excitations.
|
||||||
|
By the powerful singular value decomposition, the real signal space is separated from the noise space.
|
||||||
|
Therefore, the MIFs exhibit the modes effectively.
|
||||||
|
A peak in the MIFs plot usually indicate the existence of a structural mode, and two peaks at the same frequency point means the existence of two repeated modes.
|
||||||
|
Moreover, the magnitude of the MIFs implies the strength of the a mode.
|
||||||
|
#+end_quote
|
||||||
|
|
||||||
* From local coordinates to global coordinates with the FRFs
|
* From local coordinates to global coordinates with the FRFs
|
||||||
#+begin_src matlab
|
#+begin_src matlab
|
||||||
% Number of Solids * DOF for each solid / Number of excitation / frequency points
|
% Number of Solids * DOF for each solid / Number of excitation / frequency points
|
||||||
|