Exemplo n.º 1
0
    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
Exemplo n.º 3
0
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()
Exemplo n.º 5
0
# 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'))
Exemplo n.º 7
0
        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'))
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
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))),
Exemplo n.º 10
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()
Exemplo n.º 11
0
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)),
Exemplo n.º 13
0
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'))
Exemplo n.º 14
0
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)])