nass-micro-station-measurem.../modal-analysis/modes_analysis.html

1114 lines
62 KiB
HTML

<?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-02 mar. 17:45 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Modal Analysis</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</h1>
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org356e5b0">1. Setup</a></li>
<li><a href="#org8fdd762">2. Mode extraction and importation</a></li>
<li><a href="#org689c124">3. Positions of the sensors</a></li>
<li><a href="#org8972c45">4. Solids</a></li>
<li><a href="#orgc79f768">5. From local coordinates to global coordinates</a></li>
<li><a href="#orgaa2d870">6. Modal Matrices</a></li>
<li><a href="#org16e1add">7. Modal Complexity</a></li>
<li><a href="#orgc33fb24">8. Some notes about constraining the number of degrees of freedom</a></li>
<li><a href="#orgd17ef15">9. <span class="todo TODO">TODO</span> Normalization of mode shapes?</a></li>
<li><a href="#orgc7fe2ae">10. Compare Mode Shapes</a></li>
<li><a href="#org1ec0de2">11. <span class="todo TODO">TODO</span> Synthesis of FRF curves</a></li>
</ul>
</div>
</div>
<div id="outline-container-org356e5b0" class="outline-2">
<h2 id="org356e5b0"><span class="section-number-2">1</span> Setup</h2>
<div class="outline-text-2" id="text-1">
<div id="org44c15fe" class="figure">
<p><img src="figs/nass-modal-test.png" alt="nass-modal-test.png" />
</p>
<p><span class="figure-number">Figure 1: </span>Position and orientation of the accelerometer used</p>
</div>
</div>
</div>
<div id="outline-container-org8fdd762" class="outline-2">
<h2 id="org8fdd762"><span class="section-number-2">2</span> Mode extraction and importation</h2>
<div class="outline-text-2" id="text-2">
<p>
First, we split the big <code>modes.asc</code> files into sub text files using <code>bash</code>.
</p>
<div class="org-src-container">
<pre class="src src-bash">sed <span class="org-string">'/^\s*[0-9]*[XYZ][+-]:/!d'</span> modal_analysis_updated/modes.asc &gt; mat/mode_shapes.txt
sed <span class="org-string">'/freq/!d'</span> modal_analysis_updated/modes.asc | sed <span class="org-string">'s/.* = \(.*\)Hz/\1/'</span> &gt; mat/mode_freqs.txt
sed <span class="org-string">'/damp/!d'</span> modal_analysis_updated/modes.asc | sed <span class="org-string">'s/.* = \(.*\)\%/\1/'</span> &gt; mat/mode_damps.txt
sed <span class="org-string">'/modal A/!d'</span> modal_analysis_updated/modes.asc | sed <span class="org-string">'s/.* =\s\+\([-0-9.e]\++[0-9]\+\)\([-+0-9.e]\+\)i/\1 \2/'</span> &gt; mat/mode_modal_a.txt
sed <span class="org-string">'/modal B/!d'</span> modal_analysis_updated/modes.asc | sed <span class="org-string">'s/.* =\s\+\([-0-9.e]\++[0-9]\+\)\([-+0-9.e]\+\)i/\1 \2/'</span> &gt; mat/mode_modal_b.txt
</pre>
</div>
<p>
Then we import them on Matlab.
</p>
<div class="org-src-container">
<pre class="src src-matlab">shapes = readtable<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'mat/mode_shapes.txt', 'ReadVariableNames'</span>, false<span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [Sign / Real / Imag]</span>
freqs = table2array<span class="org-rainbow-delimiters-depth-1">(</span>readtable<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'mat/mode_freqs.txt', 'ReadVariableNames'</span>, false<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% in [Hz]</span>
damps = table2array<span class="org-rainbow-delimiters-depth-1">(</span>readtable<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'mat/mode_damps.txt', 'ReadVariableNames'</span>, false<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% in [%]</span>
modal_a = table2array<span class="org-rainbow-delimiters-depth-1">(</span>readtable<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'mat/mode_modal_a.txt', 'ReadVariableNames'</span>, false<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [Real / Imag]</span>
modal_a = complex<span class="org-rainbow-delimiters-depth-1">(</span>modal_a<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>, modal_a<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
modal_b = table2array<span class="org-rainbow-delimiters-depth-1">(</span>readtable<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'mat/mode_modal_b.txt', 'ReadVariableNames'</span>, false<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>; <span class="org-comment">% [Real / Imag]</span>
modal_b = complex<span class="org-rainbow-delimiters-depth-1">(</span>modal_b<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>, modal_b<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<p>
We guess the number of modes identified from the length of the imported data.
</p>
<div class="org-src-container">
<pre class="src src-matlab">acc_n = <span class="org-highlight-numbers-number">23</span>; <span class="org-comment">% Number of accelerometers</span>
dir_n = <span class="org-highlight-numbers-number">3</span>; <span class="org-comment">% Number of directions</span>
dirs = <span class="org-string">'XYZ'</span>;
mod_n = size<span class="org-rainbow-delimiters-depth-1">(</span>shapes,<span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">/</span>acc_n<span class="org-type">/</span>dir_n; <span class="org-comment">% Number of modes</span>
</pre>
</div>
<p>
As the mode shapes are split into 3 parts (direction plus sign, real part and imaginary part), we aggregate them into one array of complex numbers.
</p>
<div class="org-src-container">
<pre class="src src-matlab">T_sign = table2array<span class="org-rainbow-delimiters-depth-1">(</span>shapes<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>;
T_real = table2array<span class="org-rainbow-delimiters-depth-1">(</span>shapes<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
T_imag = table2array<span class="org-rainbow-delimiters-depth-1">(</span>shapes<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">3</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
modes = zeros<span class="org-rainbow-delimiters-depth-1">(</span>mod_n, acc_n, dir_n<span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-keyword">for</span> <span class="org-variable-name">mod_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:mod_n</span>
<span class="org-keyword">for</span> <span class="org-variable-name">acc_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:acc_n</span>
<span class="org-comment">% Get the correct section of the signs</span>
T = T_sign<span class="org-rainbow-delimiters-depth-1">(</span>acc_n<span class="org-type">*</span>dir_n<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-2">(</span>mod_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>acc_n<span class="org-type">*</span>dir_n<span class="org-type">*</span>mod_i<span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-keyword">for</span> <span class="org-variable-name">dir_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:dir_n</span>
<span class="org-comment">% Get the line corresponding to the sensor</span>
<span class="org-constant">i</span> = find<span class="org-rainbow-delimiters-depth-1">(</span>contains<span class="org-rainbow-delimiters-depth-2">(</span>T, sprintf<span class="org-rainbow-delimiters-depth-3">(</span>'<span class="org-comment">%i</span>%s',acc_i, dirs(dir_i))), <span class="org-highlight-numbers-number">1</span>, 'first')<span class="org-type">+</span>acc_n<span class="org-type">*</span>dir_n<span class="org-type">*</span>(mod_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span>);
modes<span class="org-rainbow-delimiters-depth-4">(</span>mod_i, acc_i, dir_i<span class="org-rainbow-delimiters-depth-4">)</span> = str2num<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">[</span>T_sign<span class="org-rainbow-delimiters-depth-6">{</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-6">}(</span>end<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-6">)</span>, '<span class="org-highlight-numbers-number">1</span>'<span class="org-rainbow-delimiters-depth-5">]</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-type">*</span>complex<span class="org-rainbow-delimiters-depth-4">(</span>T_real<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-5">)</span>,T_imag<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span>;
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
</pre>
</div>
<p>
The obtained mode frequencies and damping are shown below.
</p>
<div class="org-src-container">
<pre class="src src-matlab">data2orgtable<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>freqs, damps<span class="org-rainbow-delimiters-depth-2">]</span>, <span class="org-rainbow-delimiters-depth-2">{}</span>, <span class="org-rainbow-delimiters-depth-2">{</span>'Frequency <span class="org-rainbow-delimiters-depth-3">[</span>Hz<span class="org-rainbow-delimiters-depth-3">]</span>', 'Damping <span class="org-rainbow-delimiters-depth-3">[</span><span class="org-comment">%]'}, ' </span>%.<span class="org-highlight-numbers-number">1f</span> ');
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">Frequency [Hz]</th>
<th scope="col" class="org-right">Damping [%]</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">11.4</td>
<td class="org-right">8.7</td>
</tr>
<tr>
<td class="org-right">18.5</td>
<td class="org-right">11.8</td>
</tr>
<tr>
<td class="org-right">37.6</td>
<td class="org-right">6.4</td>
</tr>
<tr>
<td class="org-right">39.4</td>
<td class="org-right">3.6</td>
</tr>
<tr>
<td class="org-right">54.0</td>
<td class="org-right">0.2</td>
</tr>
<tr>
<td class="org-right">56.1</td>
<td class="org-right">2.8</td>
</tr>
<tr>
<td class="org-right">69.7</td>
<td class="org-right">4.6</td>
</tr>
<tr>
<td class="org-right">71.6</td>
<td class="org-right">0.6</td>
</tr>
<tr>
<td class="org-right">72.4</td>
<td class="org-right">1.6</td>
</tr>
<tr>
<td class="org-right">84.9</td>
<td class="org-right">3.6</td>
</tr>
<tr>
<td class="org-right">90.6</td>
<td class="org-right">0.3</td>
</tr>
<tr>
<td class="org-right">91.0</td>
<td class="org-right">2.9</td>
</tr>
<tr>
<td class="org-right">95.8</td>
<td class="org-right">3.3</td>
</tr>
<tr>
<td class="org-right">105.4</td>
<td class="org-right">3.3</td>
</tr>
<tr>
<td class="org-right">106.8</td>
<td class="org-right">1.9</td>
</tr>
<tr>
<td class="org-right">112.6</td>
<td class="org-right">3.0</td>
</tr>
<tr>
<td class="org-right">116.8</td>
<td class="org-right">2.7</td>
</tr>
<tr>
<td class="org-right">124.1</td>
<td class="org-right">0.6</td>
</tr>
<tr>
<td class="org-right">145.4</td>
<td class="org-right">1.6</td>
</tr>
<tr>
<td class="org-right">150.1</td>
<td class="org-right">2.2</td>
</tr>
<tr>
<td class="org-right">164.7</td>
<td class="org-right">1.4</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org689c124" class="outline-2">
<h2 id="org689c124"><span class="section-number-2">3</span> Positions of the sensors</h2>
<div class="outline-text-2" id="text-3">
<p>
We process the file exported from the <code>modal</code> software containing the positions of the sensors using <code>bash</code>.
</p>
<div class="org-src-container">
<pre class="src src-bash">cat modal_analysis_updated/id31_nanostation_modified.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> &gt; mat/acc_pos.txt
</pre>
</div>
<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.
</p>
<div class="org-src-container">
<pre class="src src-matlab">data2orgtable<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1000</span><span class="org-type">*</span>acc_pos, <span class="org-rainbow-delimiters-depth-2">{}</span>, <span class="org-rainbow-delimiters-depth-2">{</span>'x <span class="org-rainbow-delimiters-depth-3">[</span>mm<span class="org-rainbow-delimiters-depth-3">]</span>', 'y <span class="org-rainbow-delimiters-depth-3">[</span>mm<span class="org-rainbow-delimiters-depth-3">]</span>', 'z <span class="org-rainbow-delimiters-depth-3">[</span>mm<span class="org-rainbow-delimiters-depth-3">]</span>'<span class="org-rainbow-delimiters-depth-2">}</span>, ' %.<span class="org-highlight-numbers-number">0f</span> ');
</pre>
</div>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-right">x [mm]</th>
<th scope="col" class="org-right">y [mm]</th>
<th scope="col" class="org-right">z [mm]</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-right">-64</td>
<td class="org-right">-64</td>
<td class="org-right">-296</td>
</tr>
<tr>
<td class="org-right">-64</td>
<td class="org-right">64</td>
<td class="org-right">-296</td>
</tr>
<tr>
<td class="org-right">64</td>
<td class="org-right">64</td>
<td class="org-right">-296</td>
</tr>
<tr>
<td class="org-right">64</td>
<td class="org-right">-64</td>
<td class="org-right">-296</td>
</tr>
<tr>
<td class="org-right">-385</td>
<td class="org-right">-300</td>
<td class="org-right">-417</td>
</tr>
<tr>
<td class="org-right">-420</td>
<td class="org-right">280</td>
<td class="org-right">-417</td>
</tr>
<tr>
<td class="org-right">420</td>
<td class="org-right">280</td>
<td class="org-right">-417</td>
</tr>
<tr>
<td class="org-right">380</td>
<td class="org-right">-300</td>
<td class="org-right">-417</td>
</tr>
<tr>
<td class="org-right">-475</td>
<td class="org-right">-414</td>
<td class="org-right">-427</td>
</tr>
<tr>
<td class="org-right">-465</td>
<td class="org-right">407</td>
<td class="org-right">-427</td>
</tr>
<tr>
<td class="org-right">475</td>
<td class="org-right">424</td>
<td class="org-right">-427</td>
</tr>
<tr>
<td class="org-right">475</td>
<td class="org-right">-419</td>
<td class="org-right">-427</td>
</tr>
<tr>
<td class="org-right">-320</td>
<td class="org-right">-446</td>
<td class="org-right">-786</td>
</tr>
<tr>
<td class="org-right">-480</td>
<td class="org-right">534</td>
<td class="org-right">-786</td>
</tr>
<tr>
<td class="org-right">450</td>
<td class="org-right">534</td>
<td class="org-right">-786</td>
</tr>
<tr>
<td class="org-right">295</td>
<td class="org-right">-481</td>
<td class="org-right">-786</td>
</tr>
<tr>
<td class="org-right">-730</td>
<td class="org-right">-526</td>
<td class="org-right">-951</td>
</tr>
<tr>
<td class="org-right">-735</td>
<td class="org-right">814</td>
<td class="org-right">-951</td>
</tr>
<tr>
<td class="org-right">875</td>
<td class="org-right">799</td>
<td class="org-right">-951</td>
</tr>
<tr>
<td class="org-right">865</td>
<td class="org-right">-506</td>
<td class="org-right">-951</td>
</tr>
<tr>
<td class="org-right">-155</td>
<td class="org-right">-90</td>
<td class="org-right">-594</td>
</tr>
<tr>
<td class="org-right">0</td>
<td class="org-right">180</td>
<td class="org-right">-594</td>
</tr>
<tr>
<td class="org-right">155</td>
<td class="org-right">-90</td>
<td class="org-right">-594</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-org8972c45" class="outline-2">
<h2 id="org8972c45"><span class="section-number-2">4</span> Solids</h2>
<div class="outline-text-2" id="text-4">
<p>
We consider the following solid bodies:
</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 structure <code>solids</code> that contains the accelerometer number of each solid bodies (as shown on figure <a href="#org44c15fe">1</a>).
</p>
<div class="org-src-container">
<pre class="src src-matlab">solids = <span class="org-rainbow-delimiters-depth-1">{}</span>;
solids.granite_bot = <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.granite_top = <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>
</div>
</div>
<div id="outline-container-orgc79f768" class="outline-2">
<h2 id="orgc79f768"><span class="section-number-2">5</span> From local coordinates to global coordinates</h2>
<div class="outline-text-2" id="text-5">
<div class="figure">
<p><img src="Figures/local_to_global_coordinates.png" alt="local_to_global_coordinates.png" />
</p>
</div>
<p>
From the figure above, 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 a mean square problem.
</p>
<div class="org-src-container">
<pre class="src src-matlab">mode_shapes_O = zeros<span class="org-rainbow-delimiters-depth-1">(</span>mod_n, length<span class="org-rainbow-delimiters-depth-2">(</span>solid_names<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">mod_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:mod_n</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>
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>;
Y = reshape<span class="org-rainbow-delimiters-depth-1">(</span>squeeze<span class="org-rainbow-delimiters-depth-2">(</span>modes<span class="org-rainbow-delimiters-depth-3">(</span>mod_i, solids_i, <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-2">[]</span>, <span class="org-highlight-numbers-number">1</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>
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><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>;
<span class="org-keyword">end</span>
mode_shapes_O<span class="org-rainbow-delimiters-depth-1">(</span>mod_i, solid_i, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span> = A<span class="org-type">\</span>Y;
<span class="org-keyword">end</span>
<span class="org-keyword">end</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgaa2d870" class="outline-2">
<h2 id="orgaa2d870"><span class="section-number-2">6</span> Modal Matrices</h2>
<div class="outline-text-2" id="text-6">
<p>
We want to obtain the two following matrices:
\[ \Omega = \begin{bmatrix}
\omega_1^2 & & 0 \\
& \ddots & \\
0 & & \omega_n^2
\end{bmatrix}; \quad \Psi = \begin{bmatrix}
& & \\
\{\psi_1\} & \dots & \{\psi_n\} \\
& &
\end{bmatrix} \]
</p>
<ul class="org-ul">
<li class="off"><code>[&#xa0;]</code> How to add damping to the eigen value matrix?</li>
</ul>
<div class="org-src-container">
<pre class="src src-matlab">eigen_value_M = diag<span class="org-rainbow-delimiters-depth-1">(</span>freqs<span class="org-type">*</span><span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span><span class="org-rainbow-delimiters-depth-1">)</span>;
eigen_vector_M = reshape<span class="org-rainbow-delimiters-depth-1">(</span>mode_shapes_O, <span class="org-rainbow-delimiters-depth-2">[</span>mod_n, <span class="org-highlight-numbers-number">6</span><span class="org-type">*</span>length<span class="org-rainbow-delimiters-depth-3">(</span>solid_names<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>';
</pre>
</div>
<p>
\[ \{\psi_1\} = \begin{Bmatrix} \psi_{1_x} & \psi_{2_x} & \dots & \psi_{6_x} & \psi_{1_x} & \dots & \psi_{1\Omega_x} & \dots & \psi_{6\Omega_z} \end{Bmatrix}^T \]
</p>
</div>
</div>
<div id="outline-container-org16e1add" class="outline-2">
<h2 id="org16e1add"><span class="section-number-2">7</span> Modal Complexity</h2>
<div class="outline-text-2" id="text-7">
<p>
Complexity of one mode
</p>
<div class="org-src-container">
<pre class="src src-matlab">mod_i = <span class="org-highlight-numbers-number">1</span>;
i_max = convhull<span class="org-rainbow-delimiters-depth-1">(</span>real<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">:</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, imag<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">:</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
radius = max<span class="org-rainbow-delimiters-depth-1">(</span>abs<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">:</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
theta = linspace<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">2</span><span class="org-type">*</span><span class="org-constant">pi</span>, <span class="org-highlight-numbers-number">100</span><span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-type">figure</span>;
hold on;
plot<span class="org-rainbow-delimiters-depth-1">(</span>radius<span class="org-type">*</span>cos<span class="org-rainbow-delimiters-depth-2">(</span>theta<span class="org-rainbow-delimiters-depth-2">)</span>, radius<span class="org-type">*</span>sin<span class="org-rainbow-delimiters-depth-2">(</span>theta<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'-'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
plot<span class="org-rainbow-delimiters-depth-1">(</span>real<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span>i_max, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, imag<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span>i_max, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'-'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
plot<span class="org-rainbow-delimiters-depth-1">(</span>real<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">:</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, imag<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">:</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'ko'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
hold off;
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Real Part'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; ylabel</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">'Imaginary Part'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-type">axis</span> manual equal
</pre>
</div>
<div id="org51e10de" class="figure">
<p><img src="figs/modal_complexity.png" alt="modal_complexity.png" />
</p>
<p><span class="figure-number">Figure 3: </span>Modal Complexity of one mode</p>
</div>
<p>
Complexity function of the mode order.
</p>
<div class="org-src-container">
<pre class="src src-matlab">modes_complexity = zeros<span class="org-rainbow-delimiters-depth-1">(</span>mod_n, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-keyword">for</span> <span class="org-variable-name">mod_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:mod_n</span>
<span class="org-constant">i</span> = convhull<span class="org-rainbow-delimiters-depth-1">(</span>real<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">:</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, imag<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">:</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
area_complex = polyarea<span class="org-rainbow-delimiters-depth-1">(</span>real<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-constant">i</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, imag<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-constant">i</span>, mod_i<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
area_circle = <span class="org-constant">pi</span><span class="org-type">*</span>max<span class="org-rainbow-delimiters-depth-1">(</span>abs<span class="org-rainbow-delimiters-depth-2">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">:</span>, mod_i<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-highlight-numbers-number">2</span>;
modes_complexity<span class="org-rainbow-delimiters-depth-1">(</span>mod_i<span class="org-rainbow-delimiters-depth-1">)</span> = area_complex<span class="org-type">/</span>area_circle;
<span class="org-keyword">end</span>
<span class="org-type">figure</span>;
plot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span>mod_n, modes_complexity, <span class="org-string">'ok'</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>;
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Mode Number'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; ylabel</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">'Modal Complexity'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
<div id="org7388c3e" class="figure">
<p><img src="figs/modal_complexities.png" alt="modal_complexities.png" />
</p>
<p><span class="figure-number">Figure 4: </span>Modal complexity for each mode</p>
</div>
</div>
</div>
<div id="outline-container-orgc33fb24" class="outline-2">
<h2 id="orgc33fb24"><span class="section-number-2">8</span> Some notes about constraining the number of degrees of freedom</h2>
<div class="outline-text-2" id="text-8">
<p>
We want to have the two eigen matrices.
</p>
<p>
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.
</p>
<p>
Actually, we are measured 6 DOFs of 6 solids, thus we have 36 DOFs.
</p>
<p>
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.
</p>
<p>
In order to determine which DOF can be neglected, two solutions seems possible:
</p>
<ul class="org-ul">
<li>compare the mode shapes</li>
<li>compare the FRFs</li>
</ul>
<p>
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?
</p>
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
<colgroup>
<col class="org-left" />
<col class="org-right" />
<col class="org-right" />
<col class="org-right" />
<col class="org-left" />
</colgroup>
<thead>
<tr>
<th scope="col" class="org-left">Stage</th>
<th scope="col" class="org-right">Motion DOFs</th>
<th scope="col" class="org-right">Parasitic DOF</th>
<th scope="col" class="org-right">Total DOF</th>
<th scope="col" class="org-left">Description of DOF</th>
</tr>
</thead>
<tbody>
<tr>
<td class="org-left">Granite</td>
<td class="org-right">0</td>
<td class="org-right">3</td>
<td class="org-right">3</td>
<td class="org-left">&#xa0;</td>
</tr>
<tr>
<td class="org-left">Ty</td>
<td class="org-right">1</td>
<td class="org-right">2</td>
<td class="org-right">3</td>
<td class="org-left">Ty, Rz</td>
</tr>
<tr>
<td class="org-left">Ry</td>
<td class="org-right">1</td>
<td class="org-right">2</td>
<td class="org-right">3</td>
<td class="org-left">Ry,</td>
</tr>
<tr>
<td class="org-left">Rz</td>
<td class="org-right">1</td>
<td class="org-right">2</td>
<td class="org-right">3</td>
<td class="org-left">Rz, Rx, Ry</td>
</tr>
<tr>
<td class="org-left">Hexapod</td>
<td class="org-right">6</td>
<td class="org-right">0</td>
<td class="org-right">6</td>
<td class="org-left">Txyz, Rxyz</td>
</tr>
</tbody>
<tbody>
<tr>
<td class="org-left">&#xa0;</td>
<td class="org-right">9</td>
<td class="org-right">9</td>
<td class="org-right">18</td>
<td class="org-left">&#xa0;</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="outline-container-orgd17ef15" class="outline-2">
<h2 id="orgd17ef15"><span class="section-number-2">9</span> <span class="todo TODO">TODO</span> Normalization of mode shapes?</h2>
<div class="outline-text-2" id="text-9">
<p>
We normalize each column of the eigen vector matrix.
Then, each eigenvector as a norm of 1.
</p>
<div class="org-src-container">
<pre class="src src-matlab">eigen_vector_M = eigen_vector_M<span class="org-type">./</span>vecnorm<span class="org-rainbow-delimiters-depth-1">(</span>eigen_vector_M<span class="org-rainbow-delimiters-depth-1">)</span>;
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc7fe2ae" class="outline-2">
<h2 id="orgc7fe2ae"><span class="section-number-2">10</span> Compare Mode Shapes</h2>
<div class="outline-text-2" id="text-10">
<p>
Let's say we want to see for the first mode which DOFs can be neglected.
In order to do so, we should estimate the motion of each stage in particular directions.
If we look at the z motion for instance, we will find that we cannot neglect that motion (because of the tilt causing z motion).
</p>
<div class="org-src-container">
<pre class="src src-matlab">mode_i = <span class="org-highlight-numbers-number">3</span>;
dof_i = <span class="org-highlight-numbers-number">6</span>;
mode = eigen_vector_M<span class="org-rainbow-delimiters-depth-1">(</span>dof_i<span class="org-type">:</span><span class="org-highlight-numbers-number">6</span><span class="org-type">:</span>end, mode_i<span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-type">figure</span>;
hold on;
<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">mode</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
plot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">0</span>, real<span class="org-rainbow-delimiters-depth-3">(</span>mode<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-rainbow-delimiters-depth-2">]</span>, <span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">0</span>, imag<span class="org-rainbow-delimiters-depth-3">(</span>mode<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-rainbow-delimiters-depth-2">]</span>, <span class="org-string">'-', 'DisplayName'</span>, solid_names<span class="org-rainbow-delimiters-depth-2">{</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-keyword">end</span>
hold off;
legend<span class="org-rainbow-delimiters-depth-1">()</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab"><span class="org-type">figure</span>;
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"><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">mode</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
plot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</span>, norm<span class="org-rainbow-delimiters-depth-2">(</span>mode<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'o'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-keyword">end</span>
hold off;
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
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">2</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"><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">mode</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
plot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">1</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>angle<span class="org-rainbow-delimiters-depth-2">(</span>mode<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'o', 'DisplayName'</span>, solid_names<span class="org-rainbow-delimiters-depth-2">{</span><span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">)</span>;
<span class="org-keyword">end</span>
hold off;
ylim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</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-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>; yticks<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</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-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Phase </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">deg</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
legend<span class="org-rainbow-delimiters-depth-1">()</span>;
</pre>
</div>
<div class="org-src-container">
<pre class="src src-matlab">test = mode_shapes_O<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">10</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">/</span>norm<span class="org-rainbow-delimiters-depth-1">(</span>squeeze<span class="org-rainbow-delimiters-depth-2">(</span>mode_shapes_O<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">10</span>, <span class="org-highlight-numbers-number">1</span>, <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>;
test = mode_shapes_O<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">10</span>, <span class="org-highlight-numbers-number">2</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span><span class="org-type">/</span>norm<span class="org-rainbow-delimiters-depth-1">(</span>squeeze<span class="org-rainbow-delimiters-depth-2">(</span>mode_shapes_O<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">10</span>, <span class="org-highlight-numbers-number">2</span>, <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>;
</pre>
</div>
</div>
</div>
<div id="outline-container-org1ec0de2" class="outline-2">
<h2 id="org1ec0de2"><span class="section-number-2">11</span> <span class="todo TODO">TODO</span> Synthesis of FRF curves</h2>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Dehaeze Thomas</p>
<p class="date">Created: 2019-07-02 mar. 17:45</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>