Finish the file about measurements. Add raw measurements to git
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 28 KiB |
BIN
modal-analysis/figs/fourier_transfor_force_impact.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
modal-analysis/figs/fourier_transform_response_signals.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
modal-analysis/figs/frf_comparison_software.png
Normal file
After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB |
BIN
modal-analysis/figs/windowing_force_signal.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
modal-analysis/figs/windowing_response_signal.png
Normal file
After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 447 KiB |
Before Width: | Height: | Size: 647 KiB After Width: | Height: | Size: 402 KiB |
BIN
modal-analysis/img/modes/mode11.gif
Normal file
After Width: | Height: | Size: 402 KiB |
BIN
modal-analysis/img/modes/mode12.gif
Normal file
After Width: | Height: | Size: 401 KiB |
BIN
modal-analysis/img/modes/mode13.gif
Normal file
After Width: | Height: | Size: 412 KiB |
BIN
modal-analysis/img/modes/mode14.gif
Normal file
After Width: | Height: | Size: 463 KiB |
BIN
modal-analysis/img/modes/mode15.gif
Normal file
After Width: | Height: | Size: 414 KiB |
BIN
modal-analysis/img/modes/mode16.gif
Normal file
After Width: | Height: | Size: 409 KiB |
BIN
modal-analysis/img/modes/mode17.gif
Normal file
After Width: | Height: | Size: 406 KiB |
BIN
modal-analysis/img/modes/mode18.gif
Normal file
After Width: | Height: | Size: 407 KiB |
BIN
modal-analysis/img/modes/mode19.gif
Normal file
After Width: | Height: | Size: 445 KiB |
Before Width: | Height: | Size: 802 KiB After Width: | Height: | Size: 451 KiB |
BIN
modal-analysis/img/modes/mode20.gif
Normal file
After Width: | Height: | Size: 421 KiB |
BIN
modal-analysis/img/modes/mode21.gif
Normal file
After Width: | Height: | Size: 401 KiB |
Before Width: | Height: | Size: 673 KiB After Width: | Height: | Size: 412 KiB |
Before Width: | Height: | Size: 750 KiB After Width: | Height: | Size: 428 KiB |
Before Width: | Height: | Size: 753 KiB After Width: | Height: | Size: 402 KiB |
Before Width: | Height: | Size: 615 KiB After Width: | Height: | Size: 412 KiB |
Before Width: | Height: | Size: 596 KiB After Width: | Height: | Size: 417 KiB |
Before Width: | Height: | Size: 683 KiB After Width: | Height: | Size: 469 KiB |
Before Width: | Height: | Size: 696 KiB After Width: | Height: | Size: 493 KiB |
@ -20,7 +20,31 @@
|
|||||||
#+HTML_MATHJAX: align: center tagside: right font: TeX
|
#+HTML_MATHJAX: align: center tagside: right font: TeX
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
The modal analysis of the ID31 Micro-station consists of several parts:
|
The goal is to experimentally extract a *Spatial Model* (mass, damping, stiffness) of the structure (shown on figure [[fig:nass_picture]]) in order to tune the Multi-Body model.
|
||||||
|
|
||||||
|
#+name: fig:nass_picture
|
||||||
|
#+caption: Picture of the ID31 Micro-Station. (1) Granite (2) Translation Stage (3) Tilt Stage (4) Hexapod (5) Dummy Mass
|
||||||
|
#+attr_html: :width 500px
|
||||||
|
[[file:img/nass_picture.png]]
|
||||||
|
|
||||||
|
The procedure is represented on figure [[fig:vibration_analysis_procedure]] where we go from left to right.
|
||||||
|
|
||||||
|
#+name: fig:vibration_analysis_procedure
|
||||||
|
#+caption: Vibration Analysis Procedure
|
||||||
|
#+attr_html: :width 400px
|
||||||
|
[[file:img/vibration_analysis_procedure.png]]
|
||||||
|
|
||||||
|
The steps are:
|
||||||
|
- we obtain a *Response Model* (Frequency Response Functions) from measurements (described [[file:measurement.org][here]])
|
||||||
|
- the response model is further converted into a *Modal Model* (Natural Frequencies and Mode Shapes) (described [[file:modal_extraction.org][here]])
|
||||||
|
- this is converted into a *Spatial Model* with the Mass/Damping/Stiffness matrices (described [[file:mathematical_model.org][here]])
|
||||||
|
|
||||||
|
Theses matrices will be used to tune the Simscape (multi-body) model.
|
||||||
|
|
||||||
|
The modes we want to identify are those in the frequency range between 0Hz and 150Hz.
|
||||||
|
|
||||||
|
|
||||||
|
The modal analysis of the ID31 Micro-station thus consists of several parts:
|
||||||
- [[file:measurement.org][Frequency Response Measurements]]
|
- [[file:measurement.org][Frequency Response Measurements]]
|
||||||
- [[file:modal_extraction.org][Modal Parameter Extraction]]
|
- [[file:modal_extraction.org][Modal Parameter Extraction]]
|
||||||
- [[file:mathematical_model.org][Derivation of Mathematical Model]]
|
- [[file:mathematical_model.org][Derivation of Mathematical Model]]
|
||||||
|
23
modal-analysis/mat/acc_pos.txt
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
23 1.5500e-001 -9.0000e-002 -5.9400e-001
|
||||||
|
22 0.0000e+000 1.8000e-001 -5.9400e-001
|
||||||
|
21 -1.5500e-001 -9.0000e-002 -5.9400e-001
|
||||||
|
20 8.6490e-001 -5.0600e-001 -9.5060e-001
|
||||||
|
19 8.7500e-001 7.9900e-001 -9.5060e-001
|
||||||
|
18 -7.3500e-001 8.1400e-001 -9.5060e-001
|
||||||
|
17 -7.3000e-001 -5.2600e-001 -9.5060e-001
|
||||||
|
16 2.9500e-001 -4.8100e-001 -7.8560e-001
|
||||||
|
15 4.5000e-001 5.3400e-001 -7.8560e-001
|
||||||
|
14 -4.8000e-001 5.3400e-001 -7.8560e-001
|
||||||
|
13 -3.2000e-001 -4.4600e-001 -7.8560e-001
|
||||||
|
12 4.7500e-001 -4.1900e-001 -4.2730e-001
|
||||||
|
11 4.7500e-001 4.2400e-001 -4.2730e-001
|
||||||
|
10 -4.6500e-001 4.0700e-001 -4.2730e-001
|
||||||
|
9 -4.7500e-001 -4.1400e-001 -4.2730e-001
|
||||||
|
8 3.8000e-001 -3.0000e-001 -4.1680e-001
|
||||||
|
7 4.2000e-001 2.8000e-001 -4.1680e-001
|
||||||
|
6 -4.2000e-001 2.8000e-001 -4.1680e-001
|
||||||
|
5 -3.8500e-001 -3.0000e-001 -4.1680e-001
|
||||||
|
4 6.4000e-002 -6.4000e-002 -2.9600e-001
|
||||||
|
3 6.4000e-002 6.4000e-002 -2.9600e-001
|
||||||
|
2 -6.4000e-002 6.4000e-002 -2.9600e-001
|
||||||
|
1 -6.4000e-002 -6.4000e-002 -2.9600e-001
|
BIN
modal-analysis/mat/frf_coh_matrices.mat
Normal file
90
modal-analysis/mat/id31_nanostation.cfg
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
This file was saved by N-Modal automatically.
|
||||||
|
16:49:47, Monday, July 01, 2019
|
||||||
|
|
||||||
|
HEADER
|
||||||
|
Data are imported from UFF files.
|
||||||
|
|
||||||
|
|
||||||
|
FREQVEC
|
||||||
|
UFF
|
||||||
|
|
||||||
|
RES_TYPE
|
||||||
|
ACCELERATION
|
||||||
|
|
||||||
|
COOR_SYS
|
||||||
|
1 0 0.0000e+000 0.0000e+000 0.0000e+000 0.0000e+000 0.0000e+000 0.0000e+000 0.0000e+000 0.0000e+000 0.0000e+000 Cartesian1
|
||||||
|
|
||||||
|
NODES
|
||||||
|
23 1.5500e-001 -9.0000e-002 -5.9400e-001 0 bot
|
||||||
|
22 0.0000e+000 1.8000e-001 -5.9400e-001 0 bot
|
||||||
|
21 -1.5500e-001 -9.0000e-002 -5.9400e-001 0 bot
|
||||||
|
20 8.6490e-001 -5.0600e-001 -9.5060e-001 0 low
|
||||||
|
19 8.7500e-001 7.9900e-001 -9.5060e-001 0 low
|
||||||
|
18 -7.3500e-001 8.1400e-001 -9.5060e-001 0 low
|
||||||
|
17 -7.3000e-001 -5.2600e-001 -9.5060e-001 0 low
|
||||||
|
16 2.9500e-001 -4.8100e-001 -7.8560e-001 0 top
|
||||||
|
15 4.5000e-001 5.3400e-001 -7.8560e-001 0 top
|
||||||
|
14 -4.8000e-001 5.3400e-001 -7.8560e-001 0 top
|
||||||
|
13 -3.2000e-001 -4.4600e-001 -7.8560e-001 0 top
|
||||||
|
12 4.7500e-001 -4.1900e-001 -4.2730e-001 0 outer
|
||||||
|
11 4.7500e-001 4.2400e-001 -4.2730e-001 0 outer
|
||||||
|
10 -4.6500e-001 4.0700e-001 -4.2730e-001 0 outer
|
||||||
|
9 -4.7500e-001 -4.1400e-001 -4.2730e-001 0 outer
|
||||||
|
8 3.8000e-001 -3.0000e-001 -4.1680e-001 0 inner
|
||||||
|
7 4.2000e-001 2.8000e-001 -4.1680e-001 0 inner
|
||||||
|
6 -4.2000e-001 2.8000e-001 -4.1680e-001 0 inner
|
||||||
|
5 -3.8500e-001 -3.0000e-001 -4.1680e-001 0 inner
|
||||||
|
4 6.4000e-002 -6.4000e-002 -2.7000e-001 0 Top
|
||||||
|
3 6.4000e-002 6.4000e-002 -2.7000e-001 0 Top
|
||||||
|
2 -6.4000e-002 6.4000e-002 -2.7000e-001 0 Top
|
||||||
|
1 -6.4000e-002 -6.4000e-002 -2.7000e-001 0 Top
|
||||||
|
|
||||||
|
LINES
|
||||||
|
1 4
|
||||||
|
4 3
|
||||||
|
3 2
|
||||||
|
2 1
|
||||||
|
1 21
|
||||||
|
21 23
|
||||||
|
23 22
|
||||||
|
22 21
|
||||||
|
21 5
|
||||||
|
5 6
|
||||||
|
6 7
|
||||||
|
7 8
|
||||||
|
8 5
|
||||||
|
6 10
|
||||||
|
10 11
|
||||||
|
11 12
|
||||||
|
12 9
|
||||||
|
9 10
|
||||||
|
10 14
|
||||||
|
14 15
|
||||||
|
15 16
|
||||||
|
16 13
|
||||||
|
13 14
|
||||||
|
14 18
|
||||||
|
18 19
|
||||||
|
19 20
|
||||||
|
20 17
|
||||||
|
17 18
|
||||||
|
5 9
|
||||||
|
9 13
|
||||||
|
12 16
|
||||||
|
16 20
|
||||||
|
17 13
|
||||||
|
8 12
|
||||||
|
23 8
|
||||||
|
2 22
|
||||||
|
22 3
|
||||||
|
7 22
|
||||||
|
22 6
|
||||||
|
7 11
|
||||||
|
11 15
|
||||||
|
15 19
|
||||||
|
4 23
|
||||||
|
|
||||||
|
SETUP
|
||||||
|
Setup 1
|
||||||
|
FILE
|
||||||
|
C:\Users\lesourd\Downloads\id31_modal_analysis\uff_data\Measurement1.uff|Measurement2.uff|Measurement3.uff|Measurement4.uff|Measurement5.uff|Measurement6.uff|Measurement7.uff|Measurement8.uff|Measurement9.uff|Measurement10.uff|Measurement11.uff|Measurement12.uff|Measurement13.uff|Measurement14.uff|Measurement15.uff|Measurement16.uff|Measurement17.uff|Measurement18.uff|Measurement19.uff|Measurement20.uff|Measurement21.uff|Measurement22.uff|Measurement23.uff|Measurement24.uff
|
BIN
modal-analysis/mat/meas_frf_coh_1.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_10.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_11.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_12.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_13.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_14.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_15.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_16.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_17.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_18.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_19.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_2.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_20.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_21.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_22.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_23.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_24.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_3.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_4.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_5.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_6.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_7.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_8.mat
Normal file
BIN
modal-analysis/mat/meas_frf_coh_9.mat
Normal file
BIN
modal-analysis/mat/meas_raw_1.mat
Normal file
BIN
modal-analysis/mat/meas_raw_10.mat
Normal file
BIN
modal-analysis/mat/meas_raw_11.mat
Normal file
BIN
modal-analysis/mat/meas_raw_12.mat
Normal file
BIN
modal-analysis/mat/meas_raw_13.mat
Normal file
BIN
modal-analysis/mat/meas_raw_14.mat
Normal file
BIN
modal-analysis/mat/meas_raw_15.mat
Normal file
BIN
modal-analysis/mat/meas_raw_16.mat
Normal file
BIN
modal-analysis/mat/meas_raw_17.mat
Normal file
BIN
modal-analysis/mat/meas_raw_18.mat
Normal file
BIN
modal-analysis/mat/meas_raw_19.mat
Normal file
BIN
modal-analysis/mat/meas_raw_2.mat
Normal file
BIN
modal-analysis/mat/meas_raw_20.mat
Normal file
BIN
modal-analysis/mat/meas_raw_21.mat
Normal file
BIN
modal-analysis/mat/meas_raw_22.mat
Normal file
BIN
modal-analysis/mat/meas_raw_23.mat
Normal file
BIN
modal-analysis/mat/meas_raw_24.mat
Normal file
BIN
modal-analysis/mat/meas_raw_3.mat
Normal file
BIN
modal-analysis/mat/meas_raw_4.mat
Normal file
BIN
modal-analysis/mat/meas_raw_5.mat
Normal file
BIN
modal-analysis/mat/meas_raw_6.mat
Normal file
BIN
modal-analysis/mat/meas_raw_7.mat
Normal file
BIN
modal-analysis/mat/meas_raw_8.mat
Normal file
BIN
modal-analysis/mat/meas_raw_9.mat
Normal file
21
modal-analysis/mat/mode_damps.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
8.72664
|
||||||
|
11.75321
|
||||||
|
6.44322
|
||||||
|
3.60695
|
||||||
|
0.24170
|
||||||
|
2.83603
|
||||||
|
4.60472
|
||||||
|
0.64145
|
||||||
|
1.58544
|
||||||
|
3.56361
|
||||||
|
0.26865
|
||||||
|
2.86851
|
||||||
|
3.30737
|
||||||
|
3.27213
|
||||||
|
1.89158
|
||||||
|
3.02795
|
||||||
|
2.71094
|
||||||
|
0.56008
|
||||||
|
1.64638
|
||||||
|
2.17368
|
||||||
|
1.39142
|
21
modal-analysis/mat/mode_freqs.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
11.41275
|
||||||
|
18.51409
|
||||||
|
37.58431
|
||||||
|
39.43487
|
||||||
|
53.99524
|
||||||
|
56.14871
|
||||||
|
69.68561
|
||||||
|
71.58533
|
||||||
|
72.35341
|
||||||
|
84.92538
|
||||||
|
90.56538
|
||||||
|
91.00542
|
||||||
|
95.76079
|
||||||
|
105.43696
|
||||||
|
106.76771
|
||||||
|
112.58508
|
||||||
|
116.84928
|
||||||
|
124.13356
|
||||||
|
145.35893
|
||||||
|
150.10734
|
||||||
|
164.65885
|
21
modal-analysis/mat/mode_modal_a.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
-4.50556e+003 -9.41744e+003
|
||||||
|
-1.56119e+003 -1.64408e+004
|
||||||
|
1.24918e+004 -2.00022e+004
|
||||||
|
-1.83730e+004 +8.73583e+004
|
||||||
|
-6.02120e+005 -5.53574e+004
|
||||||
|
-8.13722e+003 -4.17194e+004
|
||||||
|
9.12802e+003 -3.78264e+004
|
||||||
|
1.83523e+005 -5.45837e+005
|
||||||
|
-1.85481e+005 -8.15852e+004
|
||||||
|
-6.44647e+003 -3.91843e+004
|
||||||
|
2.02548e+005 -4.85436e+005
|
||||||
|
-1.54209e+002 -3.09920e+004
|
||||||
|
2.10759e+004 -1.47578e+004
|
||||||
|
-8.03639e+003 -7.00743e+004
|
||||||
|
1.73222e+005 +1.94075e+005
|
||||||
|
5.46351e+003 -9.46357e+003
|
||||||
|
-2.00775e+004 +5.23111e+004
|
||||||
|
-6.04037e+004 -8.70001e+004
|
||||||
|
1.50266e+004 -1.61655e+005
|
||||||
|
1.66427e+005 +1.73772e+005
|
||||||
|
-2.41033e+005 +2.81618e+005
|
21
modal-analysis/mat/mode_modal_b.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
-7.00928e+005 +2.62922e+005
|
||||||
|
-1.92061e+006 -4.44325e+004
|
||||||
|
-4.52363e+006 -3.24813e+006
|
||||||
|
2.14671e+007 +5.33018e+006
|
||||||
|
-1.92744e+007 +2.04231e+008
|
||||||
|
-1.47938e+007 +2.45218e+006
|
||||||
|
-1.63606e+007 -4.75508e+006
|
||||||
|
-2.44974e+008 -8.41188e+007
|
||||||
|
-3.84216e+007 +8.37228e+007
|
||||||
|
-2.10181e+007 +2.69256e+006
|
||||||
|
-2.75921e+008 -1.15999e+008
|
||||||
|
-1.77166e+007 -4.20197e+005
|
||||||
|
-8.45524e+006 -1.29677e+007
|
||||||
|
-4.65722e+007 +3.80208e+006
|
||||||
|
1.32368e+008 -1.13721e+008
|
||||||
|
-6.57437e+006 -4.06578e+006
|
||||||
|
3.79924e+007 +1.57763e+007
|
||||||
|
-6.81189e+007 +4.67313e+007
|
||||||
|
-1.47397e+008 -1.61530e+007
|
||||||
|
1.67266e+008 -1.53366e+008
|
||||||
|
2.87859e+008 +2.53398e+008
|
1449
modal-analysis/mat/mode_shapes.txt
Normal file
1600
modal-analysis/mat/modes.asc
Normal file
2
modal-analysis/mat/nohup.out
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
(termite:6464): GLib-WARNING **: 10:26:13.129: GChildWatchSource: Exit status of a child process was requested but ECHILD was received by waitpid(). See the documentation of g_child_watch_source_new() for possible causes.
|
@ -7,7 +7,7 @@
|
|||||||
#+AUTHOR: Dehaeze Thomas
|
#+AUTHOR: Dehaeze Thomas
|
||||||
|
|
||||||
#+HTML_LINK_HOME: ../index.html
|
#+HTML_LINK_HOME: ../index.html
|
||||||
#+HTML_LINK_UP: ../index.html
|
#+HTML_LINK_UP: ./index.html
|
||||||
|
|
||||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/htmlize.css"/>
|
||||||
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
|
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/readtheorg.css"/>
|
||||||
@ -38,3 +38,25 @@
|
|||||||
#+PROPERTY: header-args:latex+ :mkdirp yes
|
#+PROPERTY: header-args:latex+ :mkdirp yes
|
||||||
#+PROPERTY: header-args:latex+ :output-dir figs
|
#+PROPERTY: header-args:latex+ :output-dir figs
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
|
* Type of Model
|
||||||
|
The model that we want to obtain is a *multi-body model*.
|
||||||
|
It is composed of several *solid bodies connected with springs and dampers*.
|
||||||
|
The solid bodies are represented with different colors on figure [[fig:nass_solidworks]].
|
||||||
|
|
||||||
|
In the simscape model, the solid bodies are:
|
||||||
|
- the granite (1 or 2 solids)
|
||||||
|
- the translation stage
|
||||||
|
- the tilt stage
|
||||||
|
- the spindle and slip-ring
|
||||||
|
- the hexapod
|
||||||
|
|
||||||
|
#+name: fig:nass_solidworks
|
||||||
|
#+caption: CAD view of the ID31 Micro-Station
|
||||||
|
#+attr_html: :width 800px
|
||||||
|
[[file:img/nass_solidworks.png]]
|
||||||
|
|
||||||
|
However, each of the DOF of the system may not be relevant for the modes present in the frequency band of interest.
|
||||||
|
For instance, the translation stage may not vibrate in the Z direction for all the modes identified. Then, we can block this DOF and this simplifies the model.
|
||||||
|
|
||||||
|
The modal identification done here will thus permit us to determine *which DOF can be neglected*.
|
||||||
|
317
modal-analysis/matlab/modal_frf_coh.m
Normal file
@ -0,0 +1,317 @@
|
|||||||
|
%% Clear Workspace and Close figures
|
||||||
|
clear; close all; clc;
|
||||||
|
|
||||||
|
%% Intialize Laplace variable
|
||||||
|
s = zpk('s');
|
||||||
|
|
||||||
|
% Windowing
|
||||||
|
% Windowing is used on the force and response signals.
|
||||||
|
|
||||||
|
% A boxcar window (figure [[fig:windowing_force_signal]]) is used for the force signal as once the impact on the structure is done, the measured signal is meaningless.
|
||||||
|
% The parameters are:
|
||||||
|
% - *Start*: $3\%$
|
||||||
|
% - *Stop*: $7\%$
|
||||||
|
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(100*[0, 0.03, 0.03, 0.07, 0.07, 1], [0, 0, 1, 1, 0, 0]);
|
||||||
|
xlabel('Time [%]'); ylabel('Amplitude');
|
||||||
|
xlim([0, 100]); ylim([0, 1]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% #+NAME: fig:windowing_force_signal
|
||||||
|
% #+CAPTION: Window used for the force signal
|
||||||
|
% [[file:figs/windowing_force_signal.png]]
|
||||||
|
|
||||||
|
% An exponential window (figure [[fig:windowing_response_signal]]) is used for the response signal as we are measuring transient signals and most of the information is located at the beginning of the signal.
|
||||||
|
% The parameters are:
|
||||||
|
% - FlatTop:
|
||||||
|
% - *Start*: $3\%$
|
||||||
|
% - *Stop*: $2.96\%$
|
||||||
|
% - Decreasing point:
|
||||||
|
% - *X*: $60.4\%$
|
||||||
|
% - *Y*: $14.7\%$
|
||||||
|
|
||||||
|
|
||||||
|
x0 = 0.296;
|
||||||
|
xd = 0.604;
|
||||||
|
yd = 0.147;
|
||||||
|
|
||||||
|
alpha = log(yd)/(x0 - xd);
|
||||||
|
|
||||||
|
t = x0:0.01:1.01;
|
||||||
|
y = exp(-alpha*(t-x0));
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(100*[0, 0.03, 0.03, x0, t], [0, 0, 1, 1, y]);
|
||||||
|
xlabel('Time [%]'); ylabel('Amplitude');
|
||||||
|
xlim([0, 100]); ylim([0, 1]);
|
||||||
|
|
||||||
|
% Force and Response signals
|
||||||
|
% Let's load some obtained data to look at the force and response signals.
|
||||||
|
|
||||||
|
|
||||||
|
meas1_raw = load('mat/meas_raw_1.mat');
|
||||||
|
|
||||||
|
% Raw Force Data
|
||||||
|
% The force input for the first measurement is shown on figure [[fig:raw_data_force]]. We can see 10 impacts, one zoom on one impact is shown on figure [[fig:raw_data_force_zoom]].
|
||||||
|
|
||||||
|
% The Fourier transform of the force is shown on figure [[fig:fourier_transfor_force_impact]]. This has been obtained without any windowing.
|
||||||
|
|
||||||
|
|
||||||
|
time = linspace(0, meas1_raw.Track1_X_Resolution*length(meas1_raw.Track1), length(meas1_raw.Track1));
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(time, meas1_raw.Track1);
|
||||||
|
xlabel('Time [s]');
|
||||||
|
ylabel('Force [N]');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% #+NAME: fig:raw_data_force
|
||||||
|
% #+CAPTION: Raw Force Data from Hammer Blow
|
||||||
|
% [[file:figs/raw_data_force.png]]
|
||||||
|
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(time, meas1_raw.Track1);
|
||||||
|
xlabel('Time [s]');
|
||||||
|
ylabel('Force [N]');
|
||||||
|
xlim([22.1, 22.3]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% #+NAME: fig:raw_data_force_zoom
|
||||||
|
% #+CAPTION: Raw Force Data from Hammer Blow - Zoom
|
||||||
|
% [[file:figs/raw_data_force_zoom.png]]
|
||||||
|
|
||||||
|
|
||||||
|
Fs = 1/meas1_raw.Track1_X_Resolution; % Sampling Frequency [Hz]
|
||||||
|
impacts = [5.9, 11.2, 16.6, 22.2, 27.3, 32.7, 38.1, 43.8, 50.4]; % Time just before the impact occurs [s]
|
||||||
|
|
||||||
|
L = 8194;
|
||||||
|
f = Fs*(0:(L/2))/L; % Frequency vector [Hz]
|
||||||
|
|
||||||
|
F_fft = zeros((8193+1)/2+1, length(impacts));
|
||||||
|
|
||||||
|
for i = 1:length(impacts)
|
||||||
|
t0 = impacts(i);
|
||||||
|
[~, i_start] = min(abs(time-t0));
|
||||||
|
i_end = i_start + 8193;
|
||||||
|
|
||||||
|
Y = fft(meas1_raw.Track1(i_start:i_end));
|
||||||
|
|
||||||
|
P2 = abs(Y/L);
|
||||||
|
P1 = P2(1:L/2+1);
|
||||||
|
P1(2:end-1) = 2*P1(2:end-1);
|
||||||
|
F_fft(:, i) = P1;
|
||||||
|
end
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
for i = 1:length(impacts)
|
||||||
|
plot(f, F_fft(:, i), '-k');
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
xlim([0, 200]);
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Force [N]');
|
||||||
|
|
||||||
|
% Raw Response Data
|
||||||
|
% The response signal for the first measurement is shown on figure [[fig:raw_data_acceleration]]. One zoom on one response is shown on figure [[fig:raw_data_acceleration_zoom]].
|
||||||
|
|
||||||
|
% The Fourier transform of the response signals is shown on figure [[fig:fourier_transform_response_signals]]. This has been obtained without any windowing.
|
||||||
|
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(time, meas1_raw.Track2);
|
||||||
|
xlabel('Time [s]');
|
||||||
|
ylabel('Acceleration [m/s2]');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% #+NAME: fig:raw_data_acceleration
|
||||||
|
% #+CAPTION: Raw Acceleration Data from Accelerometer
|
||||||
|
% [[file:figs/raw_data_acceleration.png]]
|
||||||
|
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(time, meas1_raw.Track2);
|
||||||
|
xlabel('Time [s]');
|
||||||
|
ylabel('Acceleration [m/s2]');
|
||||||
|
xlim([22.1, 22.5]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% #+NAME: fig:raw_data_acceleration_zoom
|
||||||
|
% #+CAPTION: Raw Acceleration Data from Accelerometer - Zoom
|
||||||
|
% [[file:figs/raw_data_acceleration_zoom.png]]
|
||||||
|
|
||||||
|
|
||||||
|
X_fft = zeros((8193+1)/2+1, length(impacts));
|
||||||
|
|
||||||
|
for i = 1:length(impacts)
|
||||||
|
t0 = impacts(i);
|
||||||
|
[~, i_start] = min(abs(time-t0));
|
||||||
|
i_end = i_start + 8193;
|
||||||
|
|
||||||
|
Y = fft(meas1_raw.Track2(i_start:i_end));
|
||||||
|
|
||||||
|
P2 = abs(Y/L);
|
||||||
|
P1 = P2(1:L/2+1);
|
||||||
|
P1(2:end-1) = 2*P1(2:end-1);
|
||||||
|
X_fft(:, i) = P1;
|
||||||
|
end
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
for i = 1:length(impacts)
|
||||||
|
plot(f, X_fft(:, i), '-k');
|
||||||
|
end
|
||||||
|
hold off;
|
||||||
|
xlim([0, 200]);
|
||||||
|
set(gca, 'Yscale', 'log');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Acceleration [$m/s^2$]');
|
||||||
|
|
||||||
|
% Computation of one Frequency Response Function
|
||||||
|
% Now that we have obtained the Fourier transform of both the force input and the response signal, we can compute the Frequency Response Function from the force to the acceleration.
|
||||||
|
|
||||||
|
% We then compare the result obtained with the FRF computed by the modal software (figure [[fig:frf_comparison_software]]).
|
||||||
|
|
||||||
|
% The slight difference can probably be explained by the use of windows.
|
||||||
|
|
||||||
|
% In the following analysis, FRF computed from the software will be used.
|
||||||
|
|
||||||
|
|
||||||
|
meas1 = load('mat/meas_frf_coh_1.mat');
|
||||||
|
|
||||||
|
figure;
|
||||||
|
hold on;
|
||||||
|
for i = 1:length(impacts)
|
||||||
|
plot(f, X_fft(:, i)./F_fft(:, i), '-k');
|
||||||
|
end
|
||||||
|
plot(meas1.FFT1_AvSpc_2_RMS_X_Val, meas1.FFT1_AvSpc_2_RMS_Y_Val)
|
||||||
|
hold off;
|
||||||
|
xlim([0, 200]);
|
||||||
|
set(gca, 'Yscale', 'log');
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Acceleration/Force [$m/s^2/N$]');
|
||||||
|
|
||||||
|
% Frequency Response Functions and Coherence Results
|
||||||
|
% Let's see one computed Frequency Response Function and one coherence in order to attest the quality of the measurement.
|
||||||
|
|
||||||
|
% First, we load the data.
|
||||||
|
|
||||||
|
meas1 = load('mat/meas_frf_coh_1.mat');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% And we plot on figure [[fig:frf_result_example]] the frequency response function from the force applied in the $X$ direction at the location of the accelerometer number 11 to the acceleration in the $X$ direction as measured by the first accelerometer located on the top platform of the hexapod.
|
||||||
|
|
||||||
|
% The coherence associated is shown on figure [[fig:frf_result_example]].
|
||||||
|
|
||||||
|
|
||||||
|
figure;
|
||||||
|
ax1 = subplot(2, 1, 1);
|
||||||
|
plot(meas1.FFT1_AvSpc_2_RMS_X_Val, meas1.FFT1_AvXSpc_2_1_RMS_Y_Mod);
|
||||||
|
set(gca, 'Yscale', 'log');
|
||||||
|
set(gca, 'XTickLabel',[]);
|
||||||
|
ylabel('Magnitude');
|
||||||
|
|
||||||
|
ax2 = subplot(2, 1, 2);
|
||||||
|
plot(meas1.FFT1_AvSpc_2_RMS_X_Val, meas1.FFT1_AvXSpc_2_1_RMS_Y_Phas);
|
||||||
|
ylim([-180, 180]);
|
||||||
|
yticks([-180, -90, 0, 90, 180]);
|
||||||
|
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||||
|
|
||||||
|
linkaxes([ax1,ax2],'x');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% #+NAME: fig:frf_result_example
|
||||||
|
% #+CAPTION: Example of one measured FRF
|
||||||
|
% [[file:figs/frf_result_example.png]]
|
||||||
|
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(meas1.FFT1_AvSpc_2_RMS_X_Val, meas1.FFT1_Coh_2_1_RMS_Y_Val);
|
||||||
|
xlabel('Frequency [Hz]');
|
||||||
|
ylabel('Coherence');
|
||||||
|
|
||||||
|
% Generation of a FRF matrix and a Coherence matrix from the measurements
|
||||||
|
% We want here to combine all the Frequency Response Functions measured into one big array called the *Frequency Response Matrix*.
|
||||||
|
|
||||||
|
% The frequency response matrix is an $n \times p \times q$:
|
||||||
|
% - $n$ is the number of measurements: $23 \times 3$ (23 accelerometers measuring 3 directions each)
|
||||||
|
% - $p$ is the number of excitation inputs: $3$
|
||||||
|
% - $q$ is the number of frequency points $\omega_i$
|
||||||
|
|
||||||
|
% Thus, the FRF matrix is an $69 \times 3 \times 801$ matrix.
|
||||||
|
|
||||||
|
|
||||||
|
% #+begin_important
|
||||||
|
% For each frequency point $\omega_i$, we obtain a 2D matrix:
|
||||||
|
% \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}
|
||||||
|
% #+end_important
|
||||||
|
|
||||||
|
% We generate such FRF matrix from the measurements using the following script.
|
||||||
|
|
||||||
|
n_meas = 24;
|
||||||
|
n_acc = 23;
|
||||||
|
|
||||||
|
dirs = 'XYZ';
|
||||||
|
|
||||||
|
% Number of Accelerometer * DOF for each acccelerometer / Number of excitation / frequency points
|
||||||
|
FRFs = zeros(3*n_acc, 3, 801);
|
||||||
|
COHs = zeros(3*n_acc, 3, 801);
|
||||||
|
|
||||||
|
% Loop through measurements
|
||||||
|
for i = 1:n_meas
|
||||||
|
% Load the measurement file
|
||||||
|
meas = load(sprintf('mat/meas_frf_coh_%i.mat', i));
|
||||||
|
|
||||||
|
% First: determine what is the exitation (direction and sign)
|
||||||
|
exc_dir = meas.FFT1_AvXSpc_2_1_RMS_RfName(end);
|
||||||
|
exc_sign = meas.FFT1_AvXSpc_2_1_RMS_RfName(end-1);
|
||||||
|
% Determine what is the correct excitation sign
|
||||||
|
exc_factor = str2num([exc_sign, '1']);
|
||||||
|
if exc_dir ~= 'Z'
|
||||||
|
exc_factor = exc_factor*(-1);
|
||||||
|
end
|
||||||
|
|
||||||
|
% Then: loop through the nine measurements and store them at the correct location
|
||||||
|
for j = 2:10
|
||||||
|
% Determine what is the accelerometer and direction
|
||||||
|
[indices_acc_i] = strfind(meas.(sprintf('FFT1_H1_%i_1_RpName', j)), '.');
|
||||||
|
acc_i = str2num(meas.(sprintf('FFT1_H1_%i_1_RpName', j))(indices_acc_i(1)+1:indices_acc_i(2)-1));
|
||||||
|
|
||||||
|
meas_dir = meas.(sprintf('FFT1_H1_%i_1_RpName', j))(end);
|
||||||
|
meas_sign = meas.(sprintf('FFT1_H1_%i_1_RpName', j))(end-1);
|
||||||
|
% Determine what is the correct measurement sign
|
||||||
|
meas_factor = str2num([meas_sign, '1']);
|
||||||
|
if meas_dir ~= 'Z'
|
||||||
|
meas_factor = meas_factor*(-1);
|
||||||
|
end
|
||||||
|
|
||||||
|
% FRFs(acc_i+n_acc*(find(dirs==meas_dir)-1), find(dirs==exc_dir), :) = exc_factor*meas_factor*meas.(sprintf('FFT1_H1_%i_1_Y_ReIm', j));
|
||||||
|
% COHs(acc_i+n_acc*(find(dirs==meas_dir)-1), find(dirs==exc_dir), :) = meas.(sprintf('FFT1_Coh_%i_1_RMS_Y_Val', j));
|
||||||
|
|
||||||
|
FRFs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = exc_factor*meas_factor*meas.(sprintf('FFT1_H1_%i_1_Y_ReIm', j));
|
||||||
|
COHs(find(dirs==meas_dir)+3*(acc_i-1), find(dirs==exc_dir), :) = meas.(sprintf('FFT1_Coh_%i_1_RMS_Y_Val', j));
|
||||||
|
end
|
||||||
|
end
|
||||||
|
freqs = meas.FFT1_Coh_10_1_RMS_X_Val;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
% And we save the obtained FRF matrix and Coherence matrix in a =.mat= file.
|
||||||
|
|
||||||
|
save('./mat/frf_coh_matrices.mat', 'FRFs', 'COHs', 'freqs');
|