clear all
close all
clc

s = tf('s');

G = (10^6*s)/(s^2+3*10^3*s+10^6)

G_zpk = zpk(G);
G_zpk.DisplayFormat = 'Frequency';
G_zpk
kG = 1
bode(G)

e_ramp = 10^-2;

kc = 500;

Bw = 800;
Mr_dB = 3; %Mr deve essere in scala lineare
Mr = 10^(Mr_dB / 20)

wc = 0.65 * Bw
fm = (2.3 - Mr)/1.25
fm_deg = rad2deg(fm)

%Proviamo!
C1 = kc / s^2

L = C1 * G

bode(L)
[m,f]=bode(L,wc)

delta_fm = 25 %aumento di 25 grad la fase

alpha = (1-sind(delta_fm))/(1+sind(delta_fm))
tau = 1 /(wc * sqrt(alpha))

Ca = (1+tau*s)/(1+ tau*alpha*s)

%proviamo ora con una rete anticipatrice centrata in wc
hold on
L1 = Ca*L
%bode(L1)
[m,f] = bode(L1,520)
margin(L1)


%verifico Nichols, ho aumentato guadagno

figure(2)
nichols(L1)

W=feedback(L1,1)
figure(3)
bode(W)
step(W)