diff --git a/src/FRTN35_lab1.jl b/src/FRTN35_lab1.jl index 4134330e323adaebaaaf80d86821c289da1bae86..623de70fb239dc626e2ae3ee30c1fe4a786ee326 100644 --- a/src/FRTN35_lab1.jl +++ b/src/FRTN35_lab1.jl @@ -1,8 +1,8 @@ using BallAndBeam, ControlSystems, JLD, LabProcesses # @load "workspace.jld" # Run this command to restore a saved workspace -bias = 0.01 # Change this if your process drifts over time -P = LabProcesses.Beam(0.01) # Replace for BeamSimulator to run simulations +Bias = 0.01 # Change this if your process drifts over time +P = LabProcesses.Beamr(0.01, Bias) # Replace for BeamSimulator(0.01) to run simulations h = sampletime(P) settling_time = 1 @@ -55,20 +55,25 @@ plot([y u r], lab = ["y" "u" "r"]) # If you have time, estimate ARX model ===================================================== prbs = PRBSGenerator() -duration = 10 -y = zeros(0:h:duration) -u = zeros(0:h:duration) -LabProcesses.initialize(P) -for (i,t) = enumerate(0:h:duration) - y[i] = measure(P) - u[i] = prbs()-0.5 #+ 0.5*u[max(1,i-1)] - control(P, u[i]) +function prbs_experiment(;amplitude = 1, duration = 10) + y = zeros(0:h:duration) + u = zeros(0:h:duration) + LabProcesses.initialize(P) + for (i,t) = enumerate(0:h:duration) + @periodically h begin + y[i] = measure(P) + u[i] = amplitude*(prbs()-0.5) + control(P, u[i]) + end + end + LabProcesses.finalize(P) + y,u,times end -LabProcesses.finalize(P) +y,u = prbs_experiment(duration = 10, amplitude = 1) plot([u y]) -na = 6 # Order of A polynomial -nb = 5 # Order of B polynomial +na = 3 # Order of A polynomial +nb = 2 # Order of B polynomial arxtf = arx(h, y, u, na, nb) # Estimate trasfer function with ARX method mag, phase, ω = bode(arxtf, logspace(-1,3,200))