diff --git a/ground-motion/data/ground_meas_id31.zip b/ground-motion/data/ground_meas_id31.zip index 8451f09..ad8f547 100644 Binary files a/ground-motion/data/ground_meas_id31.zip and b/ground-motion/data/ground_meas_id31.zip differ diff --git a/ground-motion/figs/geophone_sensibility.png b/ground-motion/figs/geophone_sensibility.png index 6748a7e..048221f 100644 Binary files a/ground-motion/figs/geophone_sensibility.png and b/ground-motion/figs/geophone_sensibility.png differ diff --git a/ground-motion/figs/ground_motion_id31_psd_displacement.png b/ground-motion/figs/ground_motion_id31_psd_displacement.png index a3129b3..879d8cd 100644 Binary files a/ground-motion/figs/ground_motion_id31_psd_displacement.png and b/ground-motion/figs/ground_motion_id31_psd_displacement.png differ diff --git a/ground-motion/figs/time_domain_displacement.png b/ground-motion/figs/time_domain_displacement.png new file mode 100644 index 0000000..8941372 Binary files /dev/null and b/ground-motion/figs/time_domain_displacement.png differ diff --git a/ground-motion/figs/time_domain_velocity.png b/ground-motion/figs/time_domain_velocity.png new file mode 100644 index 0000000..64f59b6 Binary files /dev/null and b/ground-motion/figs/time_domain_velocity.png differ diff --git a/ground-motion/index.html b/ground-motion/index.html index 17276bc..039e221 100644 --- a/ground-motion/index.html +++ b/ground-motion/index.html @@ -1,9 +1,10 @@ +
- +The goal here is to compare the ground motion at the location of the micro-station (ID31 beamline at ESRF) with other measurements of the ground motion. @@ -324,11 +330,11 @@ Then the signal is amplified by a Voltage Amplifier with the following settings:
-On figure 1 is an overview of multiple measurements made at famous location. +On figure 1 is an overview of multiple measurements made at famous location.
-
All the files (data and Matlab scripts) are accessible here.
@@ -351,31 +356,31 @@ All the files (data and Matlab scripts) are accessible
- Figure 2: Measurement of the ground motion - Time domain Figure 3: Amplitude Spectral Density of the measured Voltage
-The Geophone used are L22. Their sensibility is shown on figure 4.
+The Geophone used are L22. Their sensibility is shown on figure 4.
Figure 4: Sensibility of the Geophone
-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 further divide the result by the sensibility of the Geophone to obtain the ASD of the velocity in \(m/s/\sqrt{Hz}\).
+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 square of the magnitude of sensibility of the Geophone to obtain the PSD of the velocity in \((m/s)^2/Hz\).
+Finally, we obtain the PSD of the ground motion in \(m^2/Hz\) by dividing by the square of the frequency in \(rad/s\).
+
-The ASD of the measured velocity is shown on figure 5.
+We can inverse the dynamics of the geophone to convert the measured voltage into the estimated ground motion.
+
+The ASD of the measured velocity is shown on figure 7.
Figure 5: Amplitude Spectral Density of the Velocity Figure 7: Amplitude Spectral Density of the Velocity
-We also plot the ASD in displacement (figure 6);
+We also plot the ASD in displacement (figure 8);
Figure 6: Amplitude Spectral Density of the Displacement Figure 8: Amplitude Spectral Density of the Displacement
-And we also plot the PSD of the displacement in \(\frac{{\mu u}^2}{Hz}\) as it is a usual unit used (figure 7).
-One can then compare this curve with the figure 1.
+And we also plot the PSD of the displacement in \(\frac{{\mu u}^2}{Hz}\) as it is a usual unit used (figure 9).
+One can then compare this curve with the figure 1.
Figure 7: Power Spectral Density of the measured displacement Figure 9: Power Spectral Density of the measured displacement
+We save the PSD of the ground motion for further analysis.
+
Now we will compare with other measurements.
First we load the measurement data.
Here we have one measurement of the floor motion made at the ESRF in 2018, and one measurement made at CERN.
We compute the Power Spectral Densities of the measurements.
-And we compare all the measurements (figure 8).
+And we compare all the measurements (figure 10).
Figure 8: Comparison of the PSD of the ground motion measured at different location Figure 10: Comparison of the PSD of the ground motion measured at different location Created: 2019-05-10 ven. 17:51 Created: 2020-01-28 mar. 15:012.1 Load data
+2.1 Load data
data = load('mat/data_028.mat', 'data'); data = data.data;
+
data = load('mat/data_028.mat', 'data'); data = data.data;
2.2 Time domain plots
+2.2 Time domain plots of the measured voltage
figure;
hold on;
-plot(data(:, 3), data(:, 1));
+plot(data(:, 3), data(:, 1));
hold off;
-xlabel('Time [s]'); ylabel('Voltage [V]');
-xlim([0, 100]);
+xlabel('Time [s]'); ylabel('Voltage [V]');
+xlim([0, 100]);
2.3 Computation of the ASD of the measured voltage
+2.3 Computation of the ASD of the measured voltage
dt = data(2, 3) - data(1, 3);
+
dt = data(2, 3) - data(1, 3);
-Fs = 1/dt;
-win = hanning(ceil(10*Fs));
+Fs = 1/dt;
+win = hanning(ceil(10*Fs));
[px_dc, f] = pwelch(data(:, 1), win, [], [], Fs);
+
[px_dc, f] = pwelch(data(:, 1), win, [], [], Fs);
figure;
hold on;
-plot(f, sqrt(px_dc));
+plot(f, sqrt(px_dc));
hold off;
-set(gca, 'xscale', 'log');
-set(gca, 'yscale', 'log');
-xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
-xlim([0.1, 500]);
+set(gca, 'xscale', 'log');
+set(gca, 'yscale', 'log');
+xlabel('Frequency [Hz]'); ylabel('Amplitude Spectral Density $\left[\frac{V}{\sqrt{Hz}}\right]$')
+xlim([0.1, 500]);
2.4 Scaling to take into account the sensibility of the geophone and the voltage amplifier
+2.4 Scaling to take into account the sensibility of the geophone and the voltage amplifier
S0 = 88; % Sensitivity [V/(m/s)]
-f0 = 2; % Cut-off frequency [Hz]
+
S0 = 88; % Sensitivity [V/(m/s)]
+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;
+hold on;
+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]);
G0_db = 60; % [dB]
+
G0_db = 60; % [dB]
-G0 = 10^(G0_db/20); % [abs]
+G0 = 10^(G0_db/20); % [abs]
scaling = 1./squeeze(abs(freqresp(G0*S, f, 'Hz')));
+
psd_gv = px_dc./abs(squeeze(freqresp(G0*S, f, 'Hz'))).^2;
+
+psd_gm = psd_gv./(2*pi*f).^2;
2.5 Computation of the ASD of the velocity and displacement
+2.5 Time domain plots of the ground motion
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
+
+2.6 Computation of the ASD of the velocity and displacement
+figure;
hold on;
-plot(f, sqrt(px_dc).*scaling);
+plot(f, sqrt(psd_gv));
hold off;
-set(gca, 'xscale', 'log');
-set(gca, 'yscale', 'log');
-xlabel('Frequency [Hz]'); ylabel('ASD of the measured Velocity $\left[\frac{m/s}{\sqrt{Hz}}\right]$')
-xlim([0.1, 500]);
+set(gca, 'xscale', 'log');
+set(gca, 'yscale', 'log');
+xlabel('Frequency [Hz]'); ylabel('ASD of the measured Velocity $\left[\frac{m/s}{\sqrt{Hz}}\right]$')
+xlim([0.1, 500]);
figure;
hold on;
-plot(f, (sqrt(px_dc).*scaling)./(2*pi*f));
+plot(f, sqrt(psd_gm));
hold off;
-set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
-xlabel('Frequency [Hz]'); ylabel('ASD of the displacement $\left[\frac{m}{\sqrt{Hz}}\right]$')
-xlim([0.1, 500]);
+set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
+xlabel('Frequency [Hz]'); ylabel('ASD of the displacement $\left[\frac{m}{\sqrt{Hz}}\right]$')
+xlim([0.1, 500]);
figure;
hold on;
-plot(f, ((sqrt(px_dc).*scaling)./(2*pi*f).*1e6).^2);
+plot(f, psd_gm.*1e12);
hold off;
-set(gca, 'xscale', 'log');
-set(gca, 'yscale', 'log');
-xlabel('Frequency [Hz]'); ylabel('PSD of the measured displacement $\left[\frac{{ \mu m }^2}{Hz}\right]$')
-xlim([0.1, 500]);
+set(gca, 'xscale', 'log');
+set(gca, 'yscale', 'log');
+xlabel('Frequency [Hz]'); ylabel('PSD of the measured displacement $\left[\frac{{ \mu m }^2}{Hz}\right]$')
+xlim([0.1, 500]); ylim([1e-13, 1e3]);
2.6 Comparison with other measurements of ground motion
-2.7 Save
+save('./mat/psd_gm.mat', 'f', 'psd_gm', 'psd_gv');
+
+2.8 Comparison with other measurements of ground motion
+2.6.1 Load the measurement data
-2.8.1 Load the measurement data
+id09 = load('./mat/id09_floor_september2018.mat');
-cern = load('./mat/ground_motion_dist.mat');
+
id09 = load('./mat/id09_floor_september2018.mat');
+cern = load('./mat/ground_motion_dist.mat');
2.6.2 Compute PSD of the measurements
-2.8.2 Compute PSD of the measurements
+Fs_id09 = 1/(id09.time3(2)-id09.time3(1));
-win_id09 = hanning(ceil(10*Fs_id09));
-[id09_pxx, id09_f] = pwelch(1e-6*id09.x_y_z(:, 3), win_id09, [], [], Fs_id09);
+
Fs_id09 = 1/(id09.time3(2)-id09.time3(1));
+win_id09 = hanning(ceil(10*Fs_id09));
+[id09_pxx, id09_f] = pwelch(1e-6*id09.x_y_z(:, 3), win_id09, [], [], Fs_id09);
Fs_cern = 1/(cern.gm.time(2)-cern.gm.time(1));
-win_cern = hanning(ceil(10*Fs_cern));
-[cern_pxx, cern_f] = pwelch(cern.gm.signal, win_cern, [], [], Fs_cern);
+
Fs_cern = 1/(cern.gm.time(2)-cern.gm.time(1));
+win_cern = hanning(ceil(10*Fs_cern));
+[cern_pxx, cern_f] = pwelch(cern.gm.signal, win_cern, [], [], Fs_cern);
2.6.3 Compare PSD of Cern, ID09 and ID31
-2.8.3 Compare PSD of Cern, ID09 and ID31
+figure;
hold on;
-plot(id09_f, id09_pxx, 'DisplayName', 'ID09');
-plot(cern_f, cern_pxx, 'DisplayName', 'CERN');
-plot(f, ((sqrt(px_dc).*scaling)./(2*pi*f)).^2, 'k', 'DisplayName', 'ID31');
+plot(id09_f, id09_pxx, 'DisplayName', 'ID09');
+plot(cern_f, cern_pxx, 'DisplayName', 'CERN');
+plot(f, psd_gm, 'k', 'DisplayName', 'ID31');
hold off;
-set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
-xlabel('Frequency [Hz]'); ylabel('PSD [$m^2/Hz$]');
-legend('Location', 'northeast');
-xlim([0.1, 500]);
+set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
+xlabel('Frequency [Hz]'); ylabel('PSD [$m^2/Hz$]');
+legend('Location', 'northeast');
+xlim([0.1, 500]);