Analyze results of strut 1 measurements
BIN
figs/apa_frf_dvf_plant_coh.pdf
Normal file
BIN
figs/apa_frf_dvf_plant_coh.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
figs/apa_frf_dvf_plant_tf.pdf
Normal file
BIN
figs/apa_frf_dvf_plant_tf.png
Normal file
After Width: | Height: | Size: 142 KiB |
BIN
figs/apa_frf_dvf_zoom_res_plant_tf.pdf
Normal file
BIN
figs/apa_frf_dvf_zoom_res_plant_tf.png
Normal file
After Width: | Height: | Size: 152 KiB |
BIN
figs/apa_frf_iff_plant_coh.pdf
Normal file
BIN
figs/apa_frf_iff_plant_coh.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
figs/apa_frf_iff_plant_tf.pdf
Normal file
BIN
figs/apa_frf_iff_plant_tf.png
Normal file
After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 67 KiB |
BIN
figs/frf_strut_dvf_comp_effect_enc.pdf
Normal file
BIN
figs/frf_strut_dvf_comp_effect_enc.png
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
figs/strut_1_comp_enc_int.pdf
Normal file
BIN
figs/strut_1_comp_enc_int.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
figs/strut_1_enc_frf_dvf_plant_coh.pdf
Normal file
BIN
figs/strut_1_enc_frf_dvf_plant_coh.png
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
figs/strut_1_enc_frf_dvf_plant_tf.pdf
Normal file
BIN
figs/strut_1_enc_frf_dvf_plant_tf.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
figs/strut_1_enc_frf_iff_plant_tf.pdf
Normal file
BIN
figs/strut_1_enc_frf_iff_plant_tf.png
Normal file
After Width: | Height: | Size: 93 KiB |
BIN
figs/strut_1_frf_dvf_plant_coh.pdf
Normal file
BIN
figs/strut_1_frf_dvf_plant_coh.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
figs/strut_1_frf_dvf_plant_tf.pdf
Normal file
BIN
figs/strut_1_frf_dvf_plant_tf.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
figs/strut_1_frf_iff_effect_enc.pdf
Normal file
BIN
figs/strut_1_frf_iff_effect_enc.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
figs/strut_1_frf_iff_plant_coh.pdf
Normal file
BIN
figs/strut_1_frf_iff_plant_coh.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
figs/strut_1_frf_iff_plant_tf.pdf
Normal file
BIN
figs/strut_1_frf_iff_plant_tf.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
figs/strut_1_spurious_resonances.pdf
Normal file
BIN
figs/strut_1_spurious_resonances.png
Normal file
After Width: | Height: | Size: 86 KiB |
@ -1881,7 +1881,7 @@ for i = 1:length(apa_nums)
|
||||
end
|
||||
#+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.
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
@ -1905,13 +1905,13 @@ legend('location', 'southeast');
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+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$
|
||||
#+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:
|
||||
@ -1930,7 +1930,7 @@ for i = 1:length(apa_nums)
|
||||
end
|
||||
#+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.
|
||||
|
||||
#+begin_question
|
||||
@ -1978,15 +1978,15 @@ xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+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$)
|
||||
#+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 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
|
||||
|
||||
#+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
|
||||
|
||||
#+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
|
||||
#+RESULTS:
|
||||
[[file:figs/frf_dvf_zoom_res_plant_tf.png]]
|
||||
[[file:figs/apa_frf_dvf_zoom_res_plant_tf.png]]
|
||||
|
||||
*** FRF Identification - IFF
|
||||
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.
|
||||
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
|
||||
|
||||
#+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
|
||||
|
||||
#+name: fig:frf_iff_plant_coh
|
||||
#+name: fig:apa_frf_iff_plant_coh
|
||||
#+caption: Obtained coherence for the IFF plant
|
||||
#+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
|
||||
%% FRF estimation of the transfer function from Va to Vs
|
||||
iff_sweep = zeros(length(f), length(apa_nums));
|
||||
@ -2140,42 +2140,42 @@ xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+name: fig:frf_iff_plant_tf
|
||||
#+name: fig:apa_frf_iff_plant_tf
|
||||
#+caption:Identified IFF Plant
|
||||
#+RESULTS:
|
||||
[[file:figs/frf_iff_plant_tf.png]]
|
||||
[[file:figs/apa_frf_iff_plant_tf.png]]
|
||||
|
||||
* Dynamical measurements - Struts
|
||||
<<sec:dynamical_meas_struts>>
|
||||
** 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
|
||||
#+caption: Test Bench with Strut - Overview
|
||||
#+attr_latex: :width 0.5\linewidth
|
||||
[[file:figs/test_bench_leg_overview.png]]
|
||||
|
||||
#+name: fig:test_bench_leg_front
|
||||
#+caption: Test Bench with Strut - Zoom on the strut
|
||||
#+attr_latex: :width 0.5\linewidth
|
||||
[[file:figs/test_bench_leg_front.png]]
|
||||
|
||||
#+name: fig:test_bench_leg_overview
|
||||
#+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]]
|
||||
|
||||
|
||||
| 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
|
||||
<<sec:meas_strut_1>>
|
||||
*** Introduction :ignore:
|
||||
Measurements are first performed on the strut number 1 with:
|
||||
Measurements are first performed on the strut 1 that contains:
|
||||
- APA 1
|
||||
- flex 1 and flex 2
|
||||
|
||||
@ -2204,6 +2204,7 @@ addpath('./src/');
|
||||
#+end_src
|
||||
|
||||
*** Without Encoder
|
||||
<<sec:meas_strut_1_no_encoder>>
|
||||
**** FRF Identification - Setup
|
||||
The identification is performed in three steps:
|
||||
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);
|
||||
#+end_src
|
||||
|
||||
**** TODO FRF Identification - DVF
|
||||
In this section, the dynamics from $V_a$ to $d_e$ is identified.
|
||||
**** FRF Identification - Displacement
|
||||
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:
|
||||
#+begin_src matlab
|
||||
@ -2253,57 +2254,40 @@ We compute the coherence for 2nd and 3rd identification:
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
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');
|
||||
plot(f, coh_sweep(:, 1), 'color', [colors(2, :), 0.5], ...
|
||||
plot(f, coh_sweep(:, 1), 'color', colors(2, :), ...
|
||||
'DisplayName', 'Sweep');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Coherence [-]');
|
||||
% xlim([5, 5e3]); ylim([0, 1]);
|
||||
xlim([5, 5e3]); ylim([0, 1]);
|
||||
legend('location', 'southeast');
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+name: fig:frf_dvf_plant_coh
|
||||
#+caption: Obtained coherence for the plant from $V_a$ to $d_e$
|
||||
#+name: fig:strut_1_frf_dvf_plant_coh
|
||||
#+caption: Obtained coherence for the plant from $V_a$ to $d_a$
|
||||
#+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
|
||||
[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);
|
||||
#+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
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f(f> 350), abs(dvf_noise_hf(f> 350)), 'color', colors(1, :));
|
||||
plot(f(f<=350), abs(dvf_sweep( 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)), 'k-');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/V_a$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
@ -2312,31 +2296,31 @@ ylim([1e-9, 1e-3]);
|
||||
|
||||
ax2 = nexttile;
|
||||
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_sweep( 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)), 'k-');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+name: fig:frf_dvf_plant_tf
|
||||
#+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the encoder $d_e$)
|
||||
#+name: fig:strut_1_frf_dvf_plant_tf
|
||||
#+caption: Estimated FRF for the DVF plant (transfer function from $V_a$ to the interferometer $d_a$)
|
||||
#+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.
|
||||
|
||||
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.
|
||||
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
|
||||
|
||||
#+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
|
||||
|
||||
#+name: fig:frf_iff_plant_coh
|
||||
#+name: fig:strut_1_frf_iff_plant_coh
|
||||
#+caption: Obtained coherence for the IFF plant
|
||||
#+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
|
||||
[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);
|
||||
@ -2376,60 +2360,50 @@ Then the FRF are estimated and shown in Figure [[fig:frf_iff_plant_tf]]
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f(f> 350), abs(iff_noise_hf(f> 350)), 'color', colors(1, :));
|
||||
plot(f(f<=350), abs(iff_sweep( 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)), 'k-');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $V_s/V_a$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-2, 1e2]);
|
||||
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
|
||||
ax2 = nexttile;
|
||||
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_sweep( 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)), 'k-');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+name: fig:frf_iff_plant_tf
|
||||
#+caption:Identified IFF Plant
|
||||
#+name: fig:strut_1_frf_iff_plant_tf
|
||||
#+caption:Identified IFF Plant for the Strut 1
|
||||
#+RESULTS:
|
||||
[[file:figs/frf_iff_plant_tf.png]]
|
||||
[[file:figs/strut_1_frf_iff_plant_tf.png]]
|
||||
|
||||
*** With Encoder
|
||||
**** FRF Identification - Setup
|
||||
The identification is performed in three steps:
|
||||
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.
|
||||
|
||||
<<sec:meas_strut_1_encoder>>
|
||||
**** Measurement Data
|
||||
#+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_noise_hf = load(sprintf('frf_data_leg_coder_badly_align_%i_noise_hf.mat', 1), 't', 'Va', 'Vs', 'de', 'da');
|
||||
#+end_src
|
||||
|
||||
**** TODO FRF Identification - DVF
|
||||
**** FRF Identification - DVF
|
||||
In this section, the dynamics from $V_a$ to $d_e$ is identified.
|
||||
|
||||
We compute the coherence for 2nd and 3rd identification:
|
||||
@ -2443,9 +2417,9 @@ colors = get(gca,'colororder');
|
||||
|
||||
figure;
|
||||
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');
|
||||
plot(f, coh_enc_sweep(:, 1), 'color', [colors(2, :), 0.5], ...
|
||||
plot(f, coh_enc_sweep(:, 1), 'color', colors(2, :), ...
|
||||
'DisplayName', 'Sweep');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
@ -2455,21 +2429,25 @@ legend('location', 'southeast');
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+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$
|
||||
#+RESULTS:
|
||||
[[file:figs/frf_dvf_plant_coh.png]]
|
||||
|
||||
[[file:figs/strut_1_enc_frf_dvf_plant_coh.png]]
|
||||
|
||||
#+begin_src matlab
|
||||
[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);
|
||||
#+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.
|
||||
|
||||
@ -2488,53 +2466,51 @@ Why is there a double resonance at around 94Hz?
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f(f> 350), abs(dvf_enc_noise_hf(f> 350)), 'color', colors(1, :));
|
||||
plot(f(f<=350), abs(dvf_enc_sweep( 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)), 'k-');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $d_e/V_a$ [m/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-9, 1e-3]);
|
||||
ylim([1e-7, 1e-3]);
|
||||
|
||||
ax2 = nexttile;
|
||||
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_sweep( 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)), 'k-');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+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$)
|
||||
#+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
|
||||
[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 dynamics from $V_a$ to $d_e$ and from $V_a$ to $d_a$ are compared in Figure [[fig:strut_1_comp_enc_int]].
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f(f> 350), abs(dvf_enc_noise_hf(f> 350)), 'color', colors(1, :), ...
|
||||
'DisplayName', 'Encoder');
|
||||
@ -2546,10 +2522,10 @@ plot(f(f<=350), abs(dvf_int_sweep( f<=350)), 'color', colors(2, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
hold off;
|
||||
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;
|
||||
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
ylim([1e-9, 1e-3]);
|
||||
ylim([1e-8, 1e-3]);
|
||||
|
||||
ax2 = nexttile;
|
||||
hold on;
|
||||
@ -2561,19 +2537,27 @@ hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+begin_important
|
||||
Clearly using the encoder like this will not be useful.
|
||||
#+begin_src matlab :tangle no :exports results :results file replace
|
||||
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
|
||||
|
||||
**** 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
|
||||
figure;
|
||||
@ -2592,19 +2576,33 @@ hold off;
|
||||
ylim([1e-7, 1e-3]); xlim([10, 2e3]);
|
||||
#+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)
|
||||
#+attr_latex: :width 0.9\linewidth
|
||||
[[file:figs/mode_bending_x.gif]]
|
||||
|
||||
#+name: fig:mode_bending_y
|
||||
#+name: fig:mode_bending_y_bis
|
||||
#+caption: Y-bending mode (285Hz)
|
||||
#+attr_latex: :width 0.9\linewidth
|
||||
[[file:figs/mode_bending_y.gif]]
|
||||
|
||||
#+name: fig:mode_torsion_z
|
||||
#+name: fig:mode_torsion_z_bis
|
||||
#+caption: Z-torsion mode (400Hz)
|
||||
#+attr_latex: :width 0.9\linewidth
|
||||
[[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.
|
||||
#+end_important
|
||||
|
||||
**** TODO Estimated Flexible Joint axial stiffness
|
||||
**** FRF Identification - IFF
|
||||
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.
|
||||
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;
|
||||
hold on;
|
||||
plot(f, coh_enc_noise_hf, 'color', [colors(1, :), 0.5], 'DisplayName', 'HF Noise');
|
||||
plot(f, coh_enc_sweep, 'color', [colors(2, :), 0.5], 'DisplayName', 'Sweep');
|
||||
plot(f, coh_enc_noise_hf, 'color', colors(1, :), 'DisplayName', 'HF Noise');
|
||||
plot(f, coh_enc_sweep, 'color', colors(2, :), 'DisplayName', 'Sweep');
|
||||
hold off;
|
||||
xlabel('Frequency [Hz]'); ylabel('Coherence [-]');
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
@ -2640,15 +2639,15 @@ legend('location', 'southeast');
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+name: fig:frf_iff_plant_coh
|
||||
#+name: fig:strut_1_frf_iff_plant_coh
|
||||
#+caption: Obtained coherence for the IFF plant
|
||||
#+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
|
||||
[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);
|
||||
@ -2656,61 +2655,54 @@ Then the FRF are estimated and shown in Figure [[fig:frf_iff_plant_tf]]
|
||||
|
||||
#+begin_src matlab :exports none
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f(f> 350), abs(iff_enc_noise_hf(f> 350)), 'color', colors(1, :));
|
||||
plot(f(f<=350), abs(iff_enc_sweep( 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)), 'k-');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
ylabel('Amplitude $V_s/V_a$ [V/V]'); set(gca, 'XTickLabel',[]);
|
||||
hold off;
|
||||
ylim([1e-2, 1e2]);
|
||||
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 2);
|
||||
|
||||
ax2 = nexttile;
|
||||
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_sweep( 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)), 'k');
|
||||
hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+end_src
|
||||
|
||||
#+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
|
||||
|
||||
#+name: fig:frf_iff_plant_tf
|
||||
#+name: fig:strut_1_enc_frf_iff_plant_tf
|
||||
#+caption:Identified IFF Plant
|
||||
#+RESULTS:
|
||||
[[file:figs/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
|
||||
[[file:figs/strut_1_enc_frf_iff_plant_tf.png]]
|
||||
|
||||
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
|
||||
figure;
|
||||
tiledlayout(2, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
tiledlayout(3, 1, 'TileSpacing', 'None', 'Padding', 'None');
|
||||
|
||||
ax1 = nexttile;
|
||||
ax1 = nexttile([2,1]);
|
||||
hold on;
|
||||
plot(f(f> 350), abs(iff_enc_noise_hf(f> 350)), 'color', colors(1, :), ...
|
||||
'DisplayName', 'Encoder');
|
||||
plot(f(f<=350), abs(iff_enc_sweep( f<=350)), 'color', colors(1, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
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, :), ...
|
||||
'HandleVisibility', 'off');
|
||||
hold off;
|
||||
@ -2730,12 +2722,21 @@ hold off;
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
hold off;
|
||||
yticks(-360:90:360);
|
||||
yticks(-360:90:360); ylim([-180, 180]);
|
||||
|
||||
linkaxes([ax1,ax2],'x');
|
||||
xlim([10, 2e3]);
|
||||
#+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
|
||||
We can see that the IFF does not change whether of not the encoder are fixed to the struts.
|
||||
#+end_important
|
||||
|