Analyze results of strut 1 measurements

This commit is contained in:
Thomas Dehaeze 2021-06-04 11:51:52 +02:00
parent fd98d01c5f
commit 23035845f9
35 changed files with 163 additions and 162 deletions

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

View File

@ -1881,7 +1881,7 @@ for i = 1:length(apa_nums)
end end
#+end_src #+end_src
The coherence is shown in Figure [[fig:frf_dvf_plant_coh]]. The coherence is shown in Figure [[fig:apa_frf_dvf_plant_coh]].
It is clear that the Sweep sine gives good coherence up to 400Hz and that the high frequency noise excitation signal helps increasing a little bit the coherence at high frequency. It is clear that the Sweep sine gives good coherence up to 400Hz and that the high frequency noise excitation signal helps increasing a little bit the coherence at high frequency.
#+begin_src matlab :exports none #+begin_src matlab :exports none
@ -1905,13 +1905,13 @@ legend('location', 'southeast');
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_dvf_plant_coh.pdf', 'width', 'wide', 'height', 'normal'); exportFig('figs/apa_frf_dvf_plant_coh.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+end_src
#+name: fig:frf_dvf_plant_coh #+name: fig:apa_frf_dvf_plant_coh
#+caption: Obtained coherence for the plant from $V_a$ to $d_e$ #+caption: Obtained coherence for the plant from $V_a$ to $d_e$
#+RESULTS: #+RESULTS:
[[file:figs/frf_dvf_plant_coh.png]] [[file:figs/apa_frf_dvf_plant_coh.png]]
Then, the transfer function from the DAC output voltage $V_a$ to the measured displacement by the encoders is computed: Then, the transfer function from the DAC output voltage $V_a$ to the measured displacement by the encoders is computed:
@ -1930,7 +1930,7 @@ for i = 1:length(apa_nums)
end end
#+end_src #+end_src
The obtained transfer functions are shown in Figure [[fig:frf_dvf_plant_tf]]. The obtained transfer functions are shown in Figure [[fig:apa_frf_dvf_plant_tf]].
They are all superimposed except for the APA7. They are all superimposed except for the APA7.
#+begin_question #+begin_question
@ -1978,15 +1978,15 @@ xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_dvf_plant_tf.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/apa_frf_dvf_plant_tf.pdf', 'width', 'wide', 'height', 'tall');
#+end_src #+end_src
#+name: fig:frf_dvf_plant_tf #+name: fig:apa_frf_dvf_plant_tf
#+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the encoder $d_e$) #+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the encoder $d_e$)
#+RESULTS: #+RESULTS:
[[file:figs/frf_dvf_plant_tf.png]] [[file:figs/apa_frf_dvf_plant_tf.png]]
A zoom on the main resonance is shown in Figure [[fig:frf_dvf_zoom_res_plant_tf]]. A zoom on the main resonance is shown in Figure [[fig:apa_frf_dvf_zoom_res_plant_tf]].
It is clear that expect for the APA 7, the response around the resonances are well matching for all the APA. It is clear that expect for the APA 7, the response around the resonances are well matching for all the APA.
It is also clear that there is not a single resonance but two resonances, a first one at 95Hz and a second one at 105Hz. It is also clear that there is not a single resonance but two resonances, a first one at 95Hz and a second one at 105Hz.
@ -2029,18 +2029,18 @@ xlim([80, 120]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_dvf_zoom_res_plant_tf.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/apa_frf_dvf_zoom_res_plant_tf.pdf', 'width', 'wide', 'height', 'tall');
#+end_src #+end_src
#+name: fig:frf_dvf_zoom_res_plant_tf #+name: fig:apa_frf_dvf_zoom_res_plant_tf
#+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the encoder $d_e$) - Zoom on the main resonance #+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the encoder $d_e$) - Zoom on the main resonance
#+RESULTS: #+RESULTS:
[[file:figs/frf_dvf_zoom_res_plant_tf.png]] [[file:figs/apa_frf_dvf_zoom_res_plant_tf.png]]
*** FRF Identification - IFF *** FRF Identification - IFF
In this section, the dynamics from $V_a$ to $V_s$ is identified. In this section, the dynamics from $V_a$ to $V_s$ is identified.
First the coherence is computed and shown in Figure [[fig:frf_iff_plant_coh]]. First the coherence is computed and shown in Figure [[fig:apa_frf_iff_plant_coh]].
The coherence is very nice from 10Hz to 2kHz. The coherence is very nice from 10Hz to 2kHz.
It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered). It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered).
@ -2080,15 +2080,15 @@ legend('location', 'southeast');
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_iff_plant_coh.pdf', 'width', 'wide', 'height', 'normal'); exportFig('figs/apa_frf_iff_plant_coh.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+end_src
#+name: fig:frf_iff_plant_coh #+name: fig:apa_frf_iff_plant_coh
#+caption: Obtained coherence for the IFF plant #+caption: Obtained coherence for the IFF plant
#+RESULTS: #+RESULTS:
[[file:figs/frf_iff_plant_coh.png]] [[file:figs/apa_frf_iff_plant_coh.png]]
Then the FRF are estimated and shown in Figure [[fig:frf_iff_plant_tf]] Then the FRF are estimated and shown in Figure [[fig:apa_frf_iff_plant_tf]]
#+begin_src matlab #+begin_src matlab
%% FRF estimation of the transfer function from Va to Vs %% FRF estimation of the transfer function from Va to Vs
iff_sweep = zeros(length(f), length(apa_nums)); iff_sweep = zeros(length(f), length(apa_nums));
@ -2140,42 +2140,42 @@ xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_iff_plant_tf.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/apa_frf_iff_plant_tf.pdf', 'width', 'wide', 'height', 'tall');
#+end_src #+end_src
#+name: fig:frf_iff_plant_tf #+name: fig:apa_frf_iff_plant_tf
#+caption:Identified IFF Plant #+caption:Identified IFF Plant
#+RESULTS: #+RESULTS:
[[file:figs/frf_iff_plant_tf.png]] [[file:figs/apa_frf_iff_plant_tf.png]]
* Dynamical measurements - Struts * Dynamical measurements - Struts
<<sec:dynamical_meas_struts>> <<sec:dynamical_meas_struts>>
** Introduction :ignore: ** Introduction :ignore:
The same bench used in Section [[sec:dynamical_meas_apa]] is here used with the strut instead of only the APA.
The bench is shown in Figure [[fig:test_bench_leg_overview]].
Measurements are performed either when no encoder is fixed to the strut (Figure [[fig:test_bench_leg_front]]) or when one encoder is fixed to the strut (Figure [[fig:test_bench_leg_overview]]).
#+name: fig:test_bench_leg_overview #+name: fig:test_bench_leg_overview
#+caption: Test Bench with Strut - Overview #+caption: Test Bench with Strut - Overview
#+attr_latex: :width 0.5\linewidth
[[file:figs/test_bench_leg_overview.png]] [[file:figs/test_bench_leg_overview.png]]
#+name: fig:test_bench_leg_front #+name: fig:test_bench_leg_front
#+caption: Test Bench with Strut - Zoom on the strut #+caption: Test Bench with Strut - Zoom on the strut
#+attr_latex: :width 0.5\linewidth
[[file:figs/test_bench_leg_front.png]] [[file:figs/test_bench_leg_front.png]]
#+name: fig:test_bench_leg_overview #+name: fig:test_bench_leg_overview
#+caption: Test Bench with Strut - Zoom on the strut with the encoder #+caption: Test Bench with Strut - Zoom on the strut with the encoder
#+attr_latex: :width 0.5\linewidth
[[file:figs/test_bench_leg_coder.png]] [[file:figs/test_bench_leg_coder.png]]
| Variable | | Unit | Hardware |
|----------+------------------------------+------+-------------------------------|
| =Va= | Output DAC voltage | [V] | DAC - Ch. 1 => PD200 => APA |
| =Vs= | Measured stack voltage (ADC) | [V] | APA => ADC - Ch. 1 |
| =de= | Encoder Measurement | [m] | PEPU Ch. 1 - IO318(1) - Ch. 1 |
| =da= | Attocube Measurement | [m] | PEPU Ch. 2 - IO318(1) - Ch. 2 |
| =t= | Time | [s] | |
** Measurement on Strut 1 ** Measurement on Strut 1
<<sec:meas_strut_1>>
*** Introduction :ignore: *** Introduction :ignore:
Measurements are first performed on the strut number 1 with: Measurements are first performed on the strut 1 that contains:
- APA 1 - APA 1
- flex 1 and flex 2 - flex 1 and flex 2
@ -2204,6 +2204,7 @@ addpath('./src/');
#+end_src #+end_src
*** Without Encoder *** Without Encoder
<<sec:meas_strut_1_no_encoder>>
**** FRF Identification - Setup **** FRF Identification - Setup
The identification is performed in three steps: The identification is performed in three steps:
1. White noise excitation with small amplitude. 1. White noise excitation with small amplitude.
@ -2241,8 +2242,8 @@ We get the frequency vector that will be the same for all the frequency domain a
[~, f] = tfestimate(leg_sweep.Va, leg_sweep.de, win, [], [], 1/Ts); [~, f] = tfestimate(leg_sweep.Va, leg_sweep.de, win, [], [], 1/Ts);
#+end_src #+end_src
**** TODO FRF Identification - DVF **** FRF Identification - Displacement
In this section, the dynamics from $V_a$ to $d_e$ is identified. In this section, the dynamics from the excitation voltage $V_a$ to the interferometer $d_a$ is identified.
We compute the coherence for 2nd and 3rd identification: We compute the coherence for 2nd and 3rd identification:
#+begin_src matlab #+begin_src matlab
@ -2253,57 +2254,40 @@ We compute the coherence for 2nd and 3rd identification:
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
hold on; hold on;
plot(f, coh_noise_hf(:, 1), 'color', [colors(1, :), 0.5], ... plot(f, coh_noise_hf(:, 1), 'color', colors(1, :), ...
'DisplayName', 'HF Noise'); 'DisplayName', 'HF Noise');
plot(f, coh_sweep(:, 1), 'color', [colors(2, :), 0.5], ... plot(f, coh_sweep(:, 1), 'color', colors(2, :), ...
'DisplayName', 'Sweep'); 'DisplayName', 'Sweep');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Coherence [-]'); xlabel('Frequency [Hz]'); ylabel('Coherence [-]');
% xlim([5, 5e3]); ylim([0, 1]); xlim([5, 5e3]); ylim([0, 1]);
legend('location', 'southeast'); legend('location', 'southeast');
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_dvf_plant_coh.pdf', 'width', 'wide', 'height', 'normal'); exportFig('figs/strut_1_frf_dvf_plant_coh.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+end_src
#+name: fig:frf_dvf_plant_coh #+name: fig:strut_1_frf_dvf_plant_coh
#+caption: Obtained coherence for the plant from $V_a$ to $d_e$ #+caption: Obtained coherence for the plant from $V_a$ to $d_a$
#+RESULTS: #+RESULTS:
[[file:figs/frf_dvf_plant_coh.png]] [[file:figs/strut_1_frf_dvf_plant_coh.png]]
The transfer function from $V_a$ to the interferometer measured displacement $d_a$ is estimated and shown in Figure [[fig:strut_1_frf_dvf_plant_tf]].
#+begin_src matlab #+begin_src matlab
[dvf_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.da, win, [], [], 1/Ts); [dvf_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.da, win, [], [], 1/Ts);
[dvf_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.da, win, [], [], 1/Ts); [dvf_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.da, win, [], [], 1/Ts);
#+end_src #+end_src
The obtained transfer functions are shown in Figure [[fig:frf_dvf_plant_tf]].
They are all superimposed except for the APA7.
#+begin_question
Why is the APA7 off?
We could think that the APA7 is stiffer, but also the mass line is off.
It seems that there is a "gain" problem.
The encoder seems fine (it measured the same as the Interferometer).
Maybe it could be due to the amplifier?
#+end_question
#+begin_question
Why is there a double resonance at around 94Hz?
#+end_question
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile; ax1 = nexttile([2,1]);
hold on; hold on;
plot(f(f> 350), abs(dvf_noise_hf(f> 350)), 'color', colors(1, :)); plot(f(f> 350), abs(dvf_noise_hf(f> 350)), 'k-');
plot(f(f<=350), abs(dvf_sweep( f<=350)), 'color', colors(1, :)); plot(f(f<=350), abs(dvf_sweep( f<=350)), 'k-');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/V_a$ [m/V]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude $d_e/V_a$ [m/V]'); set(gca, 'XTickLabel',[]);
@ -2312,31 +2296,31 @@ ylim([1e-9, 1e-3]);
ax2 = nexttile; ax2 = nexttile;
hold on; hold on;
plot(f(f> 350), 180/pi*angle(dvf_noise_hf(f> 350)), 'color', colors(1, :)); plot(f(f> 350), 180/pi*angle(dvf_noise_hf(f> 350)), 'k-');
plot(f(f<=350), 180/pi*angle(dvf_sweep( f<=350)), 'color', colors(1, :)); plot(f(f<=350), 180/pi*angle(dvf_sweep( f<=350)), 'k-');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_dvf_plant_tf.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/strut_1_frf_dvf_plant_tf.pdf', 'width', 'wide', 'height', 'tall');
#+end_src #+end_src
#+name: fig:frf_dvf_plant_tf #+name: fig:strut_1_frf_dvf_plant_tf
#+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the encoder $d_e$) #+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the interferometer $d_a$)
#+RESULTS: #+RESULTS:
[[file:figs/frf_dvf_plant_tf.png]] [[file:figs/strut_1_frf_dvf_plant_tf.png]]
**** TODO FRF Identification - IFF **** FRF Identification - IFF
In this section, the dynamics from $V_a$ to $V_s$ is identified. In this section, the dynamics from $V_a$ to $V_s$ is identified.
First the coherence is computed and shown in Figure [[fig:frf_iff_plant_coh]]. First the coherence is computed and shown in Figure [[fig:strut_1_frf_iff_plant_coh]].
The coherence is very nice from 10Hz to 2kHz. The coherence is very nice from 10Hz to 2kHz.
It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered). It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered).
@ -2360,15 +2344,15 @@ legend('location', 'southeast');
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_iff_plant_coh.pdf', 'width', 'wide', 'height', 'normal'); exportFig('figs/strut_1_frf_iff_plant_coh.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+end_src
#+name: fig:frf_iff_plant_coh #+name: fig:strut_1_frf_iff_plant_coh
#+caption: Obtained coherence for the IFF plant #+caption: Obtained coherence for the IFF plant
#+RESULTS: #+RESULTS:
[[file:figs/frf_iff_plant_coh.png]] [[file:figs/strut_1_frf_iff_plant_coh.png]]
Then the FRF are estimated and shown in Figure [[fig:frf_iff_plant_tf]] Then the FRF are estimated and shown in Figure [[fig:strut_1_frf_iff_plant_tf]]
#+begin_src matlab #+begin_src matlab
[iff_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.Vs, win, [], [], 1/Ts); [iff_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.Vs, win, [], [], 1/Ts);
[iff_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.Vs, win, [], [], 1/Ts); [iff_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.Vs, win, [], [], 1/Ts);
@ -2376,60 +2360,50 @@ Then the FRF are estimated and shown in Figure [[fig:frf_iff_plant_tf]]
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile; ax1 = nexttile([2,1]);
hold on; hold on;
plot(f(f> 350), abs(iff_noise_hf(f> 350)), 'color', colors(1, :)); plot(f(f> 350), abs(iff_noise_hf(f> 350)), 'k-');
plot(f(f<=350), abs(iff_sweep( f<=350)), 'color', colors(1, :)); plot(f(f<=350), abs(iff_sweep( f<=350)), 'k-');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $V_s/V_a$ [V/V]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude $V_s/V_a$ [V/V]'); set(gca, 'XTickLabel',[]);
hold off; hold off;
ylim([1e-2, 1e2]); ylim([1e-2, 1e2]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
ax2 = nexttile; ax2 = nexttile;
hold on; hold on;
plot(f(f> 350), 180/pi*angle(iff_noise_hf(f> 350)), 'color', colors(1, :)); plot(f(f> 350), 180/pi*angle(iff_noise_hf(f> 350)), 'k-');
plot(f(f<=350), 180/pi*angle(iff_sweep( f<=350)), 'color', colors(1, :)); plot(f(f<=350), 180/pi*angle(iff_sweep( f<=350)), 'k-');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_iff_plant_tf.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/strut_1_frf_iff_plant_tf.pdf', 'width', 'wide', 'height', 'tall');
#+end_src #+end_src
#+name: fig:frf_iff_plant_tf #+name: fig:strut_1_frf_iff_plant_tf
#+caption:Identified IFF Plant #+caption:Identified IFF Plant for the Strut 1
#+RESULTS: #+RESULTS:
[[file:figs/frf_iff_plant_tf.png]] [[file:figs/strut_1_frf_iff_plant_tf.png]]
*** With Encoder *** With Encoder
**** FRF Identification - Setup <<sec:meas_strut_1_encoder>>
The identification is performed in three steps: **** Measurement Data
1. White noise excitation with small amplitude.
This is used to determine the main resonance of the system.
2. Sweep sine excitation with the amplitude lowered around the resonance.
The sweep sine is from 10Hz to 400Hz.
3. High frequency noise.
The noise is band-passed between 300Hz and 2kHz.
Then, the result of the second identification is used between 10Hz and 350Hz and the result of the third identification if used between 350Hz and 2kHz.
#+begin_src matlab #+begin_src matlab
leg_enc_sweep = load(sprintf('frf_data_leg_coder_badly_align_%i_noise.mat', 1), 't', 'Va', 'Vs', 'de', 'da'); leg_enc_sweep = load(sprintf('frf_data_leg_coder_badly_align_%i_noise.mat', 1), 't', 'Va', 'Vs', 'de', 'da');
leg_enc_noise_hf = load(sprintf('frf_data_leg_coder_badly_align_%i_noise_hf.mat', 1), 't', 'Va', 'Vs', 'de', 'da'); leg_enc_noise_hf = load(sprintf('frf_data_leg_coder_badly_align_%i_noise_hf.mat', 1), 't', 'Va', 'Vs', 'de', 'da');
#+end_src #+end_src
**** TODO FRF Identification - DVF **** FRF Identification - DVF
In this section, the dynamics from $V_a$ to $d_e$ is identified. In this section, the dynamics from $V_a$ to $d_e$ is identified.
We compute the coherence for 2nd and 3rd identification: We compute the coherence for 2nd and 3rd identification:
@ -2443,9 +2417,9 @@ colors = get(gca,'colororder');
figure; figure;
hold on; hold on;
plot(f, coh_enc_noise_hf(:, 1), 'color', [colors(1, :), 0.5], ... plot(f, coh_enc_noise_hf(:, 1), 'color', colors(1, :), ...
'DisplayName', 'HF Noise'); 'DisplayName', 'HF Noise');
plot(f, coh_enc_sweep(:, 1), 'color', [colors(2, :), 0.5], ... plot(f, coh_enc_sweep(:, 1), 'color', colors(2, :), ...
'DisplayName', 'Sweep'); 'DisplayName', 'Sweep');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
@ -2455,21 +2429,25 @@ legend('location', 'southeast');
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_dvf_plant_coh.pdf', 'width', 'wide', 'height', 'normal'); exportFig('figs/strut_1_enc_frf_dvf_plant_coh.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+end_src
#+name: fig:frf_dvf_plant_coh #+name: fig:strut_1_enc_frf_dvf_plant_coh
#+caption: Obtained coherence for the plant from $V_a$ to $d_e$ #+caption: Obtained coherence for the plant from $V_a$ to $d_e$
#+RESULTS: #+RESULTS:
[[file:figs/frf_dvf_plant_coh.png]] [[file:figs/strut_1_enc_frf_dvf_plant_coh.png]]
#+begin_src matlab #+begin_src matlab
[dvf_enc_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.de, win, [], [], 1/Ts); [dvf_enc_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.de, win, [], [], 1/Ts);
[dvf_enc_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.de, win, [], [], 1/Ts); [dvf_enc_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.de, win, [], [], 1/Ts);
#+end_src #+end_src
The obtained transfer functions are shown in Figure [[fig:frf_dvf_plant_tf]]. #+begin_src matlab
[dvf_int_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.da, win, [], [], 1/Ts);
[dvf_int_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.da, win, [], [], 1/Ts);
#+end_src
The obtained transfer functions are shown in Figure [[fig:strut_1_enc_frf_dvf_plant_tf]].
They are all superimposed except for the APA7. They are all superimposed except for the APA7.
@ -2488,53 +2466,51 @@ Why is there a double resonance at around 94Hz?
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile; ax1 = nexttile([2,1]);
hold on; hold on;
plot(f(f> 350), abs(dvf_enc_noise_hf(f> 350)), 'color', colors(1, :)); plot(f(f> 350), abs(dvf_enc_noise_hf(f> 350)), 'k-');
plot(f(f<=350), abs(dvf_enc_sweep( f<=350)), 'color', colors(1, :)); plot(f(f<=350), abs(dvf_enc_sweep( f<=350)), 'k-');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/V_a$ [m/V]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude $d_e/V_a$ [m/V]'); set(gca, 'XTickLabel',[]);
hold off; hold off;
ylim([1e-9, 1e-3]); ylim([1e-7, 1e-3]);
ax2 = nexttile; ax2 = nexttile;
hold on; hold on;
plot(f(f> 350), 180/pi*angle(dvf_enc_noise_hf(f> 350)), 'color', colors(1, :)); plot(f(f> 350), 180/pi*angle(dvf_enc_noise_hf(f> 350)), 'k-');
plot(f(f<=350), 180/pi*angle(dvf_enc_sweep( f<=350)), 'color', colors(1, :)); plot(f(f<=350), 180/pi*angle(dvf_enc_sweep( f<=350)), 'k-');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_dvf_plant_tf.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/strut_1_enc_frf_dvf_plant_tf.pdf', 'width', 'wide', 'height', 'tall');
#+end_src #+end_src
#+name: fig:frf_dvf_plant_tf #+name: fig:strut_1_enc_frf_dvf_plant_tf
#+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the encoder $d_e$) #+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the encoder $d_e$)
#+RESULTS: #+RESULTS:
[[file:figs/frf_dvf_plant_tf.png]] [[file:figs/strut_1_enc_frf_dvf_plant_tf.png]]
**** Comparison with Interferometer **** Comparison of the Encoder and Interferometer
The interferometer could here represent the case where the encoders are fixed to the plates and not the APA.
#+begin_src matlab The dynamics from $V_a$ to $d_e$ and from $V_a$ to $d_a$ are compared in Figure [[fig:strut_1_comp_enc_int]].
[dvf_int_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.da, win, [], [], 1/Ts);
[dvf_int_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.da, win, [], [], 1/Ts);
#+end_src
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile; ax1 = nexttile([2,1]);
hold on; hold on;
plot(f(f> 350), abs(dvf_enc_noise_hf(f> 350)), 'color', colors(1, :), ... plot(f(f> 350), abs(dvf_enc_noise_hf(f> 350)), 'color', colors(1, :), ...
'DisplayName', 'Encoder'); 'DisplayName', 'Encoder');
@ -2546,10 +2522,10 @@ plot(f(f<=350), abs(dvf_int_sweep( f<=350)), 'color', colors(2, :), ...
'HandleVisibility', 'off'); 'HandleVisibility', 'off');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d_e/V_a$ [m/V]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude $d/V_a$ [m/V]'); set(gca, 'XTickLabel',[]);
hold off; hold off;
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2); legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
ylim([1e-9, 1e-3]); ylim([1e-8, 1e-3]);
ax2 = nexttile; ax2 = nexttile;
hold on; hold on;
@ -2561,19 +2537,27 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_important #+begin_src matlab :tangle no :exports results :results file replace
Clearly using the encoder like this will not be useful. exportFig('figs/strut_1_comp_enc_int.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
Probably, the encoders will have to be fixed on the plates so that the resonances of the APA are not a problem anymore. #+name: fig:strut_1_comp_enc_int
#+caption:
#+RESULTS:
[[file:figs/strut_1_comp_enc_int.png]]
#+begin_important
It will clearly be difficult to do something (except some low frequency positioning) with the encoders fixed to the APA.
#+end_important #+end_important
**** APA Resonances Frequency **** APA Resonances Frequency
As shown in Figure [[fig:strut_1_spurious_resonances]], we can clearly see three spurious resonances at 197Hz, 290Hz and 376Hz.
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
@ -2592,19 +2576,33 @@ hold off;
ylim([1e-7, 1e-3]); xlim([10, 2e3]); ylim([1e-7, 1e-3]); xlim([10, 2e3]);
#+end_src #+end_src
This is very close to what was estimated using the FEM. #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/strut_1_spurious_resonances.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:mode_bending_x #+name: fig:strut_1_spurious_resonances
#+caption:
#+RESULTS:
[[file:figs/strut_1_spurious_resonances.png]]
These resonances correspond to parasitic resonances of the APA itself.
They are very close to what was estimated using the FEM:
- X-bending mode at ~190Hz (Figure [[fig:mode_bending_x_bis]])
- Y-bending mode at ~290Hz (Figure [[fig:mode_bending_y_bis]])
- Z-torsion mode at ~400Hz (Figure [[fig:mode_torsion_z_bis]])
#+name: fig:mode_bending_x_bis
#+caption: X-bending mode (189Hz) #+caption: X-bending mode (189Hz)
#+attr_latex: :width 0.9\linewidth #+attr_latex: :width 0.9\linewidth
[[file:figs/mode_bending_x.gif]] [[file:figs/mode_bending_x.gif]]
#+name: fig:mode_bending_y #+name: fig:mode_bending_y_bis
#+caption: Y-bending mode (285Hz) #+caption: Y-bending mode (285Hz)
#+attr_latex: :width 0.9\linewidth #+attr_latex: :width 0.9\linewidth
[[file:figs/mode_bending_y.gif]] [[file:figs/mode_bending_y.gif]]
#+name: fig:mode_torsion_z #+name: fig:mode_torsion_z_bis
#+caption: Z-torsion mode (400Hz) #+caption: Z-torsion mode (400Hz)
#+attr_latex: :width 0.9\linewidth #+attr_latex: :width 0.9\linewidth
[[file:figs/mode_torsion_z.gif]] [[file:figs/mode_torsion_z.gif]]
@ -2613,10 +2611,11 @@ This is very close to what was estimated using the FEM.
The resonances are indeed due to limited stiffness of the APA. The resonances are indeed due to limited stiffness of the APA.
#+end_important #+end_important
**** TODO Estimated Flexible Joint axial stiffness
**** FRF Identification - IFF **** FRF Identification - IFF
In this section, the dynamics from $V_a$ to $V_s$ is identified. In this section, the dynamics from $V_a$ to $V_s$ is identified.
First the coherence is computed and shown in Figure [[fig:frf_iff_plant_coh]]. First the coherence is computed and shown in Figure [[fig:strut_1_frf_iff_plant_coh]].
The coherence is very nice from 10Hz to 2kHz. The coherence is very nice from 10Hz to 2kHz.
It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered). It is only dropping near a zeros at 40Hz, and near the resonance at 95Hz (the excitation amplitude being lowered).
@ -2630,8 +2629,8 @@ colors = get(gca,'colororder');
figure; figure;
hold on; hold on;
plot(f, coh_enc_noise_hf, 'color', [colors(1, :), 0.5], 'DisplayName', 'HF Noise'); plot(f, coh_enc_noise_hf, 'color', colors(1, :), 'DisplayName', 'HF Noise');
plot(f, coh_enc_sweep, 'color', [colors(2, :), 0.5], 'DisplayName', 'Sweep'); plot(f, coh_enc_sweep, 'color', colors(2, :), 'DisplayName', 'Sweep');
hold off; hold off;
xlabel('Frequency [Hz]'); ylabel('Coherence [-]'); xlabel('Frequency [Hz]'); ylabel('Coherence [-]');
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
@ -2640,15 +2639,15 @@ legend('location', 'southeast');
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_iff_plant_coh.pdf', 'width', 'wide', 'height', 'normal'); exportFig('figs/strut_1_frf_iff_plant_coh.pdf', 'width', 'wide', 'height', 'normal');
#+end_src #+end_src
#+name: fig:frf_iff_plant_coh #+name: fig:strut_1_frf_iff_plant_coh
#+caption: Obtained coherence for the IFF plant #+caption: Obtained coherence for the IFF plant
#+RESULTS: #+RESULTS:
[[file:figs/frf_iff_plant_coh.png]] [[file:figs/strut_1_frf_iff_plant_coh.png]]
Then the FRF are estimated and shown in Figure [[fig:frf_iff_plant_tf]] Then the FRF are estimated and shown in Figure [[fig:strut_1_enc_frf_iff_plant_tf]]
#+begin_src matlab #+begin_src matlab
[iff_enc_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.Vs, win, [], [], 1/Ts); [iff_enc_sweep, ~] = tfestimate(leg_enc_sweep.Va, leg_enc_sweep.Vs, win, [], [], 1/Ts);
[iff_enc_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.Vs, win, [], [], 1/Ts); [iff_enc_noise_hf, ~] = tfestimate(leg_enc_noise_hf.Va, leg_enc_noise_hf.Vs, win, [], [], 1/Ts);
@ -2656,61 +2655,54 @@ Then the FRF are estimated and shown in Figure [[fig:frf_iff_plant_tf]]
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile; ax1 = nexttile([2,1]);
hold on; hold on;
plot(f(f> 350), abs(iff_enc_noise_hf(f> 350)), 'color', colors(1, :)); plot(f(f> 350), abs(iff_enc_noise_hf(f> 350)), 'k-');
plot(f(f<=350), abs(iff_enc_sweep( f<=350)), 'color', colors(1, :)); plot(f(f<=350), abs(iff_enc_sweep( f<=350)), 'k-');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $V_s/V_a$ [V/V]'); set(gca, 'XTickLabel',[]); ylabel('Amplitude $V_s/V_a$ [V/V]'); set(gca, 'XTickLabel',[]);
hold off; hold off;
ylim([1e-2, 1e2]); ylim([1e-2, 1e2]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
ax2 = nexttile; ax2 = nexttile;
hold on; hold on;
plot(f(f> 350), 180/pi*angle(iff_enc_noise_hf(f> 350)), 'color', colors(1, :)); plot(f(f> 350), 180/pi*angle(iff_enc_noise_hf(f> 350)), 'k');
plot(f(f<=350), 180/pi*angle(iff_enc_sweep( f<=350)), 'color', colors(1, :)); plot(f(f<=350), 180/pi*angle(iff_enc_sweep( f<=350)), 'k');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace #+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/frf_iff_plant_tf.pdf', 'width', 'wide', 'height', 'tall'); exportFig('figs/strut_1_enc_frf_iff_plant_tf.pdf', 'width', 'wide', 'height', 'tall');
#+end_src #+end_src
#+name: fig:frf_iff_plant_tf #+name: fig:strut_1_enc_frf_iff_plant_tf
#+caption:Identified IFF Plant #+caption:Identified IFF Plant
#+RESULTS: #+RESULTS:
[[file:figs/frf_iff_plant_tf.png]] [[file:figs/strut_1_enc_frf_iff_plant_tf.png]]
**** Comparison to when the encoder is not fixed
#+begin_src matlab
[iff_sweep, ~] = tfestimate(leg_sweep.Va, leg_sweep.Vs, win, [], [], 1/Ts);
[iff_noise_hf, ~] = tfestimate(leg_noise_hf.Va, leg_noise_hf.Vs, win, [], [], 1/Ts);
#+end_src
Let's now compare the IFF plants whether the encoders are fixed to the APA or not (Figure [[fig:strut_1_frf_iff_comp_enc]]).
#+begin_src matlab :exports none #+begin_src matlab :exports none
figure; figure;
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None'); tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
ax1 = nexttile; ax1 = nexttile([2,1]);
hold on; hold on;
plot(f(f> 350), abs(iff_enc_noise_hf(f> 350)), 'color', colors(1, :), ... plot(f(f> 350), abs(iff_enc_noise_hf(f> 350)), 'color', colors(1, :), ...
'DisplayName', 'Encoder'); 'DisplayName', 'Encoder');
plot(f(f<=350), abs(iff_enc_sweep( f<=350)), 'color', colors(1, :), ... plot(f(f<=350), abs(iff_enc_sweep( f<=350)), 'color', colors(1, :), ...
'HandleVisibility', 'off'); 'HandleVisibility', 'off');
plot(f(f> 350), abs(iff_noise_hf(f> 350)), 'color', colors(2, :), ... plot(f(f> 350), abs(iff_noise_hf(f> 350)), 'color', colors(2, :), ...
'DisplayName', 'Withotu Encoder'); 'DisplayName', 'Without Encoder');
plot(f(f<=350), abs(iff_sweep( f<=350)), 'color', colors(2, :), ... plot(f(f<=350), abs(iff_sweep( f<=350)), 'color', colors(2, :), ...
'HandleVisibility', 'off'); 'HandleVisibility', 'off');
hold off; hold off;
@ -2730,12 +2722,21 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]'); xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off; hold off;
yticks(-360:90:360); yticks(-360:90:360); ylim([-180, 180]);
linkaxes([ax1,ax2],'x'); linkaxes([ax1,ax2],'x');
xlim([10, 2e3]); xlim([10, 2e3]);
#+end_src #+end_src
#+begin_src matlab :tangle no :exports results :results file replace
exportFig('figs/strut_1_frf_iff_effect_enc.pdf', 'width', 'wide', 'height', 'tall');
#+end_src
#+name: fig:strut_1_frf_iff_comp_enc
#+caption: Effect of the encoder on the IFF plant
#+RESULTS:
[[file:figs/strut_1_frf_iff_effect_enc.png]]
#+begin_important #+begin_important
We can see that the IFF does not change whether of not the encoder are fixed to the struts. We can see that the IFF does not change whether of not the encoder are fixed to the struts.
#+end_important #+end_important