Update ground motion analysis

This commit is contained in:
Thomas Dehaeze 2020-01-28 15:01:32 +01:00
parent cb3f3009ed
commit b1bbae2f8f
9 changed files with 108 additions and 29 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

View File

@ -86,7 +86,7 @@ On figure [[fig:ground_motion_measurements]] is an overview of multiple measurem
data = load('mat/data_028.mat', 'data'); data = data.data; data = load('mat/data_028.mat', 'data'); data = data.data;
#+end_src #+end_src
** Time domain plots ** Time domain plots of the measured voltage
#+begin_src matlab #+begin_src matlab
figure; figure;
hold on; hold on;
@ -151,10 +151,16 @@ The Geophone used are L22. Their sensibility is shown on figure [[fig:geophone_s
S = S0*(s/2/pi/f0)/(1+s/2/pi/f0); S = S0*(s/2/pi/f0)/(1+s/2/pi/f0);
#+end_src #+end_src
#+begin_src matlab :results none :exports none #+begin_src matlab :results none
freqs = logspace(-1, 2, 1000);
figure; figure;
bodeFig({S}, logspace(-1, 2, 1000)); hold on;
ylabel('Amplitude $\left[\frac{V}{m/s}\right]$') plot(f, abs(squeeze(freqresp(S, f, 'Hz'))));
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude $\left[\frac{V}{m/s}\right]$');
xlim([0.1, 100]);
#+end_src #+end_src
#+NAME: fig:geophone_sensibility #+NAME: fig:geophone_sensibility
@ -176,20 +182,70 @@ We also take into account the gain of the electronics which is here set to be $6
G0 = 10^(G0_db/20); % [abs] G0 = 10^(G0_db/20); % [abs]
#+end_src #+end_src
We divide the ASD measured (in $\text{V}/\sqrt{\text{Hz}}$) by the gain of the voltage amplifier to obtain the ASD of the voltage across the geophone. We divide the PSD measured (in $\text{V^2}/\sqrt{Hz}$) by the square of the gain of the voltage amplifier to obtain the PSD of the voltage across the geophone.
We further divide the result by the sensibility of the Geophone to obtain the ASD of the velocity in $m/s/\sqrt{Hz}$. We further divide the result by the square of the magnitude of sensibility of the Geophone to obtain the PSD of the velocity in $(m/s)^2/Hz$.
#+begin_src matlab :results none #+begin_src matlab :results none
scaling = 1./squeeze(abs(freqresp(G0*S, f, 'Hz'))); psd_gv = px_dc./abs(squeeze(freqresp(G0*S, f, 'Hz'))).^2;
#+end_src #+end_src
Finally, we obtain the PSD of the ground motion in $m^2/Hz$ by dividing by the square of the frequency in $rad/s$.
#+begin_src matlab
psd_gm = psd_gv./(2*pi*f).^2;
#+end_src
** Time domain plots of the ground motion
We can inverse the dynamics of the geophone to convert the measured voltage into the estimated ground motion.
#+begin_src matlab
est_vel = lsim(inv(G0*S)*(s/2/pi)/(1+s/2/pi), data(:, 1), data(:, 3)); % Estimated velocity above 1Hz
est_vel = est_vel - mean(est_vel(data(:,3)>10)); % The mean value of the velocity if removed
est_dis = lsim(1/(1+s/2/pi), est_vel, data(:, 3)); % The velocity is integrated above 1Hz
#+end_src
#+begin_src matlab :exports none
figure;
hold on;
plot(data(:, 3), est_vel);
hold off;
xlabel('Time [s]'); ylabel('Velocity [m/s]');
xlim([10, 100]);
#+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_velocity.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:time_domain_velocity
#+CAPTION: Time domain velocity ([[./figs/time_domain_velocity.png][png]], [[./figs/time_domain_velocity.pdf][pdf]])
[[file:figs/time_domain_velocity.png]]
#+begin_src matlab :exports none
figure;
hold on;
plot(data(:, 3), est_dis);
hold off;
xlabel('Time [s]'); ylabel('Displacement [m]');
xlim([10, 100]);
#+end_src
#+HEADER: :tangle no :exports results :results none :noweb yes
#+begin_src matlab :var filepath="figs/time_domain_displacement.pdf" :var figsize="wide-normal" :post pdf2svg(file=*this*, ext="png")
<<plt-matlab>>
#+end_src
#+NAME: fig:time_domain_displacement
#+CAPTION: Time domain absolute displacement ([[./figs/time_domain_displacement.png][png]], [[./figs/time_domain_displacement.pdf][pdf]])
[[file:figs/time_domain_displacement.png]]
** Computation of the ASD of the velocity and displacement ** Computation of the ASD of the velocity and displacement
The ASD of the measured velocity is shown on figure [[fig:ground_motion_id31_asd_velocity]]. The ASD of the measured velocity is shown on figure [[fig:ground_motion_id31_asd_velocity]].
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
plot(f, sqrt(px_dc).*scaling); plot(f, sqrt(psd_gv));
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log'); set(gca, 'yscale', 'log');
@ -209,11 +265,10 @@ The ASD of the measured velocity is shown on figure [[fig:ground_motion_id31_asd
[[file:figs/ground_motion_id31_asd_velocity.png]] [[file:figs/ground_motion_id31_asd_velocity.png]]
We also plot the ASD in displacement (figure [[fig:ground_motion_id31_asd_displacement]]); We also plot the ASD in displacement (figure [[fig:ground_motion_id31_asd_displacement]]);
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
plot(f, (sqrt(px_dc).*scaling)./(2*pi*f)); plot(f, sqrt(psd_gm));
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD of the displacement $\left[\frac{m}{\sqrt{Hz}}\right]$') xlabel('Frequency [Hz]'); ylabel('ASD of the displacement $\left[\frac{m}{\sqrt{Hz}}\right]$')
@ -237,12 +292,12 @@ One can then compare this curve with the figure [[fig:ground_motion_measurements
#+begin_src matlab :results none #+begin_src matlab :results none
figure; figure;
hold on; hold on;
plot(f, ((sqrt(px_dc).*scaling)./(2*pi*f).*1e6).^2); plot(f, psd_gm.*1e12);
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('PSD of the measured displacement $\left[\frac{{ \mu m }^2}{Hz}\right]$') xlabel('Frequency [Hz]'); ylabel('PSD of the measured displacement $\left[\frac{{ \mu m }^2}{Hz}\right]$')
xlim([0.1, 500]); xlim([0.1, 500]); ylim([1e-13, 1e3]);
#+end_src #+end_src
#+NAME: fig:ground_motion_id31_psd_displacement #+NAME: fig:ground_motion_id31_psd_displacement
@ -256,6 +311,12 @@ One can then compare this curve with the figure [[fig:ground_motion_measurements
#+RESULTS: fig:ground_motion_id31_psd_displacement #+RESULTS: fig:ground_motion_id31_psd_displacement
[[file:figs/ground_motion_id31_psd_displacement.png]] [[file:figs/ground_motion_id31_psd_displacement.png]]
** Save
We save the PSD of the ground motion for further analysis.
#+begin_src matlab
save('./mat/psd_gm.mat', 'f', 'psd_gm', 'psd_gv');
#+end_src
** Comparison with other measurements of ground motion ** Comparison with other measurements of ground motion
Now we will compare with other measurements. Now we will compare with other measurements.
@ -289,8 +350,7 @@ And we compare all the measurements (figure [[fig:ground_motion_compare]]).
hold on; hold on;
plot(id09_f, id09_pxx, 'DisplayName', 'ID09'); plot(id09_f, id09_pxx, 'DisplayName', 'ID09');
plot(cern_f, cern_pxx, 'DisplayName', 'CERN'); plot(cern_f, cern_pxx, 'DisplayName', 'CERN');
plot(f, ((sqrt(px_dc).*scaling)./(2*pi*f)).^2, 'k', 'DisplayName', 'ID31'); plot(f, psd_gm, 'k', 'DisplayName', 'ID31');
plot(f, px_disp);
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('PSD [$m^2/Hz$]'); xlabel('Frequency [Hz]'); ylabel('PSD [$m^2/Hz$]');

Binary file not shown.

View File

@ -44,9 +44,15 @@ f0 = 2; % Cut-off frequency [Hz]
S = S0*(s/2/pi/f0)/(1+s/2/pi/f0); S = S0*(s/2/pi/f0)/(1+s/2/pi/f0);
freqs = logspace(-1, 2, 1000);
figure; figure;
bodeFig({S}, logspace(-1, 2, 1000)); hold on;
ylabel('Amplitude $\left[\frac{V}{m/s}\right]$') plot(f, abs(squeeze(freqresp(S, f, 'Hz'))));
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude $\left[\frac{V}{m/s}\right]$');
xlim([0.1, 100]);
@ -64,19 +70,25 @@ G0 = 10^(G0_db/20); % [abs]
% We divide the ASD measured (in $\text{V}/\sqrt{\text{Hz}}$) by the gain of the voltage amplifier to obtain the ASD of the voltage across the geophone. % We divide the PSD measured (in $\text{V^2}/\sqrt{Hz}$) by the square of the gain of the voltage amplifier to obtain the PSD of the voltage across the geophone.
% We further divide the result by the sensibility of the Geophone to obtain the ASD of the velocity in $m/s/\sqrt{Hz}$. % We further divide the result by the square of the magnitude of sensibility of the Geophone to obtain the PSD of the velocity in $(m/s)^2/Hz$.
scaling = 1./squeeze(abs(freqresp(G0*S, f, 'Hz'))); psd_gv = px_dc./abs(squeeze(freqresp(G0*S, f, 'Hz'))).^2;
% Computation of the ASD of the velocity
% Finally, we obtain the PSD of the ground motion in $m^2/Hz$ by dividing by the square of the frequency in $rad/s$.
psd_gm = psd_gv./(2*pi*f).^2;
% Computation of the ASD of the velocity and displacement
% The ASD of the measured velocity is shown on figure [[fig:ground_motion_id31_asd_velocity]]. % The ASD of the measured velocity is shown on figure [[fig:ground_motion_id31_asd_velocity]].
figure; figure;
hold on; hold on;
plot(f, sqrt(px_dc).*scaling); plot(f, sqrt(psd_gv));
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log'); set(gca, 'yscale', 'log');
@ -92,10 +104,9 @@ xlim([0.1, 500]);
% We also plot the ASD in displacement (figure [[fig:ground_motion_id31_asd_displacement]]); % We also plot the ASD in displacement (figure [[fig:ground_motion_id31_asd_displacement]]);
figure; figure;
hold on; hold on;
plot(f, (sqrt(px_dc).*scaling)./(2*pi*f)); plot(f, sqrt(psd_gm));
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('ASD of the displacement $\left[\frac{m}{\sqrt{Hz}}\right]$') xlabel('Frequency [Hz]'); ylabel('ASD of the displacement $\left[\frac{m}{\sqrt{Hz}}\right]$')
@ -107,16 +118,24 @@ xlim([0.1, 500]);
% #+CAPTION: Amplitude Spectral Density of the Displacement % #+CAPTION: Amplitude Spectral Density of the Displacement
% #+RESULTS: fig:ground_motion_id31_asd_displacement % #+RESULTS: fig:ground_motion_id31_asd_displacement
% [[file:figs/ground_motion_id31_asd_displacement.png]] % [[file:figs/ground_motion_id31_asd_displacement.png]]
% And also in $\frac{{\mu u}^2}{Hz}$ (figure [[fig:ground_motion_id31_psd_displacement]]).
% And we also plot the PSD of the displacement in $\frac{{\mu u}^2}{Hz}$ as it is a usual unit used (figure [[fig:ground_motion_id31_psd_displacement]]).
% One can then compare this curve with the figure [[fig:ground_motion_measurements]].
figure; figure;
hold on; hold on;
plot(f, ((sqrt(px_dc).*scaling)./(2*pi*f).*1e6).^2); plot(f, psd_gm.*1e12);
hold off; hold off;
set(gca, 'xscale', 'log'); set(gca, 'xscale', 'log');
set(gca, 'yscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('PSD of the measured displacement $\left[\frac{{ \mu m }^2}{Hz}\right]$') xlabel('Frequency [Hz]'); ylabel('PSD of the measured displacement $\left[\frac{{ \mu m }^2}{Hz}\right]$')
xlim([0.1, 500]); xlim([0.1, 500]); ylim([1e-13, 1e3]);
% Save
% We save the PSD of the ground motion for further analysis.
save('./mat/psd_gm', 'f', 'psd_gm');
% Load the measurement data % Load the measurement data
% First we load the measurement data. % First we load the measurement data.
@ -144,7 +163,7 @@ figure;
hold on; hold on;
plot(id09_f, id09_pxx, 'DisplayName', 'ID09'); plot(id09_f, id09_pxx, 'DisplayName', 'ID09');
plot(cern_f, cern_pxx, 'DisplayName', 'CERN'); plot(cern_f, cern_pxx, 'DisplayName', 'CERN');
plot(f, ((sqrt(px_dc).*scaling)./(2*pi*f)).^2, 'k', 'DisplayName', 'ID31'); plot(f, psd_gm, 'k', 'DisplayName', 'ID31');
hold off; hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log'); set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('PSD [$m^2/Hz$]'); xlabel('Frequency [Hz]'); ylabel('PSD [$m^2/Hz$]');