function [var_ome, var_th] = fpcrb2(model, control, amp, injom, Q, R, T, ref_profile, Q0) %function for computing PCRB of PMSM model % machine parameters Rs = 0.28; Ls = 0.003465; psipm = 0.1989; B = 0; kp = 1.5; pp = 4.0; J = 0.04; dt = 0.000125; Lq = 1.0*Ls; Ld = 0.9*Ls; %aliases kpp = kp*pp*pp; kppj = kpp/J; psi = psipm; a = 0.9898; b = 0.0072; c = 0.0361; d = 1.0; e = 0.0149; %reference signal ref_ome = zeros(1, T); for k = 1:T, index = floor(k*dt); if(index>0) lower = ref_profile(index); else lower = 0; end if(index dq u_dq(1,t) = u_dq(1,t) + amp*sin(injom*dt*t); u_dq(2,t) = u_dq(2,t) + amp*cos(injom*dt*t); elseif(control == 4) %inj. rect. -> dq u_dq(1,t) = u_dq(1,t) + amp*sign(sin(injom*dt*t)); u_dq(2,t) = u_dq(2,t) + amp*sign(cos(injom*dt*t)); elseif(control == 5) %inj. const. -> d % u_dq(1,t) = 0.1*Ld/dt - (1.0*Ld/dt - Rs)*id - Lq*ome*iq; u_dq(1,t) = amp; elseif(control == 9) %bic. sign. ome u_dq(1,t) = u_dq(1,t) - amp*sign(ome); u_dq(2,t) = u_dq(2,t) + amp*sign(ome); end ual = u_dq(1,t)*cos(the) - u_dq(2,t)*sin(the); ube = u_dq(1,t)*sin(the) + u_dq(2,t)*cos(the); if(control == 7) %inj. sin -> al-be ual = ual + amp*cos(injom*dt*t); ube = ube + amp*sin(injom*dt*t); elseif(control == 8) %inj. rect. -> al-be ual = ual + amp*sign(cos(injom*dt*t)); ube = ube + amp*sign(sin(injom*dt*t)); elseif((control == 10)&&(rand() > (1/5))) %bic rnd. 5 duab = sign(rand(2,1)-0.5)*amp; ual = ual + duab(1); ube = ube + duab(2); end ud = ual*cos(the) + ube*sin(the); uq = ube*cos(the) - ual*sin(the); %simulation model Ldq idpl = (1.0 - Rs*dt/Ld)*id + Lq*dt/Ld*ome*iq + dt/Ld*ud; iqpl = (1.0 - Rs*dt/Lq)*iq - psipm*dt/Lq*ome - Ld*dt/Lq*ome*id + dt/Lq*uq; x_sys(1, t+1) = idpl*cos(the) - iqpl*sin(the); x_sys(2, t+1) = idpl*sin(the) + iqpl*cos(the); x_sys(3, t+1) = (1.0-B*dt/J)*ome + kp*pp*pp*dt/J*((Ld-Lq)*id*iq + psipm*iq); x_sys(4, t+1) = the + dt*ome; end end ssz = sum(model); var_ome = zeros(T,ssz); var_th = zeros(T,ssz); ind = 1; if(model(1) == 1) var_ome(:,ind) = iJn1(1,:); var_th(:,ind) = iJn1(2,:); ind = ind+1; end if(model(2) == 1) var_ome(:,ind) = iJn2(1,:); var_th(:,ind) = iJn2(2,:); ind = ind+1; end if(model(3) == 1) var_ome(:,ind) = iJn3(1,:); var_th(:,ind) = iJn3(2,:); ind = ind+1; end if(model(4) == 1) var_ome(:,ind) = iJn4(1,:); var_th(:,ind) = iJn4(2,:); ind = ind+1; end end