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 Binary files a/modal-analysis/modes_analysis.html and b/modal-analysis/modes_analysis.html differ 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