diff --git a/modal-analysis/figs/compare_original_meas_with_recovered.png b/modal-analysis/figs/compare_original_meas_with_recovered.png new file mode 100644 index 0000000..7f5a200 Binary files /dev/null and b/modal-analysis/figs/compare_original_meas_with_recovered.png differ diff --git a/modal-analysis/modes_analysis.html b/modal-analysis/modes_analysis.html index c03bdfb..e419250 100644 --- a/modal-analysis/modes_analysis.html +++ b/modal-analysis/modes_analysis.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Modal Analysis @@ -280,32 +280,33 @@ for the JavaScript code in this tag.

Table of Contents

-
-

1 Setup

+
+

1 Setup

-
+

nass-modal-test.png

Figure 1: Position and orientation of the accelerometer used

@@ -313,8 +314,8 @@ for the JavaScript code in this tag.
-
-

2 Mode extraction and importation

+
+

2 Mode extraction and importation

First, we split the big modes.asc files into sub text files using bash. @@ -510,8 +511,8 @@ The obtained mode frequencies and damping are shown below.

-
-

3 Positions of the sensors

+
+

3 Positions of the sensors

We process the file exported from the modal software containing the positions of the sensors using bash. @@ -700,8 +701,8 @@ The positions of the sensors relative to the point of interest are shown below.

-
-

4 Solids

+
+

4 Solids

We consider the following solid bodies: @@ -716,7 +717,7 @@ We consider the following solid bodies:

-We create a structure solids that contains the accelerometer number of each solid bodies (as shown on figure 1). +We create a structure solids that contains the accelerometer number of each solid bodies (as shown on figure 1).

solids = {};
@@ -733,8 +734,8 @@ solid_names = fields(solids<
 
-
-

5 From local coordinates to global coordinates

+
+

5 From local coordinates to global coordinates

@@ -834,8 +835,8 @@ This inversion is equivalent to a mean square problem.
-
-

6 Modal Matrices

+
+

6 Modal Matrices

We want to obtain the two following matrices: @@ -866,11 +867,11 @@ eigen_vector_M = reshape(mod

-
-

7 Modal Complexity

+
+

7 Modal Complexity

-A method of displaying modal complexity is by plotting the elements of the eigenvector on an Argand diagram, such as the ones shown in figure 3. +A method of displaying modal complexity is by plotting the elements of the eigenvector on an Argand diagram, such as the ones shown in figure 3.

@@ -879,26 +880,26 @@ The obtained area of this polygon is then compared with the area of the circle w

-A little complex mode is shown on figure 3 whereas an highly complex mode is shown on figure 4. -The complexity of all the modes are compared on figure 5. +A little complex mode is shown on figure 3 whereas an highly complex mode is shown on figure 4. +The complexity of all the modes are compared on figure 5.

-
+

modal_complexity_small.png

Figure 3: Modal Complexity of one mode with small complexity

-
+

modal_complexity_high.png

Figure 4: Modal Complexity of one higly complex mode

-
+

modal_complexities.png

Figure 5: Modal complexity for each mode

@@ -906,8 +907,8 @@ The complexity of all the modes are compared on figure 5
-
-

8 Some notes about constraining the number of degrees of freedom

+
+

8 Some notes about constraining the number of degrees of freedom

We want to have the two eigen matrices. @@ -1019,8 +1020,8 @@ Is it meaningful to compare mode shapes as they give no information about the am

-
-

9 TODO Normalization of mode shapes?

+
+

9 TODO Normalization of mode shapes?

We normalize each column of the eigen vector matrix. @@ -1033,8 +1034,8 @@ Then, each eigenvector as a norm of 1.

-
-

10 Compare Mode Shapes

+
+

10 Compare Mode Shapes

Let's say we want to see for the first mode which DOFs can be neglected. @@ -1088,8 +1089,8 @@ test = mode_shapes_O(

-
-

11 Importation of measured FRF curves

+
+

11 Importation of measured FRF curves

There are 24 measurements files corresponding to 24 series of impacts: @@ -1137,8 +1138,8 @@ xlim( -

12 Importation of measured FRF curves to global FRF matrix

+
+

12 Importation of measured FRF curves to global FRF matrix

FRF matrix \(n \times p\): @@ -1214,8 +1215,8 @@ freqs = meas.FFT1_Coh_10_1_RMS_X_Val;

-
-

13 Analysis of some FRFs

+
+

13 Analysis of some FRFs

acc_i = 3;
@@ -1296,8 +1297,8 @@ xlim(
-

14 From local coordinates to global coordinates with the FRFs

+
+

14 From local coordinates to global coordinates with the FRFs

% Number of Solids * DOF for each solid / Number of excitation / frequency points
@@ -1324,8 +1325,8 @@ FRFs_O = zeros(length
 
-
-

15 Analysis of some FRF in the global coordinates

+
+

15 Analysis of some FRF in the global coordinates

solid_i = 6;
@@ -1357,11 +1358,12 @@ xlim(
-

16 Compare global coordinates to local coordinates

+
+

16 Compare global coordinates to local coordinates

solid_i = 1;
+acc_dir_O = 6;
 acc_dir = 3;
 exc_dir = 3;
 
@@ -1372,7 +1374,7 @@ hold on;
 for i = solids.(solid_names{solid_i})
   plot(freqs, abs(squeeze(FRFs(acc_dir+3*(i-1), exc_dir, :))));
 end
-plot(freqs, abs(squeeze(FRFs_O((solid_i-1)*6+acc_dir, exc_dir, :))), '-k');
+plot(freqs, abs(squeeze(FRFs_O((solid_i-1)*6+acc_dir_O, exc_dir, :))), '-k');
 hold off;
 set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
 set(gca, 'XTickLabel',[]);
@@ -1383,7 +1385,7 @@ hold on;
 for i = solids.(solid_names{solid_i})
   plot(freqs, mod(180+180/pi*phase(squeeze(FRFs(acc_dir+3*(i-1), exc_dir, :))), 360)-180);
 end
-plot(freqs, mod(180+180/pi*phase(squeeze(FRFs_O((solid_i-1)*6+acc_dir, exc_dir, :))), 360)-180, '-k');
+plot(freqs, mod(180+180/pi*phase(squeeze(FRFs_O((solid_i-1)*6+acc_dir_O, exc_dir, :))), 360)-180, '-k');
 hold off;
 ylim([-180, 180]); yticks(-180:90:180);
 xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
@@ -1396,14 +1398,37 @@ xlim(
+

17 Verify that we find the original FRF from the FRF in the global coordinates

+
+

+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. +

-
-

17 TODO Synthesis of FRF curves

+
+
FRF_test = zeros(801, 3);
+for i = 1:801
+  FRF_test(i, :) = FRFs_O(31:33, 1, i) + cross(FRFs_O(34:36, 1, i), acc_pos(1, :)');
+end
+
+
+ + +
+

compare_original_meas_with_recovered.png +

+

Figure 6: Comparison of the original measured FRFs with the recovered FRF from the FRF in the common cartesian frame

+
+
+
+ +
+

18 TODO Synthesis of FRF curves

Author: Dehaeze Thomas

-

Created: 2019-07-03 mer. 11:57

+

Created: 2019-07-03 mer. 13:38

Validate

diff --git a/modal-analysis/modes_analysis.org b/modal-analysis/modes_analysis.org index ddf8d9b..37b230f 100644 --- a/modal-analysis/modes_analysis.org +++ b/modal-analysis/modes_analysis.org @@ -733,6 +733,7 @@ We here sum the norm instead of the complex numbers. * Compare global coordinates to local coordinates #+begin_src matlab solid_i = 1; + acc_dir_O = 6; acc_dir = 3; exc_dir = 3; @@ -743,7 +744,7 @@ We here sum the norm instead of the complex numbers. for i = solids.(solid_names{solid_i}) plot(freqs, abs(squeeze(FRFs(acc_dir+3*(i-1), exc_dir, :)))); end - plot(freqs, abs(squeeze(FRFs_O((solid_i-1)*6+acc_dir, exc_dir, :))), '-k'); + plot(freqs, abs(squeeze(FRFs_O((solid_i-1)*6+acc_dir_O, exc_dir, :))), '-k'); hold off; set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XTickLabel',[]); @@ -754,7 +755,7 @@ We here sum the norm instead of the complex numbers. for i = solids.(solid_names{solid_i}) plot(freqs, mod(180+180/pi*phase(squeeze(FRFs(acc_dir+3*(i-1), exc_dir, :))), 360)-180); end - plot(freqs, mod(180+180/pi*phase(squeeze(FRFs_O((solid_i-1)*6+acc_dir, exc_dir, :))), 360)-180, '-k'); + plot(freqs, mod(180+180/pi*phase(squeeze(FRFs_O((solid_i-1)*6+acc_dir_O, exc_dir, :))), 360)-180, '-k'); hold off; ylim([-180, 180]); yticks(-180:90:180); xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); @@ -764,5 +765,63 @@ We here sum the norm instead of the complex numbers. xlim([1, 200]); #+end_src +* Verify that we find the original FRF from the FRF in the global coordinates +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. + +#+begin_src matlab + FRF_test = zeros(801, 3); + for i = 1:801 + FRF_test(i, :) = FRFs_O(31:33, 1, i) + cross(FRFs_O(34:36, 1, i), acc_pos(1, :)'); + end +#+end_src + +#+begin_src matlab :exports none + figure; + + ax1 = subplot(3, 1, 1); + hold on; + plot(freqs, abs(squeeze(FRFs(1, 1, :)))); + plot(freqs, abs(squeeze(FRF_test(:, 1))), '--k'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + xlim([1, 200]); + title('FRF $\frac{D_{1x}}{F_x}$'); + + ax2 = subplot(3, 1, 2); + hold on; + plot(freqs, abs(squeeze(FRFs(2, 1, :)))); + plot(freqs, abs(squeeze(FRF_test(:, 2))), '--k'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + set(gca, 'XTickLabel',[]); + ylabel('Amplitude'); + xlim([1, 200]); + title('FRF $\frac{D_{1y}}{F_x}$'); + + ax3 = subplot(3, 1, 3); + hold on; + plot(freqs, abs(squeeze(FRFs(3, 1, :)))); + plot(freqs, abs(squeeze(FRF_test(:, 3))), '--k'); + hold off; + set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); + xlabel('Frequency [Hz]'); + xlim([1, 200]); + legend({'Original Measurement', 'Recovered Measurement'}, 'Location', 'southeast'); + title('FRF $\frac{D_{1z}}{F_x}$'); +#+end_src + +#+HEADER: :tangle no :exports results :results none :noweb yes +#+begin_src matlab :var filepath="figs/compare_original_meas_with_recovered.pdf" :var figsize="full-tall" :post pdf2svg(file=*this*, ext="png") + <> +#+end_src + +#+NAME: fig:compare_original_meas_with_recovered +#+CAPTION: Comparison of the original measured FRFs with the recovered FRF from the FRF in the common cartesian frame +[[file:figs/compare_original_meas_with_recovered.png]] + +#+begin_important + The reduction of the number of degrees of freedom from 69 (23 accelerometers with each 3DOF) to 36 (6 solid bodies with 6 DOF) seems to work well. +#+end_important * TODO Synthesis of FRF curves