def func_tranf(self):
     chebyshev.raizes_unit(self)
     poli_polos = np.poly(self.Sk)
     polos = poli_polos.real
     poli_zeros = list()
     zeros = list()
     
     for i in range(1, self.Nv+1):
         Wz = 1 / np.cos((2*i - 1) * np.pi / (2*self.N))
         poli_zeros.append(complex(0, -Wz))
         poli_zeros.append(complex(0, Wz))
     
     poli_zeros = np.poly(poli_zeros)
     zeros = poli_zeros.real
     aux = polos[-1]
     
     for i in range(0, len(polos)):
         polos[i] = polos[i] * zeros[-1]
     for i in range(0, len(zeros)):
         zeros[i] = zeros[i] * aux
     
     if self.tipo == "PB":
         num, den = signal.lp2lp(zeros, polos, self.Ws)
     elif self.tipo == "PA":
         num, den = signal.lp2hp(zeros, polos, self.Ws)
     elif self.tipo == "PF":
         num, den = signal.lp2bp(zeros, polos, self.Wo, self.Bs)
     elif self.tipo == "RF":
         num, den = signal.lp2bs(zeros, polos, self.Wo, self.Bs)
     H = signal.TransferFunction(num, den)
     self.H = H
     return H
Beispiel #2
0
    def transfunc(self, polos, **kwargs):
        wc = kwargs.get('wc', 0)
        w0 = kwargs.get('w0', 0)
        Bw = kwargs.get('bw', self.Bp)
        ordem = kwargs.get('ord', self.ordem)
        fcn = 0
        if self.tipo == 'lp':
            self.den_norm = np.real(np.poly(polos))
            denm = np.zeros(len(self.den_norm))
            for i in range(0, len(polos) + 1):
                denm[i] = self.den_norm[i] * np.power(wc, i)
            num = denm[-1]
            fcn = signal.TransferFunction(num, denm)
        if self.tipo == 'hp':
            self.den_norm = np.real(np.poly(polos))
            denm = np.zeros(len(polos) + 1)
            for i in range(0, len(polos) + 1):
                denm[i] = self.den_norm[len(polos) - i] * np.power(wc, i)
            num = np.zeros(len(polos) + 1)
            num[0] = denm[0]
            fcn = signal.TransferFunction(num, denm)
        if (self.tipo == 'bp'):
            self.den_norm = np.real(np.poly(polos))
            [num, den] = signal.lp2bp(self.den_norm[-1], self.den_norm, w0, Bw)
            fcn = signal.TransferFunction(num, den)
        if (self.tipo == 'bs'):
            self.den_norm = np.real(np.poly(polos))
            [num, den] = signal.lp2bs(self.den_norm[-1], self.den_norm, w0, Bw)
            fcn = signal.TransferFunction(num, den)

        return fcn
Beispiel #3
0
 def transfunc(self, polos, **kwargs):
     wc = kwargs.get('wc', 0)
     w0 = kwargs.get('w0', 0)
     Bw = kwargs.get('bw', self.Bp)
     ordem = kwargs.get('ord', self.ordem)
     resp = kwargs.get('response', self.tipo)
     G_db = kwargs.get('G', self.G_bp)
     fcn = 0
     if resp == 'lp':
         self.den_norm = np.real(np.poly(polos))
         denm = np.zeros(len(self.den_norm))
         for i in range(0, len(polos) + 1):
             denm[i] = self.den_norm[i] * np.power(wc, i)
         num = denm[-1]
         fcn = signal.TransferFunction((pow(10, -G_db / 20.0)) * num, denm)
     if resp == 'hp':
         self.den_norm = np.real(np.poly(polos))
         denm = np.zeros(len(polos) + 1)
         for i in range(0, len(polos) + 1):
             denm[i] = self.den_norm[len(polos) - i] * np.power(wc, i)
         num = np.zeros(len(polos) + 1)
         num[0] = denm[0]
         fcn = signal.TransferFunction((pow(10, -G_db / 20.0)) * num, denm)
     if (resp == 'bp'):
         self.den_norm = np.real(np.poly(polos))
         [num, den] = signal.lp2bp(self.den_norm[-1], self.den_norm, w0, Bw)
         print('EMBAIXO')
         print(self.den_norm)
         fcn = signal.TransferFunction((pow(10, -G_db / 20.0)) * num, den)
     if (resp == 'bs'):
         self.den_norm = np.real(np.poly(polos))
         [num, den] = signal.lp2bs(self.den_norm[-1], self.den_norm, w0, Bw)
         fcn = signal.TransferFunction((pow(10, -G_db / 20.0)) * num, den)
     self.fcn = fcn
     return fcn
Beispiel #4
0
 def TransfFreq(self, zeros, polos, Kp):
     if self.tipo == "PB":
         num, den = signal.lp2lp(zeros, polos, Kp)
     elif self.tipo == "PA":
         num, den = signal.lp2hp(zeros, polos, Kp)
     elif self.tipo == "PF":
         num, den = signal.lp2bp(zeros, polos, Kp, self.Bp)
     elif self.tipo == "RF":
         num, den = signal.lp2bs(zeros, polos, Kp, self.Bp)
     H = signal.TransferFunction(num, den)
     return H
    def func_tranf(self):
        chebyshev.raizes_unit(self)
        poli = np.poly(self.Sk)
        coef = poli.real
        D = list()
        aux = 0
        for i in range(-self.N, 1):
            D.append(coef[aux] * pow(self.Wp, i))
            aux = aux + 1

        if self.N % 2 != 0:
            if self.tipo == "PB":
                num, den = signal.lp2lp(coef[-1], coef, self.Wp)
                H = signal.TransferFunction(num[-1], den)
            elif self.tipo == "PA":
                num, den = signal.lp2hp(coef[-1], coef, self.Wp)
                H = signal.TransferFunction(num, den)
            elif self.tipo == "PF":
                num, den = signal.lp2bp(coef[-1], coef, self.Wo, self.Bp)
                H = signal.TransferFunction(num, den)
            elif self.tipo == "RF":
                num, den = signal.lp2bs(coef[-1], coef, self.Wo, self.Bp)
                H = signal.TransferFunction(num, den)
        else:
            aux = 1 / np.sqrt(1 + self.e**2)
            if self.tipo == "PB":
                num, den = signal.lp2lp(coef[-1], coef, self.Wp)
                H = signal.TransferFunction(num * aux, den)
            elif self.tipo == "PA":
                num, den = signal.lp2hp(coef[-1], coef, self.Wp)
                H = signal.TransferFunction(num * aux, den)
            elif self.tipo == "PF":
                num, den = signal.lp2bp(coef[-1], coef, self.Wo, self.Bp)
                H = signal.TransferFunction(num * aux, den)
            elif self.tipo == "RF":
                num, den = signal.lp2bs(coef[-1], coef, self.Wo, self.Bp)
                H = signal.TransferFunction(num * aux, den)
        self.H = H
        return H
Beispiel #6
0
 def transfunc(self, polos, **kwargs):
     wp = kwargs.get('wp', 0)
     w0 = kwargs.get('w0', 0)
     Bw = kwargs.get('bw', self.Bp)
     ordem = kwargs.get('ord', self.ordem())
     resp = kwargs.get('response', self.tipo)
     G_db = kwargs.get('G', self.G_bp)
     fcn = 0
     if resp == 'lp':
         self.den_norm = np.real(np.poly(polos))
         denm = np.zeros(len(self.den_norm))
         for i in range(0, len(polos) + 1):
             denm[i] = self.den_norm[i] * np.power(wp, i)
         if (ordem % 2 == 0):
             num = denm[-1] * (1 / np.sqrt(1 + np.power(self.eps, 2)))
         else:
             num = denm[-1]
         fcn = signal.TransferFunction(pow(10, -G_db / 20.0) * num, denm)
     if resp == 'hp':
         self.den_norm = np.real(np.poly(polos))
         denm = np.zeros(len(polos) + 1)
         for i in range(0, len(polos) + 1):
             denm[i] = self.den_norm[len(polos) - i] * np.power(wp, i)
         num = np.zeros(len(polos) + 1)
         if (self.ordem() % 2 == 0):
             num[0] = denm[0] * (1 / np.sqrt(1 + np.power(self.eps, 2)))
         else:
             num[0] = denm[0]
         fcn = signal.TransferFunction(pow(10, -G_db / 20.0) * num, denm)
     if (resp == 'bp'):
         self.den_norm = np.real(np.poly(polos))
         [num, den] = signal.lp2bp(self.den_norm[-1], self.den_norm, w0, Bw)
         if (self.ordem() % 2 == 0):
             num[0] = num[0] * (1 / np.sqrt(1 + np.power(self.eps, 2)))
         else:
             num[0] = num[0]
         fcn = signal.TransferFunction(num, den)
     if (resp == 'bs'):
         self.den_norm = np.real(np.poly(polos))
         [num, den] = signal.lp2bs(self.den_norm[-1], self.den_norm, w0, Bw)
         if (self.ordem() % 2 == 0):
             num = num[::] * (1 / np.sqrt(1 + np.power(self.eps, 2)))
         else:
             num[-1] = num[-1]
         fcn = signal.TransferFunction(num, den)
     self.fcn = fcn
     return fcn
Beispiel #7
0
    def func_tranf(self):
        butterworth.raizes_unit(self)
        poli = list()
        poli = np.poly(self.Sk)
        coefReal = poli.real

        if self.tipo == "PB":
            num, den = signal.lp2lp(coefReal[-1], coefReal, self.Wc)
            H = signal.TransferFunction(num, den)
        elif self.tipo == "PA":
            num, den = signal.lp2hp(coefReal[-1], coefReal, self.Wc)
            H = signal.TransferFunction(num, den)
        elif self.tipo == "PF":
            num, den = signal.lp2bp(coefReal[-1], coefReal, self.Wo, self.Bw)
            H = signal.TransferFunction(num, den)
        elif self.tipo == "RF":
            num, den = signal.lp2bs(coefReal[-1], coefReal, self.Wo, self.Bw)
            H = signal.TransferFunction(num, den)
        self.H = H
        return H
Beispiel #8
0
 def fun_trans(self):
     k = self.raizes()
     wc = self.freq_corte()
     Bw = (wc[2] - wc[1])
     self.nden = np.real(np.poly(k))  #denominador normalizado
     den = np.zeros(
         len(k))  #criando o array para o denominador transformado
     if self.tipo == 'Passa-baixa':
         [num, den] = sig.lp2lp(self.nden[-1], self.nden, wc[0])
         FT = sig.TransferFunction(num,
                                   den)  #gerando a FT para a freq. de corte
     if self.tipo == 'Passa-alta':
         [num, den] = sig.lp2hp(self.nden[-1], self.nden, wc[0])
         FT = sig.TransferFunction(num, den)
     if self.tipo == 'Passa-faixa':
         [num, den] = sig.lp2bp(self.nden[-1], self.nden, wc[0], Bw)
         FT = sig.TransferFunction(num, den)
     if self.tipo == 'Rejeita-faixa':
         [num, den] = sig.lp2bs(self.nden[-1], self.nden, wc[0], Bw)
         FT = sig.TransferFunction(num, den)
     return FT
Beispiel #9
0
 def fun_trans(self):
     raizes = self.raizes()
     wc = self.freq_corte()
     n = self.ordem()
     eps = self.epso()
     nden = np.real(np.poly(raizes))
     if (n % 2 == 0):
         nnum = nden[-1] * (1 / np.sqrt(1 + np.power(eps, 2)))
     else:
         nnum = nden[-1]
     if self.tipo == 'Passa-baixa':
         [num, den] = sig.lp2lp(nnum, nden, wc)
     if self.tipo == 'Passa-alta':
         [num, den] = sig.lp2hp(nnum, nden, wc)
     if self.tipo == 'Passa-faixa':
         Bw = self.Wp2 - self.Wp1
         [num, den] = sig.lp2bp(nnum, nden, wc, Bw)
     if self.tipo == 'Rejeita-faixa':
         Bw = self.Wp2 - self.Wp1
         [num, den] = sig.lp2bs(nnum, nden, wc, Bw)
     FT = sig.TransferFunction(num, den)
     return FT
Beispiel #10
0
from scipy import signal
import matplotlib.pyplot as plt

lp = signal.lti([1.0], [1.0, 1.5])
bs = signal.lti(*signal.lp2bs(lp.num, lp.den))
w, mag_lp, p_lp = lp.bode()
w, mag_bs, p_bs = bs.bode(w)
plt.plot(w, mag_lp, label='Lowpass')
plt.plot(w, mag_bs, label='Bandstop')
plt.semilogx()
plt.grid()
plt.xlabel('Frequency [rad/s]')
plt.ylabel('Magnitude [dB]')
plt.legend()