91 lines
2.0 KiB
Org Mode
91 lines
2.0 KiB
Org Mode
#+TITLE: Cercalo Test Bench
|
|
:DRAWER:
|
|
#+STARTUP: overview
|
|
|
|
#+LANGUAGE: en
|
|
#+EMAIL: dehaeze.thomas@gmail.com
|
|
#+AUTHOR: Dehaeze Thomas
|
|
|
|
#+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/frf_processing.m
|
|
#+PROPERTY: header-args:matlab+ :mkdirp yes
|
|
: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)
|
|
<<matlab-dir>>
|
|
#+end_src
|
|
|
|
#+begin_src matlab :exports none :results silent :noweb yes
|
|
<<matlab-init>>
|
|
#+end_src
|
|
|
|
* Identification of the Plant
|
|
#+begin_src matlab
|
|
fs = 1e4;
|
|
Ts = 1/fs;
|
|
#+end_src
|
|
|
|
We generate white noise with the "random number" simulink block, and we filter that noise.
|
|
|
|
#+begin_src matlab
|
|
Gi = (1)/(1+s/2/pi/100);
|
|
#+end_src
|
|
|
|
#+begin_src matlab :results output replace
|
|
c2d(Gi, Ts, 'tustin')
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
#+begin_example
|
|
c2d(Gi, Ts, 'tustin')
|
|
|
|
ans =
|
|
|
|
0.030459 (z+1)
|
|
--------------
|
|
(z-0.9391)
|
|
|
|
Sample time: 0.0001 seconds
|
|
Discrete-time zero/pole/gain model.
|
|
#+end_example
|
|
|
|
#+begin_src matlab
|
|
load('mat/data_001.mat', 't', 'ux')
|
|
#+end_src
|
|
|
|
#+begin_src matlab
|
|
figure; plot(t, ux)
|
|
#+end_src
|
|
|
|
#+begin_src matlab
|
|
[tf_est, freqs] = tfestimate(ux, yx, hanning(ceil(length(ux)/10)), [], [], fs);
|
|
|
|
% h = idfrd(tf_est, freqs*2*pi, Ts);
|
|
#+end_src
|
|
|
|
#+begin_src matlab
|
|
figure;
|
|
ax1 = subplot(2, 1, 1);
|
|
hold on;
|
|
plot(freqs, abs(tf_est),'--')
|
|
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
|
|
ylabel('Amplitude [m/N]');
|
|
hold off;
|
|
|
|
ax2 = subplot(2, 1, 2);
|
|
hold on;
|
|
plot(freqs, mod(180+180/pi*phase(tf_est), 360)-180,'--')
|
|
set(gca,'xscale','log');
|
|
ylim([-180, 180]);
|
|
yticks([-180, -90, 0, 90, 180]);
|
|
xlabel('Frequency [$Hz$]'); ylabel('Phase [deg]');
|
|
hold off;
|
|
#+end_src
|