Update Noise measurement analysis
This includes normalization with transfer function of the geophone
BIN
2018-10-15 - Marc/figs/L4C_bode_plot.png
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
2018-10-15 - Marc/figs/coherence_vertical_tilt_sensors.png
Normal file
After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
BIN
2018-10-15 - Marc/figs/tf_vertical_tilt_sensors.png
Normal file
After Width: | Height: | Size: 106 KiB |
@ -23,25 +23,22 @@
|
||||
|
||||
[[../index.org][Back to main page]].
|
||||
|
||||
* Measurement Description
|
||||
#+begin_src matlab :exports none :results silent
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
* Measurement Description
|
||||
#+name: fig:setup_picture
|
||||
#+caption: Picture of the setup for the measurement
|
||||
#+attr_latex: :scale 1
|
||||
[[file:./figs/setup_picture.png]]
|
||||
|
||||
Sensors:
|
||||
- 3 L-4C ([[file:../actuators-sensors/index.org::*L-4C][Documentation]]) [[file:~/MEGA/These/Measurements/actuators-sensors/index.org::tab:L4C][table]]
|
||||
The sensor used are 3 L-4C geophones ([[file:../actuators-sensors/index.org::*L-4C][Documentation]]).
|
||||
|
||||
Each motor are turn off and then on.
|
||||
|
||||
The goal is to see what noise is injected in the system due to the regulation loop of each stage.
|
||||
|
||||
* Importation of the data
|
||||
#+begin_src matlab :exports none :results silent
|
||||
<<matlab-init>>
|
||||
#+end_src
|
||||
|
||||
First, load all the measurement files:
|
||||
#+begin_src matlab :exports code :results silent
|
||||
meas = {};
|
||||
@ -94,10 +91,97 @@ For the measurement 5, the channels are shown table [[tab:meas_5]].
|
||||
|---------+------------------+-------------------+------------------+-------------------|
|
||||
| Meas. 5 | Input 1: Floor Z | Input 2: Marble Z | Input 3: Floor Y | Input 4: Marble Y |
|
||||
|
||||
* Variables for analysis
|
||||
We define the sampling frequency and the time vectors for the plots.
|
||||
|
||||
#+begin_src matlab :exports code :results silent
|
||||
Fs = 256; % [Hz]
|
||||
dt = 1/(Fs);
|
||||
t1 = dt*[0:length(meas{1}.Track1)-1];
|
||||
t2 = dt*[0:length(meas{2}.Track1)-1];
|
||||
t3 = dt*[0:length(meas{3}.Track1)-1];
|
||||
t4 = dt*[0:length(meas{4}.Track1)-1];
|
||||
t5 = dt*[0:length(meas{5}.Track1)-1];
|
||||
#+end_src
|
||||
|
||||
For the frequency analysis, we define the frequency limits for the plot.
|
||||
#+begin_src matlab :exports code :results silent
|
||||
fmin = 1; % [Hz]
|
||||
fmax = 100; % [Hz]
|
||||
#+end_src
|
||||
|
||||
Then we define the windows that will be used to average the results.
|
||||
#+begin_src matlab :exports code :results silent
|
||||
psd_window = hanning(2*fmin/dt);
|
||||
#+end_src
|
||||
|
||||
* Coherence between the two vertical geophones on the Tilt Stage
|
||||
We first compute the coherence between the two geophones located on the tilt stage. The result is shown on figure [[fig:coherence_vertical_tilt_sensors]].
|
||||
#+begin_src matlab :results none
|
||||
[coh, f] = mscohere(meas{1}.Track1(:), meas{1}.Track2(:), psd_window, [], [], Fs);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results none :exports none
|
||||
figure;
|
||||
plot(f, coh);
|
||||
set(gca, 'xscale', 'log');
|
||||
ylim([0, 1]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Coherence');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coherence_vertical_tilt_sensors
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="figs/coherence_vertical_tilt_sensors.pdf" :var figsize="normal-normal" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:coherence_vertical_tilt_sensors
|
||||
#+CAPTION: Coherence between the two vertical sensors positionned on the Tilt Stage
|
||||
#+RESULTS: fig:coherence_vertical_tilt_sensors
|
||||
[[file:figs/coherence_vertical_tilt_sensors.png]]
|
||||
|
||||
We then compute the transfer function from one sensor to the other (figure [[fig:tf_vertical_tilt_sensors]]).
|
||||
#+begin_src matlab :results none
|
||||
[tf23, f] = tfestimate(meas{1}.Track1(:), meas{1}.Track2(:), psd_window, [], [], Fs);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :results none :exports none
|
||||
figure;
|
||||
ax1 = subaxis(2,1,1);
|
||||
plot(f, abs(tf23));
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
set(gca, 'XTickLabel',[]);
|
||||
ylabel('Magnitude [V/(m/s)]');
|
||||
|
||||
ax2 = subaxis(2,1,2);
|
||||
plot(f, 180/pi*angle(tf23));
|
||||
set(gca,'xscale','log');
|
||||
yticks(-180:90:180);
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:tf_vertical_tilt_sensors
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="figs/tf_vertical_tilt_sensors.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:tf_vertical_tilt_sensors
|
||||
#+CAPTION: Transfer function from one vertical geophone on the tilt stage to the other vertical geophone on the tilt stage
|
||||
#+RESULTS: fig:tf_vertical_tilt_sensors
|
||||
[[file:figs/tf_vertical_tilt_sensors.png]]
|
||||
|
||||
Even though the coherence is not very good, we observe no resonance between the two sensors.
|
||||
|
||||
* Data Post Processing
|
||||
When using two geophone sensors on the same tilt stage (measurements 1 and 2), we post-process the data to obtain the z displacement and the rotation of the tilt stage:
|
||||
|
||||
#+begin_src matlab :results silent
|
||||
meas1_z = (meas{1}.Track1+meas{1}.Track2)/2;
|
||||
meas1_tilt = (meas{1}.Track1-meas{1}.Track2)/2;
|
||||
|
||||
meas{1}.Track1 = meas1_z;
|
||||
meas{1}.Track1_Y_Magnitude = 'Meter / second';
|
||||
meas{1}.Track1_Name = 'Ry Z';
|
||||
@ -115,39 +199,63 @@ When using two geophone sensors on the same tilt stage (measurements 1 and 2), w
|
||||
meas{2}.Track2_Name = 'Ry Tilt';
|
||||
#+end_src
|
||||
|
||||
* Variables for analysis
|
||||
We define the sampling frequency and the time vectors for the plots.
|
||||
* Normalization
|
||||
Parameters of the geophone are defined below.
|
||||
The transfer function from geophone velocity to measured voltage is shown on figure [[fig:L4C_bode_plot]].
|
||||
|
||||
#+begin_src matlab :exports code :results silent
|
||||
Fs = 256; % [Hz]
|
||||
dt = 1/(Fs);
|
||||
t1 = dt*[1:length(meas{1}.Track1)];
|
||||
t2 = dt*[1:length(meas{2}.Track1)];
|
||||
t3 = dt*[1:length(meas{3}.Track1)];
|
||||
t4 = dt*[1:length(meas{4}.Track1)];
|
||||
t5 = dt*[1:length(meas{5}.Track1)];
|
||||
Measurements will be normalized by the inverse of this transfer function in order to go from voltage measurement to velocity measurement.
|
||||
|
||||
#+begin_src matlab :results none
|
||||
L4C_w0 = 2*pi; % [rad/s]
|
||||
L4C_ksi = 0.28;
|
||||
L4C_G0 = 276.8; % [V/(m/s)]
|
||||
L4C_G = L4C_G0*(s/L4C_w0)^2/((s/L4C_w0)^2 + 2*L4C_ksi*(s/L4C_w0) + 1);
|
||||
#+end_src
|
||||
|
||||
For the frequency analysis, we define the frequency limits for the plot.
|
||||
#+begin_src matlab :exports code :results silent
|
||||
fmin = 1; % [Hz]
|
||||
fmax = 100; % [Hz]
|
||||
#+begin_src matlab :results none :exports none
|
||||
freqs = logspace(-2, 2, 1000);
|
||||
|
||||
figure;
|
||||
ax1 = subaxis(2,1,1);
|
||||
plot(freqs, abs(squeeze(freqresp(L4C_G, freqs, 'Hz'))));
|
||||
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
||||
set(gca, 'XTickLabel',[]);
|
||||
ylabel('Magnitude [V/(m/s)]');
|
||||
|
||||
ax2 = subaxis(2,1,2);
|
||||
plot(freqs, 180/pi*angle(squeeze(freqresp(L4C_G, freqs, 'Hz'))));
|
||||
set(gca,'xscale','log');
|
||||
yticks(-180:90:180);
|
||||
ylim([-180 180]);
|
||||
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
|
||||
linkaxes([ax1,ax2],'x');
|
||||
#+end_src
|
||||
|
||||
Then we define the windows that will be used to average the results.
|
||||
#+begin_src matlab :exports code :results silent
|
||||
psd_window = hanning(2*fmin/dt);
|
||||
#+NAME: fig:L4C_bode_plot
|
||||
#+HEADER: :tangle no :exports results :results raw :noweb yes
|
||||
#+begin_src matlab :var filepath="figs/L4C_bode_plot.pdf" :var figsize="wide-tall" :post pdf2svg(file=*this*, ext="png")
|
||||
<<plt-matlab>>
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:L4C_bode_plot
|
||||
#+CAPTION: Bode plot of the L4C Geophone
|
||||
#+RESULTS: fig:L4C_bode_plot
|
||||
[[file:figs/L4C_bode_plot.png]]
|
||||
|
||||
Time domain data are just normalized using the sensibility of the sensor ($276.8 V/m/s$).
|
||||
|
||||
* Measurement 1 - Effect of Ty stage
|
||||
|
||||
The configuration for this measurement is shown table [[tab:conf_meas1]].
|
||||
|
||||
#+CAPTION: Stages configuration - Measurement 1
|
||||
#+NAME: tab:conf_meas1
|
||||
| Time | 0-309 | 309-end |
|
||||
|------+-------+---------|
|
||||
| Ty | OFF | ON |
|
||||
|----------+-------+---------|
|
||||
| Ty | OFF | *ON* |
|
||||
| Ry | OFF | OFF |
|
||||
| SlipRing | OFF | OFF |
|
||||
| Spindle | OFF | OFF |
|
||||
| Hexa | OFF | OFF |
|
||||
|
||||
We then plot the measurements in time domain (figure [[fig:meas1]]).
|
||||
|
||||
@ -159,9 +267,9 @@ We then plot the measurements in time domain (figure [[fig:meas1]]).
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(t1(ceil(300/dt):ceil(340/dt)), meas{1}.Track1(ceil(300/dt):ceil(340/dt)));
|
||||
plot(t1(ceil(300/dt):ceil(340/dt)), meas{1}.Track2(ceil(300/dt):ceil(340/dt)));
|
||||
plot(t1(ceil(300/dt):ceil(340/dt)), meas{1}.Track3(ceil(300/dt):ceil(340/dt)));
|
||||
plot(t1(ceil(300/dt):ceil(340/dt)), (1/276.8).*meas{1}.Track1(ceil(300/dt):ceil(340/dt)));
|
||||
plot(t1(ceil(300/dt):ceil(340/dt)), (1/276.8).*meas{1}.Track2(ceil(300/dt):ceil(340/dt)));
|
||||
plot(t1(ceil(300/dt):ceil(340/dt)), (1/276.8).*meas{1}.Track3(ceil(300/dt):ceil(340/dt)));
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
||||
legend({meas{1}.Track1_Name, meas{1}.Track2_Name, meas{1}.Track3_Name}, 'Location', 'northeast')
|
||||
@ -181,7 +289,7 @@ We then plot the measurements in time domain (figure [[fig:meas1]]).
|
||||
To understand what is going on, instead of looking at the velocity, we can look at the displacement by integrating the data. The displacement is computed by integrating the velocity using =cumtrapz= function.
|
||||
#+begin_src matlab :exports code :results silent
|
||||
tdisp = t1(ceil(300/dt):ceil(340/dt));
|
||||
xdisp = cumtrapz(tdisp, meas{1}.Track3(ceil(300/dt):ceil(340/dt)));
|
||||
xdisp = cumtrapz(tdisp, (1/276.8).*meas{1}.Track3(ceil(300/dt):ceil(340/dt)));
|
||||
#+end_src
|
||||
|
||||
Then we plot the position with respect to time (figure [[fig:meas1_disp]]).
|
||||
@ -206,14 +314,14 @@ Then we plot the position with respect to time (figure [[fig:meas1_disp]]).
|
||||
|
||||
We when compute the power spectral density of each measurement before and after turning on the stage.
|
||||
#+begin_src matlab :exports code :results silent
|
||||
[pxx111, f111] = pwelch(meas{1}.Track1(1:ceil(300/dt)), psd_window, [], [], Fs);
|
||||
[pxx112, f112] = pwelch(meas{1}.Track1(ceil(350/dt):end), psd_window, [], [], Fs);
|
||||
[pxx111, f11] = pwelch(meas{1}.Track1(1:ceil(300/dt)), psd_window, [], [], Fs);
|
||||
[pxx112, f12] = pwelch(meas{1}.Track1(ceil(350/dt):end), psd_window, [], [], Fs);
|
||||
|
||||
[pxx121, f121] = pwelch(meas{1}.Track2(1:ceil(300/dt)), psd_window, [], [], Fs);
|
||||
[pxx122, f122] = pwelch(meas{1}.Track2(ceil(350/dt):end), psd_window, [], [], Fs);
|
||||
[pxx121, ~] = pwelch(meas{1}.Track2(1:ceil(300/dt)), psd_window, [], [], Fs);
|
||||
[pxx122, ~] = pwelch(meas{1}.Track2(ceil(350/dt):end), psd_window, [], [], Fs);
|
||||
|
||||
[pxx131, f131] = pwelch(meas{1}.Track3(1:ceil(300/dt)), psd_window, [], [], Fs);
|
||||
[pxx132, f132] = pwelch(meas{1}.Track3(ceil(350/dt):end), psd_window, [], [], Fs);
|
||||
[pxx131, ~] = pwelch(meas{1}.Track3(1:ceil(300/dt)), psd_window, [], [], Fs);
|
||||
[pxx132, ~] = pwelch(meas{1}.Track3(ceil(350/dt):end), psd_window, [], [], Fs);
|
||||
#+end_src
|
||||
|
||||
We finally plot the power spectral density of each track (figures [[fig:meas1_ry_z_psd]], [[fig:meas1_ry_tilt_psd]], [[fig:meas1_ty_y_psd]]).
|
||||
@ -221,8 +329,8 @@ We finally plot the power spectral density of each track (figures [[fig:meas1_ry
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f111, sqrt(pxx111));
|
||||
plot(f112, sqrt(pxx112));
|
||||
plot(f11, sqrt(pxx111)./abs(squeeze(freqresp(L4C_G, f11, 'Hz'))));
|
||||
plot(f12, sqrt(pxx112)./abs(squeeze(freqresp(L4C_G, f12, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -246,8 +354,8 @@ We finally plot the power spectral density of each track (figures [[fig:meas1_ry
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f121, sqrt(pxx121));
|
||||
plot(f122, sqrt(pxx122));
|
||||
plot(f11, sqrt(pxx121)./abs(squeeze(freqresp(L4C_G, f11, 'Hz'))));
|
||||
plot(f12, sqrt(pxx122)./abs(squeeze(freqresp(L4C_G, f12, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -271,8 +379,8 @@ We finally plot the power spectral density of each track (figures [[fig:meas1_ry
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f131, sqrt(pxx131));
|
||||
plot(f132, sqrt(pxx132));
|
||||
plot(f11, sqrt(pxx131)./abs(squeeze(freqresp(L4C_G, f11, 'Hz'))));
|
||||
plot(f12, sqrt(pxx132)./abs(squeeze(freqresp(L4C_G, f12, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -303,26 +411,30 @@ It does not seems to have any effect on the Z motion of the tilt stage.
|
||||
#+end_important
|
||||
|
||||
* Measurement 2 - Effect of Ry stage
|
||||
|
||||
The tilt stage is turned ON at around 326 seconds (table [[tab:conf_meas2]]).
|
||||
|
||||
#+CAPTION: Stages configuration - Measurement 2
|
||||
#+NAME: tab:conf_meas2
|
||||
| Time | 0-326 | 326-end |
|
||||
|------+-------+---------|
|
||||
| Tilt | OFF | ON |
|
||||
|----------+-------+---------|
|
||||
| Ty | OFF | OFF |
|
||||
| Ry | OFF | *ON* |
|
||||
| SlipRing | OFF | OFF |
|
||||
| Spindle | OFF | OFF |
|
||||
| Hexa | OFF | OFF |
|
||||
|
||||
We plot the time domain (figure [[fig:meas2]]) and we don't observe anything special in the time domain.
|
||||
|
||||
#+begin_src matlab :exports results :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(t2(ceil(300/dt):ceil(350/dt)), meas{2}.Track1(ceil(300/dt):ceil(350/dt)));
|
||||
plot(t2(ceil(300/dt):ceil(350/dt)), meas{2}.Track3(ceil(300/dt):ceil(350/dt)));
|
||||
plot(t2(ceil(300/dt):ceil(350/dt)), meas{2}.Track2(ceil(300/dt):ceil(350/dt)));
|
||||
plot(t2(ceil(300/dt):ceil(350/dt)), (1/276.8).*meas{2}.Track1(ceil(300/dt):ceil(350/dt)));
|
||||
plot(t2(ceil(300/dt):ceil(350/dt)), (1/276.8).*meas{2}.Track3(ceil(300/dt):ceil(350/dt)));
|
||||
plot(t2(ceil(300/dt):ceil(350/dt)), (1/276.8).*meas{2}.Track2(ceil(300/dt):ceil(350/dt)));
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
||||
legend({meas{2}.Track1_Name, meas{2}.Track2_Name, meas{2}.Track3_Name}, 'Location', 'northeast')
|
||||
xlim([300, 350]);
|
||||
#+end_src
|
||||
|
||||
#+NAME: fig:meas2
|
||||
@ -338,21 +450,21 @@ We plot the time domain (figure [[fig:meas2]]) and we don't observe anything spe
|
||||
|
||||
We compute the PSD of each track and we plot them (figures [[fig:meas2_ry_z_psd]], [[fig:meas2_ry_tilt_psd]] and [[fig:meas2_ty_y_psd]] ).
|
||||
#+begin_src matlab :exports code :results silent
|
||||
[pxx211, f211] = pwelch(meas{2}.Track1(1:ceil(326/dt)), psd_window, [], [], Fs);
|
||||
[pxx212, f212] = pwelch(meas{2}.Track1(ceil(326/dt):end), psd_window, [], [], Fs);
|
||||
[pxx211, f21] = pwelch(meas{2}.Track1(1:ceil(326/dt)), psd_window, [], [], Fs);
|
||||
[pxx212, f22] = pwelch(meas{2}.Track1(ceil(326/dt):end), psd_window, [], [], Fs);
|
||||
|
||||
[pxx221, f221] = pwelch(meas{2}.Track2(1:ceil(326/dt)), psd_window, [], [], Fs);
|
||||
[pxx222, f222] = pwelch(meas{2}.Track2(ceil(326/dt):end), psd_window, [], [], Fs);
|
||||
[pxx221, ~] = pwelch(meas{2}.Track2(1:ceil(326/dt)), psd_window, [], [], Fs);
|
||||
[pxx222, ~] = pwelch(meas{2}.Track2(ceil(326/dt):end), psd_window, [], [], Fs);
|
||||
|
||||
[pxx231, f231] = pwelch(meas{2}.Track3(1:ceil(326/dt)), psd_window, [], [], Fs);
|
||||
[pxx232, f232] = pwelch(meas{2}.Track3(ceil(326/dt):end), psd_window, [], [], Fs);
|
||||
[pxx231, ~] = pwelch(meas{2}.Track3(1:ceil(326/dt)), psd_window, [], [], Fs);
|
||||
[pxx232, ~] = pwelch(meas{2}.Track3(ceil(326/dt):end), psd_window, [], [], Fs);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f211, sqrt(pxx211));
|
||||
plot(f212, sqrt(pxx212));
|
||||
plot(f21, sqrt(pxx211)./abs(squeeze(freqresp(L4C_G, f21, 'Hz'))));
|
||||
plot(f22, sqrt(pxx212)./abs(squeeze(freqresp(L4C_G, f22, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -376,8 +488,8 @@ We compute the PSD of each track and we plot them (figures [[fig:meas2_ry_z_psd]
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f221, sqrt(pxx221));
|
||||
plot(f222, sqrt(pxx222));
|
||||
plot(f21, sqrt(pxx221)./abs(squeeze(freqresp(L4C_G, f21, 'Hz'))));
|
||||
plot(f22, sqrt(pxx222)./abs(squeeze(freqresp(L4C_G, f22, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -401,8 +513,8 @@ We compute the PSD of each track and we plot them (figures [[fig:meas2_ry_z_psd]
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f231, sqrt(pxx231));
|
||||
plot(f232, sqrt(pxx232));
|
||||
plot(f21, sqrt(pxx231)./abs(squeeze(freqresp(L4C_G, f21, 'Hz'))));
|
||||
plot(f22, sqrt(pxx232)./abs(squeeze(freqresp(L4C_G, f22, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -428,24 +540,26 @@ We compute the PSD of each track and we plot them (figures [[fig:meas2_ry_z_psd]
|
||||
#+end_important
|
||||
|
||||
* Measurement 3 - Effect of the Hexapod
|
||||
|
||||
The hexapod is turned off after 406 seconds (table [[tab:conf_meas3]]).
|
||||
|
||||
#+CAPTION: Stages configuration - Measurement 3
|
||||
#+NAME: tab:conf_meas3
|
||||
| Time | 0-406 | 406-end |
|
||||
|------+-------+---------|
|
||||
| Tilt | ON | ON |
|
||||
| Hexa | ON | OFF |
|
||||
|----------+-------+---------|
|
||||
| Ty | OFF | OFF |
|
||||
| Ry | *ON* | *ON* |
|
||||
| SlipRing | OFF | OFF |
|
||||
| Spindle | OFF | OFF |
|
||||
| Hexa | *ON* | OFF |
|
||||
|
||||
The time domain result is shown figure [[fig:meas3]].
|
||||
|
||||
#+begin_src matlab :exports results :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(t3(ceil(380/dt):ceil(420/dt)), meas{3}.Track1(ceil(380/dt):ceil(420/dt)));
|
||||
plot(t3(ceil(380/dt):ceil(420/dt)), meas{3}.Track2(ceil(380/dt):ceil(420/dt)));
|
||||
plot(t3(ceil(380/dt):ceil(420/dt)), meas{3}.Track3(ceil(380/dt):ceil(420/dt)));
|
||||
plot(t3(ceil(380/dt):ceil(420/dt)), (1/276.8).*meas{3}.Track1(ceil(380/dt):ceil(420/dt)));
|
||||
plot(t3(ceil(380/dt):ceil(420/dt)), (1/276.8).*meas{3}.Track2(ceil(380/dt):ceil(420/dt)));
|
||||
plot(t3(ceil(380/dt):ceil(420/dt)), (1/276.8).*meas{3}.Track3(ceil(380/dt):ceil(420/dt)));
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
||||
legend({meas{3}.Track1_Name, meas{3}.Track2_Name, meas{3}.Track3_Name}, 'Location', 'northeast')
|
||||
@ -464,21 +578,21 @@ The time domain result is shown figure [[fig:meas3]].
|
||||
|
||||
We then compute the PSD of each track before and after turning off the hexapod and plot the results in the figures [[fig:meas3_hexa_z_psd]], [[fig:meas3_ry_z_psd]] and [[fig:meas3_ty_y_psd]].
|
||||
#+begin_src matlab :exports code :results silent
|
||||
[pxx311, f311] = pwelch(meas{3}.Track1(1:ceil(400/dt)), psd_window, [], [], Fs);
|
||||
[pxx312, f312] = pwelch(meas{3}.Track1(ceil(420/dt):end), psd_window, [], [], Fs);
|
||||
[pxx311, f31] = pwelch(meas{3}.Track1(1:ceil(400/dt)), psd_window, [], [], Fs);
|
||||
[pxx312, f32] = pwelch(meas{3}.Track1(ceil(420/dt):end), psd_window, [], [], Fs);
|
||||
|
||||
[pxx321, f321] = pwelch(meas{3}.Track2(1:ceil(400/dt)), psd_window, [], [], Fs);
|
||||
[pxx322, f322] = pwelch(meas{3}.Track2(ceil(420/dt):end), psd_window, [], [], Fs);
|
||||
[pxx321, ~] = pwelch(meas{3}.Track2(1:ceil(400/dt)), psd_window, [], [], Fs);
|
||||
[pxx322, ~] = pwelch(meas{3}.Track2(ceil(420/dt):end), psd_window, [], [], Fs);
|
||||
|
||||
[pxx331, f331] = pwelch(meas{3}.Track3(1:ceil(400/dt)), psd_window, [], [], Fs);
|
||||
[pxx332, f332] = pwelch(meas{3}.Track3(ceil(420/dt):end), psd_window, [], [], Fs);
|
||||
[pxx331, ~] = pwelch(meas{3}.Track3(1:ceil(400/dt)), psd_window, [], [], Fs);
|
||||
[pxx332, ~] = pwelch(meas{3}.Track3(ceil(420/dt):end), psd_window, [], [], Fs);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f311, sqrt(pxx311));
|
||||
plot(f312, sqrt(pxx312));
|
||||
plot(f31, sqrt(pxx311)./abs(squeeze(freqresp(L4C_G, f31, 'Hz'))));
|
||||
plot(f32, sqrt(pxx312)./abs(squeeze(freqresp(L4C_G, f32, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -502,8 +616,8 @@ We then compute the PSD of each track before and after turning off the hexapod a
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f321, sqrt(pxx321));
|
||||
plot(f322, sqrt(pxx322));
|
||||
plot(f31, sqrt(pxx321)./abs(squeeze(freqresp(L4C_G, f31, 'Hz'))));
|
||||
plot(f32, sqrt(pxx322)./abs(squeeze(freqresp(L4C_G, f32, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -527,8 +641,8 @@ We then compute the PSD of each track before and after turning off the hexapod a
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f331, sqrt(pxx331));
|
||||
plot(f332, sqrt(pxx332));
|
||||
plot(f31, sqrt(pxx331)./abs(squeeze(freqresp(L4C_G, f31, 'Hz'))));
|
||||
plot(f32, sqrt(pxx332)./abs(squeeze(freqresp(L4C_G, f32, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -556,23 +670,24 @@ Turning ON induces some motion on the hexapod in the z direction (figure [[fig:m
|
||||
#+end_important
|
||||
|
||||
* Measurement 4 - Effect of the Splip-Ring and Spindle
|
||||
|
||||
The slip ring is turned on at 300s, then the spindle is turned on at 620s (table [[tab:conf_meas4]]). The time domain signals are shown figure [[fig:meas4]].
|
||||
|
||||
#+CAPTION: Stages configuration - Measurement 4
|
||||
#+NAME: tab:conf_meas4
|
||||
| Time | 0-300 | 300-620 | 620-end |
|
||||
|----------+-------+---------+---------|
|
||||
| SlipRing | OFF | ON | ON |
|
||||
| Ty | OFF | OFF | OFF |
|
||||
| Ry | OFF | OFF | OFF |
|
||||
| SlipRing | OFF | *ON* | *ON* |
|
||||
| Spindle | OFF | OFF | *ON* |
|
||||
| Hexa | OFF | OFF | OFF |
|
||||
| Spindle | OFF | OFF | ON |
|
||||
|
||||
#+begin_src matlab :exports results :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(t4, meas{4}.Track1);
|
||||
plot(t4, meas{4}.Track2);
|
||||
plot(t4, meas{4}.Track3);
|
||||
plot(t4, (1/276.8).*meas{4}.Track1);
|
||||
plot(t4, (1/276.8).*meas{4}.Track2);
|
||||
plot(t4, (1/276.8).*meas{4}.Track3);
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
||||
legend({meas{4}.Track1_Name, meas{4}.Track2_Name, meas{4}.Track3_Name}, 'Location', 'southwest')
|
||||
@ -591,25 +706,25 @@ The slip ring is turned on at 300s, then the spindle is turned on at 620s (table
|
||||
|
||||
The PSD of each track are computed using the code below.
|
||||
#+begin_src matlab :exports none :results silent
|
||||
[pxx411, f411] = pwelch(meas{4}.Track1(1:ceil(280/dt)), psd_window, [], [], Fs);
|
||||
[pxx412, f412] = pwelch(meas{4}.Track1(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
||||
[pxx413, f413] = pwelch(meas{4}.Track1(ceil(640/dt):end), psd_window, [], [], Fs);
|
||||
[pxx411, f41] = pwelch(meas{4}.Track1(1:ceil(280/dt)), psd_window, [], [], Fs);
|
||||
[pxx412, f42] = pwelch(meas{4}.Track1(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
||||
[pxx413, f43] = pwelch(meas{4}.Track1(ceil(640/dt):end), psd_window, [], [], Fs);
|
||||
|
||||
[pxx421, f421] = pwelch(meas{4}.Track2(1:ceil(280/dt)), psd_window, [], [], Fs);
|
||||
[pxx422, f422] = pwelch(meas{4}.Track2(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
||||
[pxx423, f423] = pwelch(meas{4}.Track2(ceil(640/dt):end), psd_window, [], [], Fs);
|
||||
[pxx421, ~] = pwelch(meas{4}.Track2(1:ceil(280/dt)), psd_window, [], [], Fs);
|
||||
[pxx422, ~] = pwelch(meas{4}.Track2(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
||||
[pxx423, ~] = pwelch(meas{4}.Track2(ceil(640/dt):end), psd_window, [], [], Fs);
|
||||
|
||||
[pxx431, f431] = pwelch(meas{4}.Track3(1:ceil(280/dt)), psd_window, [], [], Fs);
|
||||
[pxx432, f432] = pwelch(meas{4}.Track3(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
||||
[pxx433, f433] = pwelch(meas{4}.Track3(ceil(640/dt):end), psd_window, [], [], Fs);
|
||||
[pxx431, ~] = pwelch(meas{4}.Track3(1:ceil(280/dt)), psd_window, [], [], Fs);
|
||||
[pxx432, ~] = pwelch(meas{4}.Track3(ceil(280/dt):ceil(600/dt)), psd_window, [], [], Fs);
|
||||
[pxx433, ~] = pwelch(meas{4}.Track3(ceil(640/dt):end), psd_window, [], [], Fs);
|
||||
#+end_src
|
||||
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f411, sqrt(pxx411));
|
||||
plot(f412, sqrt(pxx412));
|
||||
plot(f413, sqrt(pxx413));
|
||||
plot(f41, sqrt(pxx411)./abs(squeeze(freqresp(L4C_G, f41, 'Hz'))));
|
||||
plot(f42, sqrt(pxx412)./abs(squeeze(freqresp(L4C_G, f42, 'Hz'))));
|
||||
plot(f43, sqrt(pxx413)./abs(squeeze(freqresp(L4C_G, f43, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -633,9 +748,9 @@ The PSD of each track are computed using the code below.
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f421, sqrt(pxx421));
|
||||
plot(f422, sqrt(pxx422));
|
||||
plot(f423, sqrt(pxx423));
|
||||
plot(f41, sqrt(pxx421)./abs(squeeze(freqresp(L4C_G, f41, 'Hz'))));
|
||||
plot(f42, sqrt(pxx422)./abs(squeeze(freqresp(L4C_G, f42, 'Hz'))));
|
||||
plot(f43, sqrt(pxx423)./abs(squeeze(freqresp(L4C_G, f43, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -660,9 +775,9 @@ The PSD of each track are computed using the code below.
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f431, sqrt(pxx431));
|
||||
plot(f432, sqrt(pxx432));
|
||||
plot(f433, sqrt(pxx433));
|
||||
plot(f41, sqrt(pxx431)./abs(squeeze(freqresp(L4C_G, f41, 'Hz'))));
|
||||
plot(f42, sqrt(pxx432)./abs(squeeze(freqresp(L4C_G, f42, 'Hz'))));
|
||||
plot(f43, sqrt(pxx433)./abs(squeeze(freqresp(L4C_G, f43, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -703,10 +818,10 @@ The time domain signals are shown on figure [[fig:meas5]].
|
||||
#+begin_src matlab :exports results :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(t5, meas{5}.Track1);
|
||||
plot(t5, meas{5}.Track2);
|
||||
plot(t5, meas{5}.Track3);
|
||||
plot(t5, meas{5}.Track4);
|
||||
plot(t5, (1/276.8).*meas{5}.Track1);
|
||||
plot(t5, (1/276.8).*meas{5}.Track2);
|
||||
plot(t5, (1/276.8).*meas{5}.Track3);
|
||||
plot(t5, (1/276.8).*meas{5}.Track4);
|
||||
hold off;
|
||||
xlabel('Time [s]'); ylabel('Velocity [m/s]');
|
||||
legend({meas{5}.Track1_Name, meas{5}.Track2_Name, meas{5}.Track3_Name, meas{5}.Track4_Name}, 'Location', 'northeast')
|
||||
@ -735,8 +850,8 @@ We compute the PSD of each track and we plot the PSD of the Z motion for the gro
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f51, sqrt(pxx51));
|
||||
plot(f52, sqrt(pxx52));
|
||||
plot(f51, sqrt(pxx51)./abs(squeeze(freqresp(L4C_G, f51, 'Hz'))));
|
||||
plot(f52, sqrt(pxx52)./abs(squeeze(freqresp(L4C_G, f52, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
@ -759,8 +874,8 @@ We compute the PSD of each track and we plot the PSD of the Z motion for the gro
|
||||
#+begin_src matlab :exports none :results silent
|
||||
figure;
|
||||
hold on;
|
||||
plot(f53, sqrt(pxx53));
|
||||
plot(f54, sqrt(pxx54));
|
||||
plot(f53, sqrt(pxx53)./abs(squeeze(freqresp(L4C_G, f53, 'Hz'))));
|
||||
plot(f54, sqrt(pxx54)./abs(squeeze(freqresp(L4C_G, f54, 'Hz'))));
|
||||
xlim([fmin, fmax]);
|
||||
xticks([1, 10, 100]);
|
||||
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
|
||||
|