From 0120c31276fe76a27032c179097f1d4f3ee5378f Mon Sep 17 00:00:00 2001 From: danielmartensson Date: Sun, 26 Apr 2020 01:36:00 +0200 Subject: [PATCH] Mataveid 6.0 --- README.md | 46 ++++++++++++++++++++++--------------- pictures/OKID_Result.png | Bin 12294 -> 20883 bytes sourcecode/listOfFunctions | 9 ++++++++ sourcecode/spa.m | 2 +- 4 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 sourcecode/listOfFunctions diff --git a/README.md b/README.md index 4506e64..bdc3f4b 100644 --- a/README.md +++ b/README.md @@ -27,35 +27,45 @@ K = 0.01; R = 1; L = 0.5; -A = [0 1 0 - 0 -b/J K/J - 0 -K/L -R/L]; -B = [0 ; 0 ; 1/L]; -C = [1 0 0]; -D = [0]; -delay = 0; - -%% Model -motor_ss = ss(delay,A,B,C,D); +% Matrix A +A = [0 1 0 0; + -K*R*L -(J+K+R*2) 0 1; + 0 0 0 1; + 0 1 -(b+J) -5*(J+R*2)]; + +% Matrix B +B = [0 0; + 1 0; + 0 0; + 0 1]; + +% Matrix C +C = [0 1 0 0; + 0 0 1 0]; + +%% Model +motor_ss = ss(0, A, B, C); %% Input and time t = linspace(0, 20, 1000); -u = [linspace(5, -11, 100) linspace(7, 3, 100) linspace(-6, 9, 100) linspace(-7, 1, 100) linspace(2, 0, 100) linspace(6, -9, 100) linspace(4, 1, 100) linspace(0, 0, 100) linspace(10, 17, 100) linspace(-30, 0, 100)]; +u = [linspace(1, 11, 100) linspace(7, 3, 100) linspace(6, 9, 100) linspace(-7, -1, 100) linspace(2, -10, 100) linspace(6, -9, 100) linspace(4, 1, 100) linspace(0, 0, 100) linspace(10, 17, 100) linspace(-30, 0, 100)]; +u = [u;2*u]; % MIMO %% Simulation y = lsim(motor_ss, u, t); -%% Add 5% noise +%% Add 15% noise load v -for i = 1:length(y) - noiseSigma = 0.05*y(i); +for i = 1:length(y)-1 + noiseSigma = 0.05*y(:, i); noise = noiseSigma*v(i); % v = noise, 1000 samples -1 to 1 - y(i) = y(i) + noise; + y(:, i) = y(:, i) + noise; end + %% Identification regularization = 838; -modelorder = 3; +modelorder = 10; [sysd, K] = okid(u, y, t(2) - t(1), 0, regularization, modelorder); close @@ -65,7 +75,7 @@ close %% Check plot(t, y, t, yt(:, 1:2:end)) -legend("Data", "Identified", 'location', 'northwest') +legend("Data 1", "Data 2", "Identified 1", "Identified 2", 'location', 'northwest') grid on ``` ![a](https://raw.githubusercontent.com/DanielMartensson/Mataveid/master/pictures/OKID_Result.png) @@ -330,7 +340,7 @@ close %% Check plot(t, yt(1:2, 1:2:end), t, yf(1:2, :)) -legend("Data", "Identified", 'location', 'northwest') +legend("Identified 1", "Identified 2", "Data 1", "Data 2", 'location', 'northwest') grid on ``` diff --git a/pictures/OKID_Result.png b/pictures/OKID_Result.png index 806b6244ea256b41d2a4708f80388d89559c7bc1..abea08961db8805b63e12ae40ae4711c86681147 100644 GIT binary patch literal 20883 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 R&O(vMHU~HR+qTTOe*#wwH>>~v literal 12294 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 Y>aFa%^>&;07?b^X@91lw)E~e4U)O7GoB#j- diff --git a/sourcecode/listOfFunctions b/sourcecode/listOfFunctions new file mode 100644 index 0000000..a8eba2e --- /dev/null +++ b/sourcecode/listOfFunctions @@ -0,0 +1,9 @@ +eradc.m +filtfilt2.m +idbode.m +ocid.m +okid.m +rls.m +spa.m +ssfd.m +updatemataveid.m diff --git a/sourcecode/spa.m b/sourcecode/spa.m index 75aca7a..191dd72 100644 --- a/sourcecode/spa.m +++ b/sourcecode/spa.m @@ -38,7 +38,7 @@ plot(freq, Y) ylabel('Amplitude') - xlabel('Frequency [rad/s]') + xlabel('Frequency [Hz]') % Return values amp = 20*log10(Y);