mamech
Full Member level 3
hello
I found a weird problem when I tried to make parameter estimation for some systems.
I make the identification using an arduino for data aquisition and scilab for data analysis.
when I made the estimation process for RC or RLC, the identification is correct.
but when the circuit contain buffering opamp, the identification fails.
for example when I made a circuit that contains RC followed by opamp followed by another RC (the resulting is second order overdamped system) , the identification failed.
also, when I took the output of RLC and entered it as input to voltage follower opamp, the identification failed too, knowing that that the waveform before opamp nearly similar to the waveform after opamp.
why the identification fails when the system has an opamp??
any suggestions?
I found a weird problem when I tried to make parameter estimation for some systems.
I make the identification using an arduino for data aquisition and scilab for data analysis.
when I made the estimation process for RC or RLC, the identification is correct.
but when the circuit contain buffering opamp, the identification fails.
for example when I made a circuit that contains RC followed by opamp followed by another RC (the resulting is second order overdamped system) , the identification failed.
also, when I took the output of RLC and entered it as input to voltage follower opamp, the identification failed too, knowing that that the waveform before opamp nearly similar to the waveform after opamp.
why the identification fails when the system has an opamp??
any suggestions?
Code Verilog - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 function [Sysc,Hz]=identsys2(u,y,T) z=%z; s=%s phi=[]; for i = 1:(length(u)-2) phi = [phi ;y(i+1) y(i) u(i+1) u(i)]; end Y=(y(3:$)); theta= inv(phi'*phi)*phi'*Y disp(theta) Hz= (theta(3)*z+theta(4))/(z^2 - theta(1)*z - theta(2)) disp(Hz) numdeg = degree(Hz.num); dendeg = degree(Hz.den); if numdeg>dendeg error('The discrete-time system is improper'); end f = -(s*T+2); g = (s*T-2); // extract the coefficients from num and den bn = coeff(Hz.num); an = coeff(Hz.den); npad = dendeg - numdeg; // number of zero to be padded, if any if npad > 0 for i=0:npad bn = [bn 0]; // pad numerator coeff vector with zero end end // The for loop that does the conversion nums = 0; dens = 0; for i=0:dendeg, nums = nums + bn(i+1)*(f^i)*(g^(dendeg-i)); dens = dens + an(i+1)*(f^i)*(g^(dendeg-i)); end Sysc = syslin('c',nums,dens); coefficients = coeff(Sysc.den) //disp(coefficients) common_factor= coefficients(3) format('v',8) Sysc.num = Sysc.num/common_factor Sysc.den= Sysc.den/common_factor Sysc.num= clean(Sysc.num,0.1) Sysc.den= clean(Sysc.den,0.1) endfunction
Last edited by a moderator: