1436 lines
112 KiB
HTML
1436 lines
112 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-03 mer. 13:38 -->
|
|
<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="#org222267a">1. Setup</a></li>
|
|
<li><a href="#org6d2f9fb">2. Mode extraction and importation</a></li>
|
|
<li><a href="#orgf667e97">3. Positions of the sensors</a></li>
|
|
<li><a href="#org950ac1b">4. Solids</a></li>
|
|
<li><a href="#orgf857139">5. From local coordinates to global coordinates</a></li>
|
|
<li><a href="#org1f301af">6. Modal Matrices</a></li>
|
|
<li><a href="#orgc5754da">7. Modal Complexity</a></li>
|
|
<li><a href="#org571cb5c">8. Some notes about constraining the number of degrees of freedom</a></li>
|
|
<li><a href="#org63d4f29">9. <span class="todo TODO">TODO</span> Normalization of mode shapes?</a></li>
|
|
<li><a href="#org1cc7c6e">10. Compare Mode Shapes</a></li>
|
|
<li><a href="#orgf13e17f">11. Importation of measured FRF curves</a></li>
|
|
<li><a href="#org22af433">12. Importation of measured FRF curves to global FRF matrix</a></li>
|
|
<li><a href="#org8686279">13. Analysis of some FRFs</a></li>
|
|
<li><a href="#orged94f65">14. From local coordinates to global coordinates with the FRFs</a></li>
|
|
<li><a href="#orgc9405ef">15. Analysis of some FRF in the global coordinates</a></li>
|
|
<li><a href="#orgabaf3d0">16. Compare global coordinates to local coordinates</a></li>
|
|
<li><a href="#org157bd81">17. Verify that we find the original FRF from the FRF in the global coordinates</a></li>
|
|
<li><a href="#org6f98d62">18. <span class="todo TODO">TODO</span> Synthesis of FRF curves</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org222267a" class="outline-2">
|
|
<h2 id="org222267a"><span class="section-number-2">1</span> Setup</h2>
|
|
<div class="outline-text-2" id="text-1">
|
|
|
|
<div id="org2e944fd" 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-org6d2f9fb" class="outline-2">
|
|
<h2 id="org6d2f9fb"><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-orgf667e97" class="outline-2">
|
|
<h2 id="orgf667e97"><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-org950ac1b" class="outline-2">
|
|
<h2 id="org950ac1b"><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="#org2e944fd">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-orgf857139" class="outline-2">
|
|
<h2 id="orgf857139"><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="figs/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-org1f301af" class="outline-2">
|
|
<h2 id="org1f301af"><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-orgc5754da" class="outline-2">
|
|
<h2 id="orgc5754da"><span class="section-number-2">7</span> Modal Complexity</h2>
|
|
<div class="outline-text-2" id="text-7">
|
|
<p>
|
|
A method of displaying <b>modal complexity</b> is by plotting the elements of the eigenvector on an <b>Argand diagram</b>, such as the ones shown in figure <a href="#org04ca94d">3</a>.
|
|
</p>
|
|
|
|
<p>
|
|
To evaluate the complexity of the modes, we plot a polygon around the extremities of the individual vectors.
|
|
The obtained area of this polygon is then compared with the area of the circle which is based on the length of the largest vector element. The resulting ratio is used as an indication of the complexity of the mode.
|
|
</p>
|
|
|
|
<p>
|
|
A little complex mode is shown on figure <a href="#org04ca94d">3</a> whereas an highly complex mode is shown on figure <a href="#orgb5f9171">4</a>.
|
|
The complexity of all the modes are compared on figure <a href="#orgae9d053">5</a>.
|
|
</p>
|
|
|
|
|
|
<div id="org04ca94d" class="figure">
|
|
<p><img src="figs/modal_complexity_small.png" alt="modal_complexity_small.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 3: </span>Modal Complexity of one mode with small complexity</p>
|
|
</div>
|
|
|
|
|
|
<div id="orgb5f9171" class="figure">
|
|
<p><img src="figs/modal_complexity_high.png" alt="modal_complexity_high.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 4: </span>Modal Complexity of one higly complex mode</p>
|
|
</div>
|
|
|
|
|
|
<div id="orgae9d053" class="figure">
|
|
<p><img src="figs/modal_complexities.png" alt="modal_complexities.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 5: </span>Modal complexity for each mode</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org571cb5c" class="outline-2">
|
|
<h2 id="org571cb5c"><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-org63d4f29" class="outline-2">
|
|
<h2 id="org63d4f29"><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-org1cc7c6e" class="outline-2">
|
|
<h2 id="org1cc7c6e"><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-orgf13e17f" class="outline-2">
|
|
<h2 id="orgf13e17f"><span class="section-number-2">11</span> Importation of measured FRF curves</h2>
|
|
<div class="outline-text-2" id="text-11">
|
|
<p>
|
|
There are 24 measurements files corresponding to 24 series of impacts:
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>3 directions, 8 sets of 3 accelerometers</li>
|
|
</ul>
|
|
<p>
|
|
For each measurement file, the FRF and coherence between the impact and the 9 accelerations measured.
|
|
</p>
|
|
|
|
<p>
|
|
In reality: 4 sets of 10 things
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">a = load<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'./modal_analysis/frf_coh/Measurement1.mat'</span><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>;
|
|
|
|
ax1 = subplot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold on;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>a.FFT1_AvXSpc_2_1_RMS_X_Val, a.FFT1_AvXSpc_2_1_RMS_Y_Mod<span class="org-rainbow-delimiters-depth-1">)</span>
|
|
hold off;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale', 'log'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'YScale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XTickLabel'</span>,<span class="org-rainbow-delimiters-depth-2">[]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
title<span class="org-rainbow-delimiters-depth-1">(</span>sprintf<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'From %s, to %s'</span>, FFT1_AvXSpc_2_1_RfName, FFT1_AvXSpc_2_1_RpName))
|
|
|
|
ax2 = subplot<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">2</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
hold on;
|
|
plot<span class="org-rainbow-delimiters-depth-3">(</span>a.FFT1_AvXSpc_2_1_RMS_X_Val, a.FFT1_AvXSpc_2_1_RMS_Y_Phas<span class="org-rainbow-delimiters-depth-3">)</span>
|
|
hold off;
|
|
ylim<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">[</span><span class="org-type">-</span><span class="org-highlight-numbers-number">180</span>, <span class="org-highlight-numbers-number">180</span><span class="org-rainbow-delimiters-depth-4">]</span><span class="org-rainbow-delimiters-depth-3">)</span>; yticks<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">-</span><span class="org-highlight-numbers-number">180</span><span class="org-type">:</span><span class="org-highlight-numbers-number">90</span><span class="org-type">:</span><span class="org-highlight-numbers-number">180</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
xlabel<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">]</span></span><span class="org-string">'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-3">)</span></span><span class="org-string">; ylabel</span><span class="org-string"><span class="org-rainbow-delimiters-depth-3">(</span></span><span class="org-string">'Phase </span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">[</span></span><span class="org-string">deg</span><span class="org-string"><span class="org-rainbow-delimiters-depth-4">]</span></span><span class="org-string">'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'xscale', 'log'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
|
|
linkaxes<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">[</span>ax1,ax2<span class="org-rainbow-delimiters-depth-4">]</span>,<span class="org-string">'x'</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
xlim<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">200</span><span class="org-rainbow-delimiters-depth-4">]</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org22af433" class="outline-2">
|
|
<h2 id="org22af433"><span class="section-number-2">12</span> Importation of measured FRF curves to global FRF matrix</h2>
|
|
<div class="outline-text-2" id="text-12">
|
|
<p>
|
|
FRF matrix \(n \times p\):
|
|
</p>
|
|
<ul class="org-ul">
|
|
<li>\(n\) is the number of measurements: \(3 \times 24\)</li>
|
|
<li>\(p\) is the number of excitation inputs: 3</li>
|
|
</ul>
|
|
|
|
<p>
|
|
23 measurements: 3 accelerometers
|
|
</p>
|
|
|
|
\begin{equation}
|
|
\text{FRF}(\omega_i) = \begin{bmatrix}
|
|
\frac{D_{1_x}}{F_x}(\omega_i) & \frac{D_{1_x}}{F_y}(\omega_i) & \frac{D_{1_x}}{F_z}(\omega_i) \\
|
|
\frac{D_{1_y}}{F_x}(\omega_i) & \frac{D_{1_y}}{F_y}(\omega_i) & \frac{D_{1_y}}{F_z}(\omega_i) \\
|
|
\frac{D_{1_z}}{F_x}(\omega_i) & \frac{D_{1_z}}{F_y}(\omega_i) & \frac{D_{1_z}}{F_z}(\omega_i) \\
|
|
\frac{D_{2_x}}{F_x}(\omega_i) & \frac{D_{2_x}}{F_y}(\omega_i) & \frac{D_{2_x}}{F_z}(\omega_i) \\
|
|
\vdots & \vdots & \vdots \\
|
|
\frac{D_{23_z}}{F_x}(\omega_i) & \frac{D_{23_z}}{F_y}(\omega_i) & \frac{D_{23_z}}{F_z}(\omega_i) \\
|
|
\end{bmatrix}
|
|
\end{equation}
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">n_meas = <span class="org-highlight-numbers-number">24</span>;
|
|
n_acc = <span class="org-highlight-numbers-number">23</span>;
|
|
|
|
dirs = <span class="org-string">'XYZ'</span>;
|
|
|
|
<span class="org-comment">% Number of Accelerometer * DOF for each acccelerometer / Number of excitation / frequency points</span>
|
|
FRFs = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span>n_acc, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">801</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
COHs = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span>n_acc, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">801</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
<span class="org-comment">% Loop through measurements</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">:n_meas</span>
|
|
<span class="org-comment">% Load the measurement file</span>
|
|
meas = load<span class="org-rainbow-delimiters-depth-1">(</span>sprintf<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'./modal_analysis/frf_coh/Measurement%i.mat'</span>, <span class="org-constant">i</span>));
|
|
|
|
<span class="org-comment">% First: determine what is the exitation (direction and sign)</span>
|
|
exc_dir = meas.FFT1_AvXSpc_2_1_RMS_RfName<span class="org-rainbow-delimiters-depth-3">(</span>end<span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
exc_sign = meas.FFT1_AvXSpc_2_1_RMS_RfName<span class="org-rainbow-delimiters-depth-3">(</span>end<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
<span class="org-comment">% Determine what is the correct excitation sign</span>
|
|
exc_factor = str2num<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">[</span>exc_sign, '<span class="org-highlight-numbers-number">1</span>'<span class="org-rainbow-delimiters-depth-4">]</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
<span class="org-keyword">if</span> exc_dir <span class="org-type">~=</span> <span class="org-string">'Z'</span>
|
|
exc_factor = exc_factor<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
|
|
<span class="org-comment">% Then: loop through the nine measurements and store them at the correct location</span>
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">j</span> = <span class="org-constant"><span class="org-highlight-numbers-number">2</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">10</span></span>
|
|
<span class="org-comment">% Determine what is the accelerometer and direction</span>
|
|
<span class="org-rainbow-delimiters-depth-3">[</span>indices_acc_i<span class="org-rainbow-delimiters-depth-3">]</span> = strfind<span class="org-rainbow-delimiters-depth-3">(</span>meas.<span class="org-rainbow-delimiters-depth-4">(</span>sprintf<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">'FFT1_H1_%i_1_RpName', j)), '.'</span>);
|
|
acc_i = str2num<span class="org-rainbow-delimiters-depth-6">(</span>meas.<span class="org-rainbow-delimiters-depth-7">(</span>sprintf<span class="org-rainbow-delimiters-depth-8">(</span><span class="org-string">'FFT1_H1_%i_1_RpName'</span>, <span class="org-constant">j</span>))(indices_acc_i(<span class="org-highlight-numbers-number">1</span>)<span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span>indices_acc_i(<span class="org-highlight-numbers-number">2</span>)<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span>));
|
|
|
|
meas_dir = meas.<span class="org-rainbow-delimiters-depth-9">(</span>sprintf<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'FFT1_H1_%i_1_RpName'</span>, <span class="org-constant">j</span>))(end);
|
|
meas_sign = meas.<span class="org-rainbow-delimiters-depth-2">(</span>sprintf<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'FFT1_H1_%i_1_RpName'</span>, <span class="org-constant">j</span>))(end<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span>);
|
|
<span class="org-comment">% Determine what is the correct measurement sign</span>
|
|
meas_factor = str2num<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">[</span>meas_sign, '<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-keyword">if</span> meas_dir <span class="org-type">~=</span> <span class="org-string">'Z'</span>
|
|
meas_factor = meas_factor<span class="org-type">*</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-4">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
|
|
% FRFs(acc_i<span class="org-type">+</span>n_acc<span class="org-type">*</span>(find(dirs<span class="org-type">==</span>meas_dir)<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span>), find(dirs<span class="org-type">==</span>exc_dir), <span class="org-type">:</span>) = exc_factor<span class="org-type">*</span>meas_factor<span class="org-type">*</span>meas.(sprintf('FFT1_H1_<span class="org-comment">%i_1_Y_ReIm', j));</span>
|
|
% COHs(acc_i<span class="org-type">+</span>n_acc<span class="org-type">*</span>(find(dirs<span class="org-type">==</span>meas_dir)<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span>), find(dirs<span class="org-type">==</span>exc_dir), <span class="org-type">:</span>) = meas.(sprintf('FFT1_Coh_<span class="org-comment">%i_1_RMS_Y_Val', j));</span>
|
|
|
|
FRFs<span class="org-rainbow-delimiters-depth-4">(</span>find<span class="org-rainbow-delimiters-depth-5">(</span>dirs<span class="org-type">==</span>meas_dir<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span>, find<span class="org-rainbow-delimiters-depth-5">(</span>dirs<span class="org-type">==</span>exc_dir<span class="org-rainbow-delimiters-depth-5">)</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span> = exc_factor<span class="org-type">*</span>meas_factor<span class="org-type">*</span>meas.<span class="org-rainbow-delimiters-depth-4">(</span>sprintf<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">'FFT1_H1_%i_1_Y_ReIm'</span>, <span class="org-constant">j</span>));
|
|
COHs<span class="org-rainbow-delimiters-depth-6">(</span>find<span class="org-rainbow-delimiters-depth-7">(</span>dirs<span class="org-type">==</span>meas_dir<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-7">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-7">)</span>, find<span class="org-rainbow-delimiters-depth-7">(</span>dirs<span class="org-type">==</span>exc_dir<span class="org-rainbow-delimiters-depth-7">)</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-6">)</span> = meas.<span class="org-rainbow-delimiters-depth-6">(</span>sprintf<span class="org-rainbow-delimiters-depth-7">(</span><span class="org-string">'FFT1_Coh_%i_1_RMS_Y_Val'</span>, <span class="org-constant">j</span>));
|
|
<span class="org-keyword">end</span>
|
|
<span class="org-keyword">end</span>
|
|
freqs = meas.FFT1_Coh_10_1_RMS_X_Val;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org8686279" class="outline-2">
|
|
<h2 id="org8686279"><span class="section-number-2">13</span> Analysis of some FRFs</h2>
|
|
<div class="outline-text-2" id="text-13">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">acc_i = <span class="org-highlight-numbers-number">3</span>;
|
|
acc_dir = <span class="org-highlight-numbers-number">1</span>;
|
|
exc_dir = <span class="org-highlight-numbers-number">1</span>;
|
|
|
|
<span class="org-type">figure</span>;
|
|
|
|
ax1 = subplot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold on;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs<span class="org-rainbow-delimiters-depth-4">(</span>acc_dir<span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold off;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale', 'log'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'YScale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XTickLabel'</span>,<span class="org-rainbow-delimiters-depth-2">[]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
ax2 = 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;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, mod<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">180</span><span class="org-type">+</span><span class="org-highlight-numbers-number">180</span><span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>phase<span class="org-rainbow-delimiters-depth-3">(</span>squeeze<span class="org-rainbow-delimiters-depth-4">(</span>FRFs<span class="org-rainbow-delimiters-depth-5">(</span>acc_dir<span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-6">(</span>acc_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-6">)</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>, <span class="org-highlight-numbers-number">360</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-rainbow-delimiters-depth-1">)</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-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-1">)</span>;
|
|
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</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">'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>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'xscale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
linkaxes<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>ax1,ax2<span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-string">'x'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">200</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><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">:</span><span class="org-constant"><span class="org-highlight-numbers-number">3</span></span><span class="org-constant">*n_acc</span>
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, squeeze<span class="org-rainbow-delimiters-depth-2">(</span>COHs<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-constant">i</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-string">'color'</span>, <span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">0</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>;
|
|
<span class="org-keyword">end</span>
|
|
hold off;
|
|
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</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>;
|
|
ylabel<span class="org-rainbow-delimiters-depth-1">(</span>'Coherence <span class="org-rainbow-delimiters-depth-2">[</span><span class="org-type">\</span><span class="org-comment">%]');</span>
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<p>
|
|
Composite Response Function.
|
|
</p>
|
|
|
|
<p>
|
|
We here sum the norm instead of the complex numbers.
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">HHx = squeeze<span class="org-rainbow-delimiters-depth-1">(</span>sum<span class="org-rainbow-delimiters-depth-2">(</span>abs<span class="org-rainbow-delimiters-depth-3">(</span>FRFs<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
HHy = squeeze<span class="org-rainbow-delimiters-depth-1">(</span>sum<span class="org-rainbow-delimiters-depth-2">(</span>abs<span class="org-rainbow-delimiters-depth-3">(</span>FRFs<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">2</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
HHz = squeeze<span class="org-rainbow-delimiters-depth-1">(</span>sum<span class="org-rainbow-delimiters-depth-2">(</span>abs<span class="org-rainbow-delimiters-depth-3">(</span>FRFs<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-type">:</span>, <span class="org-highlight-numbers-number">3</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
HH = squeeze<span class="org-rainbow-delimiters-depth-1">(</span>sum<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">[</span>HHx, HHy, HHz<span class="org-rainbow-delimiters-depth-3">]</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>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">exc_dir = <span class="org-highlight-numbers-number">3</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">:</span><span class="org-constant"><span class="org-highlight-numbers-number">3</span></span><span class="org-constant">*n_acc</span>
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-constant">i</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'color'</span>, <span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">0</span>, <span class="org-highlight-numbers-number">0</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>;
|
|
<span class="org-keyword">end</span>
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>HHx<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>HHy<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>HHz<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>HH<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'k'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold off;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale', 'lin'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'YScale', 'lin'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</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">'Amplitude'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">200</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orged94f65" class="outline-2">
|
|
<h2 id="orged94f65"><span class="section-number-2">14</span> From local coordinates to global coordinates with the FRFs</h2>
|
|
<div class="outline-text-2" id="text-14">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab"><span class="org-comment">% Number of Solids * DOF for each solid / Number of excitation / frequency points</span>
|
|
FRFs_O = zeros<span class="org-rainbow-delimiters-depth-1">(</span>length<span class="org-rainbow-delimiters-depth-2">(</span>solid_names<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span>, <span class="org-highlight-numbers-number">3</span>, <span class="org-highlight-numbers-number">801</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">exc_dir</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:</span><span class="org-constant"><span class="org-highlight-numbers-number">3</span></span>
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">solid_i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solid_names</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
|
solids_i = solids.<span class="org-rainbow-delimiters-depth-1">(</span>solid_names<span class="org-rainbow-delimiters-depth-2">{</span>solid_i<span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
A = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span>length<span class="org-rainbow-delimiters-depth-2">(</span>solids_i<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-highlight-numbers-number">6</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant"><span class="org-highlight-numbers-number">1</span></span><span class="org-constant">:length</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solids_i</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
|
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>
|
|
|
|
<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">:</span><span class="org-constant"><span class="org-highlight-numbers-number">801</span></span>
|
|
FRFs_O<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span>solid_i<span class="org-type">*</span><span class="org-highlight-numbers-number">6</span>, exc_dir, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span> = A<span class="org-type">\</span>FRFs<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</span>solids_i<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">3</span><span class="org-type">+</span><span class="org-highlight-numbers-number">1</span><span class="org-type">:</span>solids_i<span class="org-rainbow-delimiters-depth-2">(</span>end<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">3</span>, exc_dir, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
<span class="org-keyword">end</span>
|
|
<span class="org-keyword">end</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgc9405ef" class="outline-2">
|
|
<h2 id="orgc9405ef"><span class="section-number-2">15</span> Analysis of some FRF in the global coordinates</h2>
|
|
<div class="outline-text-2" id="text-15">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">solid_i = <span class="org-highlight-numbers-number">6</span>;
|
|
dir_i = <span class="org-highlight-numbers-number">1</span>;
|
|
exc_dir = <span class="org-highlight-numbers-number">1</span>;
|
|
|
|
<span class="org-type">figure</span>;
|
|
|
|
ax1 = subplot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold on;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>dir_i, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold off;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale', 'log'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'YScale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XTickLabel'</span>,<span class="org-rainbow-delimiters-depth-2">[]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
ax2 = 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;
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, mod<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">180</span><span class="org-type">+</span><span class="org-highlight-numbers-number">180</span><span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>phase<span class="org-rainbow-delimiters-depth-3">(</span>squeeze<span class="org-rainbow-delimiters-depth-4">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>dir_i, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>, <span class="org-highlight-numbers-number">360</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-rainbow-delimiters-depth-1">)</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-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-1">)</span>;
|
|
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</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">'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>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'xscale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
linkaxes<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>ax1,ax2<span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-string">'x'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">200</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgabaf3d0" class="outline-2">
|
|
<h2 id="orgabaf3d0"><span class="section-number-2">16</span> Compare global coordinates to local coordinates</h2>
|
|
<div class="outline-text-2" id="text-16">
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">solid_i = <span class="org-highlight-numbers-number">1</span>;
|
|
acc_dir_O = <span class="org-highlight-numbers-number">6</span>;
|
|
acc_dir = <span class="org-highlight-numbers-number">3</span>;
|
|
exc_dir = <span class="org-highlight-numbers-number">3</span>;
|
|
|
|
<span class="org-type">figure</span>;
|
|
|
|
ax1 = subplot<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">2</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold on;
|
|
<span class="org-keyword">for</span> <span class="org-variable-name">i</span> = <span class="org-constant">solids.</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solid_names</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-2">{</span></span><span class="org-constant">solid_i</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-2">}</span></span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs<span class="org-rainbow-delimiters-depth-4">(</span>acc_dir<span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-5">(</span><span class="org-constant">i</span><span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, abs<span class="org-rainbow-delimiters-depth-2">(</span>squeeze<span class="org-rainbow-delimiters-depth-3">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>acc_dir_O, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'-k'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
hold off;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XScale', 'log'</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">)</span></span><span class="org-string">; set</span><span class="org-string"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-string">gca, 'YScale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'XTickLabel'</span>,<span class="org-rainbow-delimiters-depth-2">[]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
ylabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Amplitude'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
ax2 = 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">solids.</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">(</span></span><span class="org-constant">solid_names</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-2">{</span></span><span class="org-constant">solid_i</span><span class="org-constant"><span class="org-rainbow-delimiters-depth-2">}</span></span><span class="org-constant"><span class="org-rainbow-delimiters-depth-1">)</span></span>
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, mod<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">180</span><span class="org-type">+</span><span class="org-highlight-numbers-number">180</span><span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>phase<span class="org-rainbow-delimiters-depth-3">(</span>squeeze<span class="org-rainbow-delimiters-depth-4">(</span>FRFs<span class="org-rainbow-delimiters-depth-5">(</span>acc_dir<span class="org-type">+</span><span class="org-highlight-numbers-number">3</span><span class="org-type">*</span><span class="org-rainbow-delimiters-depth-6">(</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-6">)</span>, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>, <span class="org-highlight-numbers-number">360</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-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
plot<span class="org-rainbow-delimiters-depth-1">(</span>freqs, mod<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">180</span><span class="org-type">+</span><span class="org-highlight-numbers-number">180</span><span class="org-type">/</span><span class="org-constant">pi</span><span class="org-type">*</span>phase<span class="org-rainbow-delimiters-depth-3">(</span>squeeze<span class="org-rainbow-delimiters-depth-4">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">(</span>solid_i<span class="org-type">-</span><span class="org-highlight-numbers-number">1</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-type">*</span><span class="org-highlight-numbers-number">6</span><span class="org-type">+</span>acc_dir_O, exc_dir, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span>, <span class="org-highlight-numbers-number">360</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-string">'-k'</span><span class="org-rainbow-delimiters-depth-1">)</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-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-1">)</span>;
|
|
xlabel<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Frequency </span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">[</span></span><span class="org-string">Hz</span><span class="org-string"><span class="org-rainbow-delimiters-depth-2">]</span></span><span class="org-string">'</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">'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>;
|
|
<span class="org-type">set</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-variable-name">gca</span>, <span class="org-string">'xscale', 'log'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
|
|
linkaxes<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>ax1,ax2<span class="org-rainbow-delimiters-depth-2">]</span>,<span class="org-string">'x'</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
xlim<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-highlight-numbers-number">1</span>, <span class="org-highlight-numbers-number">200</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org157bd81" class="outline-2">
|
|
<h2 id="org157bd81"><span class="section-number-2">17</span> Verify that we find the original FRF from the FRF in the global coordinates</h2>
|
|
<div class="outline-text-2" id="text-17">
|
|
<p>
|
|
From the computed FRF of the Hexapod in its 6 DOFs, compute the FRF of the accelerometer 1 fixed to the Hexapod during the measurement.
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-matlab">FRF_test = zeros<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">801</span>, <span class="org-highlight-numbers-number">3</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">:</span><span class="org-constant"><span class="org-highlight-numbers-number">801</span></span>
|
|
FRF_test<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">i</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-1">)</span> = FRFs_O<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-highlight-numbers-number">31</span><span class="org-type">:</span><span class="org-highlight-numbers-number">33</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-type">+</span> cross<span class="org-rainbow-delimiters-depth-1">(</span>FRFs_O<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">34</span><span class="org-type">:</span><span class="org-highlight-numbers-number">36</span>, <span class="org-highlight-numbers-number">1</span>, <span class="org-constant">i</span><span class="org-rainbow-delimiters-depth-2">)</span>, acc_pos<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-highlight-numbers-number">1</span>, <span class="org-type">:</span><span class="org-rainbow-delimiters-depth-2">)</span>'<span class="org-rainbow-delimiters-depth-1">)</span>;
|
|
<span class="org-keyword">end</span>
|
|
</pre>
|
|
</div>
|
|
|
|
|
|
<div id="orgb8684e6" class="figure">
|
|
<p><img src="figs/compare_original_meas_with_recovered.png" alt="compare_original_meas_with_recovered.png" />
|
|
</p>
|
|
<p><span class="figure-number">Figure 6: </span>Comparison of the original measured FRFs with the recovered FRF from the FRF in the common cartesian frame</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org6f98d62" class="outline-2">
|
|
<h2 id="org6f98d62"><span class="section-number-2">18</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-03 mer. 13:38</p>
|
|
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
|
</div>
|
|
</body>
|
|
</html>
|