wip
This commit is contained in:
@@ -104,9 +104,10 @@ class MXTuning(Tuning):
|
||||
num1=np.poly1d([mag1])
|
||||
den1 = np.poly1d([T1**2,2*T1*d1,1])
|
||||
|
||||
#reiner integrator: 30Hz=0dB -> k=30*2*pi=180
|
||||
#num1=np.poly1d([120*120])
|
||||
#den1 = np.poly1d([1,0,0])
|
||||
|
||||
#reiner integrator: 19.8Hz=0dB -> k=30*2*pi=180
|
||||
num0=np.poly1d([(19.8*2*np.pi)**2])
|
||||
den0=np.poly1d([1,0,0])
|
||||
|
||||
|
||||
#first resonance frequency
|
||||
@@ -116,8 +117,6 @@ class MXTuning(Tuning):
|
||||
T2=1/w2
|
||||
num2 = np.poly1d([T2[0]**2,2*T2[0]*d2[0],1])
|
||||
den2 = np.poly1d([T2[1]**2,2*T2[1]*d2[1],1])
|
||||
mdl= signal.lti(num2, den2) #num denum
|
||||
#bode(mdl)
|
||||
|
||||
|
||||
#current loop 2nd order approx
|
||||
@@ -131,12 +130,33 @@ class MXTuning(Tuning):
|
||||
numc = np.poly1d([1.])
|
||||
denc = np.poly1d([Tc**2,2*Tc*dc,1])
|
||||
|
||||
|
||||
#simplified current loop 1st order approx
|
||||
wd=2*np.pi*400. #45deg at 360Hz
|
||||
Td=1/wd
|
||||
numd = np.poly1d([1.])
|
||||
dend = np.poly1d([Td,1])
|
||||
|
||||
|
||||
num=num1*num2*numc#*num3
|
||||
den=den1*den2*denc#*den3
|
||||
mdl= signal.lti(num, den) #num denum
|
||||
print(num)
|
||||
print(den)
|
||||
print(mdl)
|
||||
#print(num);print(den);print(mdl)
|
||||
|
||||
w=np.logspace(0, np.log10(2000), 1000)*2*np.pi
|
||||
|
||||
mdl1c= signal.lti(num1*numc, den1*denc)
|
||||
mdl1d= signal.lti(num1*numd, den1*dend)
|
||||
mdl1= signal.lti(num1, den1)
|
||||
mdl0= signal.lti(num0, den0)
|
||||
|
||||
bode(((mdl,'plant'),
|
||||
(mdl1c,'mdl1c'),
|
||||
(mdl1d,'mdl1d'),
|
||||
(mdl1,'mdl1'),
|
||||
(mdl0,'mdl0'),
|
||||
),w)
|
||||
|
||||
d={'num':num.coeffs,'num1':num1.coeffs,'num2':num2.coeffs,'numc':numc.coeffs,
|
||||
'den':den.coeffs,'den1':den1.coeffs,'den2':den2.coeffs,'denc':denc.coeffs}
|
||||
fn=os.path.join(self.baseDir,'model%d.mat'%mot)
|
||||
@@ -155,6 +175,12 @@ class MXTuning(Tuning):
|
||||
num1=np.poly1d([mag1])
|
||||
den1 = np.poly1d([T1**2,2*T1*d1,1])
|
||||
|
||||
|
||||
#reiner integrator: 11.84Hz=0dB -> k=30*2*pi=180
|
||||
num0=np.poly1d([(11.84*2*np.pi)**2])
|
||||
den0=np.poly1d([1,0,0])
|
||||
|
||||
|
||||
#resonance frequency
|
||||
f2=np.array([55.,61.])
|
||||
d2=np.array([.2,.2])#daempfung
|
||||
@@ -162,8 +188,7 @@ class MXTuning(Tuning):
|
||||
T2=1/w2
|
||||
num2 = np.poly1d([T2[0]**2,2*T2[0]*d2[0],1])
|
||||
den2 = np.poly1d([T2[1]**2,2*T2[1]*d2[1],1])
|
||||
mdl= signal.lti(num2, den2) #num denum
|
||||
#bode(mdl)
|
||||
|
||||
|
||||
#resonance frequency
|
||||
f3=np.array([128,137])
|
||||
@@ -172,8 +197,7 @@ class MXTuning(Tuning):
|
||||
T3=1/w3
|
||||
num3 = np.poly1d([T3[0]**2,2*T3[0]*d3[0],1])
|
||||
den3 = np.poly1d([T3[1]**2,2*T3[1]*d3[1],1])
|
||||
#mdl= signal.lti(num3, den3) #num denum
|
||||
#bode(mdl)
|
||||
|
||||
|
||||
#resonance frequency
|
||||
f4=np.array([410,417])
|
||||
@@ -182,8 +206,7 @@ class MXTuning(Tuning):
|
||||
T4=1/w4
|
||||
num4 = np.poly1d([T4[0]**2,2*T4[0]*d4[0],1])
|
||||
den4 = np.poly1d([T4[1]**2,2*T4[1]*d4[1],1])
|
||||
#mdl= signal.lti(num3, den3) #num denum
|
||||
#bode(mdl)
|
||||
|
||||
|
||||
#resonance frequency
|
||||
f5=np.array([230,233])
|
||||
@@ -205,12 +228,34 @@ class MXTuning(Tuning):
|
||||
numc = np.poly1d([1.])
|
||||
denc = np.poly1d([Tc**2,2*Tc*dc,1])
|
||||
|
||||
|
||||
#simplified current loop 1st order approx
|
||||
wd=2*np.pi*400. #45deg at 360Hz
|
||||
Td=1/wd
|
||||
numd = np.poly1d([1.])
|
||||
dend = np.poly1d([Td,1])
|
||||
|
||||
|
||||
num=num1*num2*num3*num4*num5*numc
|
||||
den=den1*den2*den3*den4*den5*denc
|
||||
mdl= signal.lti(num, den) #num denum
|
||||
print(num)
|
||||
print(den)
|
||||
print(mdl)
|
||||
#print(num);print(den);print(mdl)
|
||||
|
||||
w=np.logspace(0, np.log10(2000), 1000)*2*np.pi
|
||||
|
||||
mdl1c= signal.lti(num1*numc, den1*denc)
|
||||
mdl1d= signal.lti(num1*numd, den1*dend)
|
||||
mdl1= signal.lti(num1, den1)
|
||||
mdl0= signal.lti(num0, den0)
|
||||
|
||||
bode(((mdl,'plant'),
|
||||
(mdl1c,'mdl1c'),
|
||||
(mdl1d,'mdl1d'),
|
||||
(mdl1,'mdl1'),
|
||||
(mdl0,'mdl0'),
|
||||
),w)
|
||||
|
||||
|
||||
d={'num':num.coeffs,'num1':num1.coeffs,'num2':num2.coeffs,'num3':num3.coeffs,'num4':num4.coeffs,'num5':num5.coeffs,'numc':numc.coeffs,
|
||||
'den':den.coeffs,'den1':den1.coeffs,'den2':den2.coeffs,'den3':den3.coeffs,'den4':den4.coeffs,'den5':den5.coeffs,'denc':denc.coeffs}
|
||||
fn=os.path.join(self.baseDir,'model%d.mat'%mot)
|
||||
@@ -218,7 +263,7 @@ class MXTuning(Tuning):
|
||||
scipy.io.savemat(fn, mdict=d)
|
||||
print('save to matlab file:'+fn)
|
||||
|
||||
bode(mdl)
|
||||
#bode(mdl)
|
||||
w=np.logspace(0,np.log10(2000),1000)*2*np.pi
|
||||
w,mag,phase = signal.bode(mdl,w)
|
||||
f=w/(2*np.pi)
|
||||
@@ -596,21 +641,34 @@ def save_figs(fn):
|
||||
#figure.savefig(fn.rsplit('.')[0]+'%d.eps' % i)
|
||||
|
||||
|
||||
def bode(mdl):
|
||||
w,mag,phase = signal.bode(mdl,1000)
|
||||
f=w/(2*np.pi)
|
||||
def bode(mdlLst,w=1000):
|
||||
|
||||
if not type(mdlLst) in (tuple,list):
|
||||
mdlLst=((mdlLst,''),)
|
||||
|
||||
fig = plt.figure()
|
||||
ax1 = fig.add_subplot(2, 1, 1)
|
||||
ax1.semilogx(f,mag,'-') # Bode magnitude plot
|
||||
ax1.yaxis.set_label_text('dB ampl')
|
||||
plt.grid(True)
|
||||
ax2 = fig.add_subplot(2, 1, 2, sharex = ax1)
|
||||
ax2.semilogx(f,phase,'-') # Bode magnitude plot
|
||||
#f=w/(2*np.pi)
|
||||
for mdl,lbl in mdlLst:
|
||||
w_,mag,phase = signal.bode(mdl,w)
|
||||
f_=w_/(2*np.pi)
|
||||
ax1.semilogx(f_, mag, '-') # Bode magnitude plot
|
||||
ax2.semilogx(f_,phase,'-',label=lbl) # Bode phase plot
|
||||
|
||||
|
||||
ax1.yaxis.set_label_text('dB ampl')
|
||||
ax2.yaxis.set_label_text('phase')
|
||||
ax2.xaxis.set_label_text('frequency [Hz]')
|
||||
plt.grid(True)
|
||||
#plt.show()
|
||||
|
||||
ax1.grid(True)
|
||||
ax2.grid(True)
|
||||
if len(mdlLst)>3:
|
||||
ax2.legend(loc='best',ncol=2,prop={'size': 10})
|
||||
else:
|
||||
ax2.legend(loc='best')
|
||||
plt.show(block=False)
|
||||
ax1.set_xlim(f_[0], f_[-1])
|
||||
|
||||
if __name__=='__main__':
|
||||
from argparse import ArgumentParser,RawDescriptionHelpFormatter
|
||||
|
||||
Reference in New Issue
Block a user