1114 lines
62 KiB
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 > 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> > 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> > 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> > 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> > 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> > 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>[ ]</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"> </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"> </td>
|
||
|
<td class="org-right">9</td>
|
||
|
<td class="org-right">9</td>
|
||
|
<td class="org-right">18</td>
|
||
|
<td class="org-left"> </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>
|