def plot_impedance(self, diag_only:bool=True, axs=None): """ Parameters ---------- diag_only : bool, optional Only plot diagonal elements. The default is True. axs : matplotlib.axes._subplots.AxesSubplot, optional Raises ------ NotImplementedError DESCRIPTION. Returns ------- None. """ if axs is None: fig, axs = plt.subplots() if diag_only: for idx, dof in enumerate(self.hydro.radiating_dof.data.tolist()): Zi_frd = control.frd(self.hydro.Zi[:,idx,idx], self.hydro.omega) control.bode_plot(Zi_frd, self.hydro.omega, dB=True, Hz=True, marker='.', label=dof) plt.legend() else: raise NotImplementedError() # TODO
def sys_dict(): sdict = {} sdict['ss'] = ct.ss([[-1]], [[1]], [[1]], [[0]]) sdict['tf'] = ct.tf([1], [0.5, 1]) sdict['tfx'] = ct.tf([1, 1], [1]) # non-proper transfer function sdict['frd'] = ct.frd([10 + 0j, 9 + 1j, 8 + 2j], [1, 2, 3]) sdict['lio'] = ct.LinearIOSystem(ct.ss([[-1]], [[5]], [[5]], [[0]])) sdict['ios'] = ct.NonlinearIOSystem(sdict['lio']._rhs, sdict['lio']._out, 1, 1, 1) sdict['arr'] = np.array([[2.0]]) sdict['flt'] = 3. return sdict
def sys_dict(): sdict = {} sdict['ss'] = ct.StateSpace([[-1]], [[1]], [[1]], [[0]]) sdict['tf'] = ct.TransferFunction([1], [0.5, 1]) sdict['tfx'] = ct.TransferFunction([1, 1], [1]) # non-proper TF sdict['frd'] = ct.frd([10 + 0j, 9 + 1j, 8 + 2j, 7 + 3j], [1, 2, 3, 4]) sdict['lio'] = ct.LinearIOSystem(ct.ss([[-1]], [[5]], [[5]], [[0]])) sdict['ios'] = ct.NonlinearIOSystem(sdict['lio']._rhs, sdict['lio']._out, inputs=1, outputs=1, states=1) sdict['arr'] = np.array([[2.0]]) sdict['flt'] = 3. return sdict
X=np.load('output_data_vel.npy') # plt.plot(X[:1000,2]) dt = X[1,0]-X[0,0] N = int(X.shape[0]/2) freqs = np.arange(N)/(2*N*dt) wf = freqs*2*np.pi idx = np.logspace(0,3,100).astype(int) w = wf[idx] ''' w = np.logspace(-3,2,100) s = 1j*w ft_vel = lambda x,y,z: -q/(rho*cp)*(v*np.sqrt(x**2 + y**2 + z**2) + (-x)*np.sqrt(4*a*s + v**2))*np.exp(-(v*(-x) + np.sqrt(4*a*s + v**2)*np.sqrt(x**2 + y**2 + z**2))/(2*a))/(4*np.pi*a**2*np.sqrt(4*a*s + v**2)*np.sqrt(x**2 + y**2 + z**2)) R = lambda x,y,z: np.sqrt(x**2+y**2+z**2) D = lambda s: np.sqrt(4*a*s + v**2) XX = lambda x,y,z,s: (v*R(x,y,z) - x*D(s))*np.exp(-R(x,y,z)*D(s)/(2*a))/D(s) ft_vel2 = lambda x,y,z: -q/(rho*cp)*np.exp(v*x/(2*a))/(4*s*np.pi*a**2*R(x,y,z))*(XX(x,y,z,s)-XX(x,y,z,0)) ops = ((-.01,0,0),(.01,0,0),(.02,0,0),(.04,0,0),(0,-.01,0),(0,.01,0)) #U = np.fft.fft(X[:,2]) for i in range(len(ops)): #H1 = U * np.fft.fft(X[:,i]) / U**2 plt.figure('Bode T/Vel ' + str(ops[i])) control.bode_plot((control.frd(ft_vel2(*ops[i]), w),control.frd(ft_vel(*ops[i]), w)),w, dB=True) plt.legend(('fdt2', 'fdt')) plt.show()
# ft_vel_a4 = lambda x,y: ft_vel1(x,y) + ft_vel4(x,y,aa1[4]) # ft_vel_a5 = lambda x,y: ft_vel1(x,y) + ft_vel4(x,y,aa1[5]) # pole = (4*a*b + v**2)/a1 # pole_log = np.log10(pole) # print('pole', pole, pole_log) # ft_vel6 = lambda x,y: q*np.exp(v*x/(2*a))/(4*np.pi*K*a*s)*(v*kv(0,R(x,y)*D(s)/(2*a)) - v*kv(0,R(x,y)*D(0)/(2*a))\ # + x*(4*a*b + v**2)*kv(0,R(x,y)*D(0)/(2*a))/(4*a) - x*(4*a*b + v**2)*kv(0,R(x,y)*D(0)/(2*a))/(4*a)/(4*a/(4*a*b + v**2)*s + 1)) # ft_vel7 = lambda x,y: q*np.exp(v*x/(2*a))/(4*np.pi*K*a*s)*(v*kv(0,R(x,y)*D(s)/(2*a)) - v*kv(0,R(x,y)*D(0)/(2*a))\ # + (4*a*b + v**2)*kv(0,R(x,y)*D(0)/(2*a)) - (4*a*b + v**2)*kv(0,R(x,y)*D(0)/(2*a))/(x**2/(4*a*b + v**2)*s + 1)) ft_vel0 = lambda x,y: q*(-v*R(x,y)*kv(1, R(x,y)*D(0)/(2*a)) + x*D(0)*kv(0, R(x,y)*D(0)/(2*a)))*np.exp(v*x/(2*a))/(4*np.pi*K*a*D(0)) if False: H1 = U * np.fft.fft(X[:, 4]) / U ** 2 control.bode_plot((control.frd(H1[idx], w),control.frd(ft_vel(*ops[1]), w)),w, dB=True) ft_vel1 = lambda x, y: q * np.exp(v * x / (2 * a)) / (4 * np.pi * K * a * s) * ( v * kv(0, R(x, y) * D(s) / (2 * a)) - v * kv(0, R(x, y) * D(0) / (2 * a))\ + x * kv(0, R(x, y) * D(0) / (2 * a))/(R(x, y) * D(s))) control.bode_plot(control.frd(ft_vel1(.01,0), w), w, dB=True) U = np.fft.fft(X[:,2]) for i in range(3,X.shape[1]-4): H1 = U * np.fft.fft(X[:,i]) / U**2 plt.figure('Bode T/Pow ' + str(ops[i - 3])) control.bode_plot((control.frd(H1[idx], w), #control.frd(ft_vel1(*ops[i - 3]), w), #control.frd(ft_vel8(*ops[i - 3]), w)),w, dB=True) # control.frd(ft_vel_a1(*ops[i - 3]), w),control.frd(ft_vel_a2(*ops[i - 3]), w), # control.frd(ft_vel61(*ops[i - 3]), w), control.frd(ft_vel62(*ops[i - 3]), w), # control.frd(ft_vel_a5(*ops[i - 3]), w), control.frd(ft_vel3(*ops[i - 3]), w), control.frd(ft_vel6(*ops[i - 3]), w)),w, dB=True) plt.legend(('fem', 'fdt3', 'fdt6'))
wf = freqs*2*np.pi idx = np.logspace(0,3,100).astype(int) w = wf[idx] s = 1j*w ft_pot = lambda x,y,z: 1/(rho*cp)*np.exp(-(v*x+np.sqrt((x**2+y**2+z**2)*(4*a*s+v**2)))/(2*a))/(2*np.pi*a*np.sqrt(x**2+y**2+z**2)) Mf=None af=None frds_fdt=[] frds_fem=[] U = np.fft.fft(X[:,1]) for i in range(3,X.shape[1]): H1 = U * np.fft.fft(X[:,i]) / U**2 plt.figure('Bode T/Pow ' + str(ops[i - 3])) control.bode_plot((control.frd(H1[idx], w),control.frd(ft_pot(*ops[i - 3]), w)),w, dB=True) plt.legend(('fem', 'fdt')) # frds_fem.append(control.frd(H1[:N], wf)) # frds_fdt.append(control.frd(ft_pot(*ops[i - 3]), wf)) # # H1 = H1[:N] # # Mf = np.vstack((Mf, 20*np.log10(abs(H1)))) if Mf is not None else 20*np.log10(abs(H1)) # # Mf = np.vstack((Mf, abs(H1))) if Mf is not None else abs(H1) # af = np.vstack((af, np.angle(H1)*180/np.pi)) if af is not None else np.angle(H1)*180/np.pi plt.figure('Magnitude T/Pow') for i in range(X.shape[1]-3): plt.semilogx(wf, Mf[i,:]) plt.legend(('x=-.01','x=.01','x=.02','x=.04','y=-.005','y=.005','y=.01','z=.005'))
2 * a)) / (s * (R(x, y, z) - x) + 1) - np.exp(-R(x, y, z) * D(s) / (2 * a))) ft_vel12 = lambda x, y, z: q * v * (R(x, y, z) - x) * np.exp(v * x / ( 2 * a)) / (4 * s * np.pi * a * k * R(x, y, z) * R(x, y, z)) * (np.exp(-R( x, y, z) * D(s) / (2 * a)) - np.exp(-R(x, y, z) * v / (2 * a))) ft_vel13 = lambda x, y, z: q * v * v * np.exp(v * x / (2 * a)) / ( 4 * s * np.pi * a * k * R(x, y, z)) * (np.exp(-R(x, y, z) * D(s) / ( 2 * a)) / np.sqrt(-2 * s * x * v + v**2) - np.exp(-R(x, y, z) * v / (2 * a)) / v) U = np.fft.fft(X[:, 2]) for i in range(3, X.shape[1]): H1 = U * np.fft.fft(X[:, i]) / U**2 plt.figure('Bode T/Vel ' + str(ops[i - 3])) control.bode_plot( (control.frd(H1[idx], w), control.frd( ft_vel3(*ops[i - 3]), w), control.frd(ft_vel11(*ops[i - 3]), w), control.frd(ft_vel12(*ops[i - 3]), w), control.frd(ft_vel13(*ops[i - 3]), w)), w, dB=True) plt.legend(('fem', 'fdt3', 'fdt11', 'fdt12', 'fdt13')) # exit(0) # # U = np.fft.fft(X[:,2]) # for i in range(3,X.shape[1]): # H1 = U * np.fft.fft(X[:,i]) / U**2 # plt.figure('Bode T/Vel ' + str(ops[i - 3])) # control.bode_plot((control.frd(H1[idx], w)), w, dB=True) # plt.legend(('fem'))
def set_module_18_data(self, module=None): gain = self.OP_gain_spin_2.value() f = self.frequencySpin_OP_lowpass_2.value() C1 = 4.7e-3 k = 100 / (f * C1) R2 = 1.306e3 R1 = R2 / (10**(gain / 20)) R3 = R1 * R2 / (R1 + R2) num = [-764.6, 0, 1.111e5] # 构造根据gain获得C2电容值传递函数 den = [1, 0, 1528] Gd = control.tf(num, den) x = list(range(21)) y = control.frd(Gd, x) C = float(y.eval(gain).real) if module == 'bessel': K = k * 1 r1 = R1 * K r2 = R2 * K r3 = R3 * K C2 = C * 13 / 68 * 1e-9 self.two_order_lowpass_data_2['R1_value'] = R_value2map_2(r1) self.two_order_lowpass_data_2['R2_value'] = R_value2map_2(r2) self.two_order_lowpass_data_2['R3_value'] = R_value2map_2(r3) self.two_order_lowpass_data_2['C2_value'] = c_value2map(C2) elif module == 'butterworth': K = k * 0.9 r1 = R1 * K r2 = R2 * K r3 = R3 * K C2 = C * 18 / 68 * 1e-9 self.two_order_lowpass_data_2['R1_value'] = R_value2map_2(r1) self.two_order_lowpass_data_2['R2_value'] = R_value2map_2(r2) self.two_order_lowpass_data_2['R3_value'] = R_value2map_2(r3) self.two_order_lowpass_data_2['C2_value'] = c_value2map(C2) elif module == 'chebyshev-1': K = k * 0.85 r1 = R1 * K r2 = R2 * K r3 = R3 * K C2 = C * 24 / 68 * 1e-9 self.two_order_lowpass_data_2['R1_value'] = R_value2map_2(r1) self.two_order_lowpass_data_2['R2_value'] = R_value2map_2(r2) self.two_order_lowpass_data_2['R3_value'] = R_value2map_2(r3) self.two_order_lowpass_data_2['C2_value'] = c_value2map(C2) elif module == 'chebyshev-2': K = k * 0.8 r1 = R1 * K r2 = R2 * K r3 = R3 * K C2 = C * 50 / 68 * 1e-9 self.two_order_lowpass_data_2['R1_value'] = R_value2map_2(r1) self.two_order_lowpass_data_2['R2_value'] = R_value2map_2(r2) self.two_order_lowpass_data_2['R3_value'] = R_value2map_2(r3) self.two_order_lowpass_data_2['C2_value'] = c_value2map(C2) elif module == 'chebyshev-3': K = k * 0.75 r1 = R1 * K r2 = R2 * K r3 = R3 * K C2 = C * 1e-9 self.two_order_lowpass_data_2['R1_value'] = R_value2map_2(r1) self.two_order_lowpass_data_2['R2_value'] = R_value2map_2(r2) self.two_order_lowpass_data_2['R3_value'] = R_value2map_2(r3) self.two_order_lowpass_data_2['C2_value'] = c_value2map(C2) else: pass
w = wf[idx] s = 1j * w ft_pot = lambda x, y, z: 1 / (rho * cp) * np.exp(-(v * (-x) + np.sqrt( (x**2 + y**2 + z**2) * (4 * a * s + v**2))) / (2 * a)) / ( 2 * np.pi * a * np.sqrt(x**2 + y**2 + z**2)) import fem3d_2ss fem2ss = fem3d_2ss.Fem3d_fenics('data/v2/16x8x2/') # fem2ss = fem3d_2ss.Fem3d_fenics('data/v2/16x8x2/') U = np.fft.fft(X[:, 1]) for i in range(3, X.shape[1]): H1 = U * np.fft.fft(X[:, i]) / U**2 plt.figure('Bode T/Pow ' + str(ops[i - 3])) control.bode_plot( (control.frd(H1[idx], w), control.frd(ft_pot(*ops[i - 3]), w), fem2ss.get_ss(ops[i - 3] + (.02, .02, 0))), w, dB=True) plt.legend(('fem', 'fdt', 'ss')) U = np.fft.fft(X[:, 1]) H1 = U * np.fft.fft(X[:, 7]) / U**2 H2 = U * np.fft.fft(X[:, 8]) / U**2 plt.figure('Bode T/Pow simetricity comparative 1') control.bode_plot( ( control.frd(H1[idx], w), control.frd(ft_pot(*ops[4]), w), #fem2ss.get_ss(ops[4]+(.02,.02,0)), control.frd(H2[idx], w), control.frd(ft_pot(*ops[5]), w)), #fem2ss.get_ss(ops[5]+(.02,.02,0))),
self.H1 = H1[idx] self.H2 = H2[idx] fem1dp.init_ss() fem1df.init_ss() frdPow = FrdSimulPow() w = frdPow.w s = 1j * w ft_pot = lambda x: (1 / (rho * cp) * (np.exp( (1 / (2 * a) * (x * v - np.sqrt(x**2 * (v**2 + 4 * a * b + 4 * a * s)))))) / np.sqrt(v**2 + 4 * a * b + 4 * a * s)) plt.figure('Bode pot 1') control.bode_plot([ control.frd(frdPow.H1, w), control.frd(ft_pot(x1), w), fem1dp.ss_pot1, fem1df.ss_pot1 ], w, dB=True) plt.legend(['fem', 'ft', 'ssp', 'ssf']) plt.figure('Bode pot 2') control.bode_plot([ control.frd(frdPow.H2, w), control.frd(ft_pot(x2), w), fem1dp.ss_pot2, fem1df.ss_pot2 ], w, dB=True) plt.legend(['fem', 'ft', 'ssp', 'ssf']) frdVel = FrdSimulVel()
w = np.logspace(-3,1,100) k=24.0 rho=7925 cp=460 v=0.005 a=k/(rho*cp) s = 1j*w ft_pot = lambda x,y,z: 1/(rho*cp)*np.exp(-(v*(-x)+np.sqrt((x**2+y**2+z**2)*(4*a*s+v**2)))/(2*a))/(2*np.pi*a*np.sqrt(x**2+y**2+z**2)) pts = ((0,0.003,0),(0,-0.003,0),(0,0.005,0),(0,-0.005,0),(0,0.010,0),(0,-0.010,0)) fem2ss = fem3d_2ss.Fem3d_fenics('data/v5/irregular/') fem2ss_32 = fem3d_2ss.Fem3d_fenics('data/v5/32x16x4/1500/') for p in pts: plt.figure('Bode Comp ' + str(p)) control.bode_plot((fem2ss.get_ss(inp + p), fem2ss_32.get_ss(inp + p), control.frd(ft_pot(*p), w)), w, dB=True) plt.legend(('irregular', '32', 'ft')) # fem2ss = fem3d_2ss.Fem3d_fenics('data/v5/32x16x4/1500/') fem2ss = fem3d_2ss.Fem3d_fenics('./') pts = ((0,0.003,0),(0,-0.003,0),(0,0.005,0),(0,-0.005,0),(0,0.010,0),(0,-0.010,0)) systemsQ = list() systemsV = list() legends = list() for p in pts: systemsQ.append(fem2ss.get_ss(inp + p)) systemsV.append(fem2ss.get_ss_v(inp + p))
C = np.zeros(self.X.size) C[np.where(self.X == xo)[0][0]] = 1 return control.ss(self.A, self.Bv, C, 0) fem1df = Fem1d_fenics() w = np.logspace(-3, 3, 100) s = 1j * w ft_pot = lambda x: (1 / (rho * cp) * (np.exp( (1 / (2 * a) * (x * v - np.sqrt(x**2 * (v**2 + 4 * a * b + 4 * a * s)))))) / np.sqrt(v**2 + 4 * a * b + 4 * a * s)) for xo in (.015, .02, .03, .04): plt.figure('Bode pot xo=' + str(xo)) control.bode_plot((control.frd(ft_pot(xo), w), fem1df.get_ss(xo + xi)), w, dB=True) ft_vel = lambda x: (q / k * (np.exp((v * x) / (2 * a)) * ( np.exp(-(x * np.sqrt(v**2 + 4 * a * b)) / (2 * a)) - np.exp(-(x * np.sqrt(v**2 + 4 * a * b + 4 * a * s)) / (2 * a)) - (v * np.exp(-(x * np.sqrt(v**2 + 4 * a * b)) / (2 * a))) / np.sqrt(v**2 + 4 * a * b) + (v * np.exp(-(x * np.sqrt(v**2 + 4 * a * b + 4 * a * s)) / (2 * a))) / np.sqrt(v**2 + 4 * a * b + 4 * a * s))) / (2 * s)) for xo in (.015, .02, .03, .04): plt.figure('Bode vel xo=' + str(xo)) control.bode_plot((control.frd(ft_vel(xo), w), fem1df.get_ss_v(xo + xi)),
a = k / (rho * cp) h = 100000 Lz = 1 b = 2 * h * a / k / Lz ops = np.load('output_points_2d.npy') X = np.load('output_data_pow_2d.npy') # plt.plot(X[:1000,2]) dt = X[1, 0] - X[0, 0] N = int(X.shape[0] / 2) freqs = np.arange(N) / (2 * N * dt) wf = freqs * 2 * np.pi idx = np.logspace(0, int(np.log10(N)), 100).astype(int) w = wf[idx] s = 1j * w ft_pot = lambda x, y: np.exp(v * x / (2 * a)) / (2 * np.pi * k) * kv( 0, np.sqrt((x**2 + y**2) * (4 * a * s + 4 * a * b + v**2)) / (2 * a)) U = np.fft.fft(X[:, 1]) for i in range(3, X.shape[1]): H1 = U * np.fft.fft(X[:, i]) / U**2 plt.figure('Bode T/Pow ' + str(ops[i - 3])) control.bode_plot( (control.frd(H1[idx], w), control.frd(ft_pot(*ops[i - 3]), w)), w, dB=True) plt.legend(('fem', 'fdt'))
k=24.0 rho=7925 cp=460 v=0.002 a=k/(rho*cp) x=.01 y=0 z = 0 q=500 dl=0.001 w = np.logspace(-3,1,100) s = 1j*w ft_pot = lambda x,y,z: 1/(rho*cp)*np.exp(-(v*x+np.sqrt((x**2+y**2+z**2)*(4*a*s+v**2)))/(2*a))/(2*np.pi*a*np.sqrt(x**2+y**2+z**2)) plt.figure('Bode T_i/power') control.bode_plot([control.frd(ft_pot(dl,.0,0), w),control.frd(ft_pot(-dl,.0,0), w),control.frd(ft_pot(.0,dl,0), w),control.frd(ft_pot(.0,0,dl), w),\ control.frd(ft_pot(.0,-dl,0), w),control.frd(ft_pot(.0,0,-dl), w)], w, dB=True) plt.legend(['x='+str(dl)+'','x=-'+str(dl)+'','y='+str(dl)+'','z='+str(dl)+'','y=-'+str(dl)+'','z=-'+str(dl)+'']) plt.figure('Bode T_i/speed') ft_vel = lambda x,y,z: -q*(v*np.sqrt(x**2 + y**2 + z**2) + x*np.sqrt(4*a*s + v**2))*np.exp(-(v*x + np.sqrt(4*a*s + v**2)*np.sqrt(x**2 + y**2 + z**2))/(2*a))/(4*np.pi*a**2*np.sqrt(4*a*s + v**2)*np.sqrt(x**2 + y**2 + z**2)) control.bode_plot([control.frd(ft_vel(dl,.0,0), w),control.frd(ft_vel(-dl,.0,0), w),control.frd(ft_vel(.0,dl,0), w),control.frd(ft_vel(.0,0,dl), w),\ control.frd(ft_vel(.0,-dl,0), w),control.frd(ft_vel(.0,0,-dl), w)], w, dB=True) plt.legend(['x='+str(dl)+'','x=-'+str(dl)+'','y='+str(dl)+'','z='+str(dl)+'','y=-'+str(dl)+'','z=-'+str(dl)+''])ç plt.figure('Bodes') control.bode_plot([control.frd(ft_pot(.0,dl,0), w),control.frd(ft_vel(.0,dl,0), w),\ control.frd(ft_pot(.0,-dl,0), w),control.frd(ft_vel(.0,-dl,0), w)], w, dB=True) plt.legend(['pot y='+str(dl)+'','vel y='+str(dl)+'','pot y=-'+str(dl)+'','vel y=-'+str(dl)])