From e5151f26bc4c84b4b01fba095b6f8da5c1a3464f Mon Sep 17 00:00:00 2001 From: Thomas Dehaeze Date: Wed, 4 Dec 2019 10:43:38 +0100 Subject: [PATCH] Create file for simulating tomography experiments --- simscape/sim_nano_station_tomo.slx | Bin 0 -> 30998 bytes tomo-exp/index.org | 351 +++++++++++++++++++++++++++++ 2 files changed, 351 insertions(+) create mode 100644 simscape/sim_nano_station_tomo.slx create mode 100644 tomo-exp/index.org diff --git a/simscape/sim_nano_station_tomo.slx b/simscape/sim_nano_station_tomo.slx new file mode 100644 index 0000000000000000000000000000000000000000..2de6de2ea0186ec12b56249d53d3697386675edc GIT binary patch literal 30998 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 z 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 literal 0 HcmV?d00001 diff --git a/tomo-exp/index.org b/tomo-exp/index.org new file mode 100644 index 0000000..20555c0 --- /dev/null +++ b/tomo-exp/index.org @@ -0,0 +1,351 @@ +#+TITLE: Tomography Experiment +:DRAWER: +#+STARTUP: overview + +#+LANGUAGE: en +#+EMAIL: dehaeze.thomas@gmail.com +#+AUTHOR: Dehaeze Thomas + +#+HTML_LINK_HOME: ../index.html +#+HTML_LINK_UP: ../index.html + +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+HTML_MATHJAX: align: center tagside: right font: TeX + +#+PROPERTY: header-args:matlab :session *MATLAB* +#+PROPERTY: header-args:matlab+ :comments org +#+PROPERTY: header-args:matlab+ :results none +#+PROPERTY: header-args:matlab+ :exports both +#+PROPERTY: header-args:matlab+ :eval no-export +#+PROPERTY: header-args:matlab+ :output-dir figs +#+PROPERTY: header-args:matlab+ :tangle matlab/modal_frf_coh.m +#+PROPERTY: header-args:matlab+ :mkdirp yes + +#+PROPERTY: header-args:shell :eval no-export + +#+PROPERTY: header-args:latex :headers '("\\usepackage{tikz}" "\\usepackage{import}" "\\import{$HOME/Cloud/thesis/latex/}{config.tex}") +#+PROPERTY: header-args:latex+ :imagemagick t :fit yes +#+PROPERTY: header-args:latex+ :iminoptions -scale 100% -density 150 +#+PROPERTY: header-args:latex+ :imoutoptions -quality 100 +#+PROPERTY: header-args:latex+ :results raw replace :buffer no +#+PROPERTY: header-args:latex+ :eval no-export +#+PROPERTY: header-args:latex+ :exports both +#+PROPERTY: header-args:latex+ :mkdirp yes +#+PROPERTY: header-args:latex+ :output-dir figs +:END: + +* Matlab Init :noexport:ignore: +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +#+begin_src matlab :tangle no + simulinkproject('../'); +#+end_src + +#+begin_src matlab + open 'simscape/sim_nano_station_tomo.slx' +#+end_src + +* Initialize Experiment +#+begin_src matlab + initializeGround(); + initializeGranite(); + initializeTy(); + initializeRy(); + initializeRz(); + initializeMicroHexapod(); + initializeAxisc(); + initializeMirror(); + initializeNanoHexapod(struct('actuator', 'piezo')); + initializeSample(struct('mass', 1)); +#+end_src + +#+begin_src matlab + t = 0:Ts:Tsim; +#+end_src + +Generate perturbations +#+begin_src matlab + win = hanning(ceil(1/Ts)); + [pxx, f] = pwelch(sqrt(1/(2*Ts))*randn(length(t), 1), win, [], [], 1/Ts); +#+end_src + +#+begin_src matlab + figure; + hold on; + plot(f, sqrt(pxx)); + 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]$') + ylim([0.01, 100]); +#+end_src + +#+begin_src matlab + load('./disturbances/mat/dist_psd.mat', 'dist_f'); + + Dwx = lsim(dist_f.G_gm, sqrt(1/(2*Ts))*randn(length(t), 1), t); + Dwy = lsim(dist_f.G_gm, sqrt(1/(2*Ts))*randn(length(t), 1), t); + Dwz = lsim(dist_f.G_gm, sqrt(1/(2*Ts))*randn(length(t), 1), t); + + Dw = [Dwx, Dwy, Dwz]; +#+end_src + +#+begin_src matlab + figure; + hold on; + plot(t, Dwx); + plot(t, Dwy); + plot(t, Dwz); + hold off; + xlabel('Time [s]'); ylabel('Displacement [m]'); +#+end_src + +#+begin_src matlab + Fty_z = lsim(dist_f.G_ty, sqrt(1/(2*Ts))*randn(length(t), 1), t); + Frz_z = lsim(dist_f.G_rz, sqrt(1/(2*Ts))*randn(length(t), 1), t); +#+end_src + +#+begin_src matlab + figure; + hold on; + plot(t, Fty_z); + plot(t, Frz_z); + hold off; + xlabel('Time [s]'); ylabel('Force [N]'); +#+end_src + +#+begin_src matlab + % Spindle + Rz = 2*pi*t; + + % Axisc + Rm = zeros(length(t), 2); + Rm(:, 2) = pi*ones(length(t), 1); + + inputs = struct( ... + 'Ts', Ts, ... + 'Dw', timeseries(Dw, t), ... + 'Dy', timeseries(zeros(length(t), 1), t), ... + 'Ry', timeseries(zeros(length(t), 1), t), ... + 'Rz', timeseries(Rz, t), ... + 'Dh', timeseries(zeros(length(t), 6), t), ... + 'Rm', timeseries(Rm, t), ... + 'Dn', timeseries(zeros(length(t), 6), t), ... + 'Ds', timeseries(zeros(length(t), 6), t), ... + 'Fg', timeseries(zeros(length(t), 3), t), ... + 'Fn', timeseries(zeros(length(t), 6), t), ... + 'Fnl', timeseries(zeros(length(t), 6), t), ... + 'Fty_x', timeseries(zeros(length(t), 1), t), ... + 'Fty_z', timeseries(Fty_z, t), ... + 'Frz_z', timeseries(Frz_z, t), ... + 'Fs', timeseries(zeros(length(t), 6), t) ... + ); +#+end_src + +* Test +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +#+begin_src matlab + cd .. +#+end_src + +We define some parameters: +- =T0= is the duration in seconds +- =N= is the number of samples + +#+begin_src matlab + T0 = 10; % Signal Duration [s] + N = 10000; % Number of Samples (should be even) +#+end_src + +Then, we have: +- $f_s = N/T_0$ is the sampling frequency in Hz +- $f_c = \frac{1}{2} N/T_0$ is the cut-off frequency in Hz +- $f_0 = 1/T_0$ is the frequency resolution of the DFT in Hz +#+begin_src matlab + Fs = N/T0; % Sampling frequency [Hz] + Fc = (1/2)*N/T0; % Sampling frequency [Hz] + df = 1/T0; % Frequency resolution of the DFT [Hz] +#+end_src + +We then specify the wanted PSD. +#+begin_src matlab + phi = ones(N/2, 1); + % phi = logspace(3, 0, N/2); + phi(df:df:Fs/2>10) = 0; +#+end_src + +We create $C_x(k)$ such that: +\[ C_x(k) = \sqrt{\Phi_{xx}(k\omega_0)\omega_0} \quad k = 1 \dots N/2 \] +where $\Phi_{xx}$ is the wanted PSD. +#+begin_src matlab + C = zeros(N/2, 1); + for i = 1:N/2 + C(i) = sqrt(phi(i))*2*Fs; % TODO - Why this normalization? + end +#+end_src + +We generate some random phase that will be added to =C=. +#+begin_src matlab + theta = 2*pi*rand(N/2, 1); % Generate random phase [rad] +#+end_src + +In order to have +\[ C_x(N/2+i) = C_x^*(N/2-i) \quad i = 1 \dots N/2 \] +We do the following +#+begin_src matlab + Cx = [0 ; C.*complex(cos(theta),sin(theta))]; + Cx = [Cx; flipud(conj(Cx(2:end)))];; +#+end_src + +The time domain data is generated by an inverse FFT. +#+begin_src matlab + u = ifft(Cx); +#+end_src + +#+begin_src matlab + A = fft(u); + figure; plot(2*A.*conj(A)) +#+end_src + +#+begin_src matlab + t = linspace(0, T0, N+1); % Time Vector [s] +#+end_src + +#+begin_src matlab + figure; + plot(t, u) + xlabel('Time [s]'); + ylabel('Amplitude'); +#+end_src + +#+begin_src matlab + nx = length(u); + na = 16; + win = hanning(floor(nx/na)); + + [pxx, f] = pwelch(u, win, 0, [], Fs); +#+end_src + +#+begin_src matlab + figure; + hold on; + plot(f,pxx) + plot(df:df:Fc,phi) + hold off; + xlabel('Frequency [Hz]'); + ylabel('Power Spectral Density'); + set(gca, 'xscale', 'log'); + set(gca, 'yscale', 'log'); +#+end_src + +* Test +#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name) + <> +#+end_src + +#+begin_src matlab :exports none :results silent :noweb yes + <> +#+end_src + +#+begin_src matlab + cd .. +#+end_src + +#+begin_src matlab + load('./disturbances/mat/dist_psd.mat', 'dist_f'); +#+end_src + +We remove the first value with very high PSD. +#+begin_src matlab + dist_f.f = dist_f.f(3:end); + dist_f.psd_gm = dist_f.psd_gm(3:end); +#+end_src + +We define some parameters. +#+begin_src matlab + Fs = 2*dist_f.f(end); % Sampling Frequency of data is twice the maximum frequency of the PSD vector [Hz] + N = 2*length(dist_f.f); % Number of Samples match the one of the wanted PSD + T0 = N/Fs; % Signal Duration [s] + df = 1/T0; % Frequency resolution of the DFT [Hz] + % Also equal to (dist_f.f(2)-dist_f.f(1)) +#+end_src + +We then specify the wanted PSD. +#+begin_src matlab + phi = dist_f.psd_gm; +#+end_src + +Create amplitudes corresponding to wanted PSD. +#+begin_src matlab + C = zeros(N/2,1); + for i = 1:N/2 + C(i) = sqrt(phi(i)*df); + end +#+end_src + +Add random phase to =C=. +#+begin_src matlab + theta = 2*pi*rand(N/2,1); % Generate random phase [rad] + + Cx = [0 ; C.*complex(cos(theta),sin(theta))]; + Cx = [Cx; flipud(conj(Cx(2:end)))];; +#+end_src + +The time domain data is generated by an inverse FFT. +We normalize the =ifft= Matlab command. +#+begin_src matlab + u = 1/(sqrt(2)*df*1/Fs)*ifft(Cx); % Normalisation of the IFFT + t = linspace(0, T0, N+1); % Time Vector [s] +#+end_src + +#+begin_src matlab + figure; + plot(t, u) + xlabel('Time [s]'); + ylabel('Amplitude'); +#+end_src + +#+begin_src matlab + u_rep = [u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u;u]; +#+end_src + +#+begin_src matlab + nx = length(u_rep); + na = 16; + win = hanning(floor(nx/na)); + + [pxx, f] = pwelch(u_rep, win, 0, [], Fs); +#+end_src + +#+begin_src matlab + figure; + hold on; + plot(dist_f.f, dist_f.psd_gm, 'DisplayName', 'Original PSD') + plot(f, pxx, 'DisplayName', 'Computed') + % plot(f, pxx./dist_f.psd_gm, 'k-') + hold off; + xlabel('Frequency [Hz]'); + ylabel('Power Spectral Density'); + set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log'); + legend('location', 'northeast'); +#+end_src