Está en la página 1de 13

Untitled2

June 5, 2020

1 Proyecto: Filtros Activos


1.0.1 Alumno: Heber Guzman.
1.1 Objetivos:
Diseñar, comprobar mediante software de simulación, implementar y medir un filtro pasa-bajos con
topología Sallen-Key para señales de audiofrecuencia.

1.2 Desarrollo:
En el siguiente diseno estara desarroyado utilizando la topologia sallen-key, mediante las siguientes
especificaciones: 1. Filtro pasa bajos de orden 4 con aproximación de Chebychev . 2. Frecuencia de
paso: 4 Khz 3. Atenuación máxima en la banda pasante: 1 dB 4. Ganancia en corriente continua:
0 dB
Utilizando la aproximacion de chebyshev de orden 4 hacemos uso de la tabla factorizada de 1dB
para graficar la siguiente funcion de transferencia .

0.279072
H1 (s) =
(s2 + 0.279072s + 0.986505)(s2 + 0.673739s + 0.279398)

[96]: import sympy as sym


import numpy as np
import pylab as py
import scipy.signal as sg
%config InlineBackend.figure_formats=['pdf']

num1 = py.array([0.279072])
den1 = py.array([1,0.279072,0.986505])

num2 = py.array([1])
den2 = py.array([1,0.673739,0.279398])

num = np.polymul(num1,num2)
den = np.polymul(den1,den2)

w = py.logspace(-1,1,1000)

1
(w1, mag1, phi1) = sg.bode((num,den),w)

py.subplot(2,1,1)
py.semilogx(w1,mag1,'r')
py.grid()
py.ylabel('Mag[dB]')

py.subplot(2,1,2)
py.semilogx(w1,phi1,'r')
py.grid()
py.ylabel('Fase[$^\circ$]')
py.xlabel('$\omega$ [rad\sec]')

[96]: Text(0.5,0,'$\\omega$ [rad\\sec]')

0
Mag[dB]

50

10 1 100 101
0
100
Fase[ ]

200
300
10 1 100 101
[rad\sec]

[97]: from PIL import Image


Image.open('che.png')
[97]:

2
Ahora procederemos a calcular los valores de ω0 y Q
√ √
en donde ω0 = b y Q = ab entonces

√ 0.986505
ω01 = 0.986505 = 0.9932295 y Q1 = = 3.559
0.279072

√ 0.279398
ω02 = 0.279398 = 0.52858 y Q2 = = 0.78454
0.673739
Utlizando la siguiente exprecion

Gω02
HLP (s) =
s2 + ωQ0 s + ω02

con los valores obtenidos anteriormente,exponemos cada binomio y graficamos la


repuesta de cada binomio individualemte.
Para
0.9865052
HLP (s) =
s2 + 3.559044191862056 + 0.9865052
obtnemos la siguiente grafica.

[98]: import sympy as sym


import numpy as np
import pylab as py
import scipy.signal as sg
%config InlineBackend.figure_formats=['pdf']

num = py.array([0.986505**2])
den = py.array([1,3.559044191862056,0.986505**2])

3
w = py.logspace(-1,1,1000)

(w1, mag1, phi1) = sg.bode((num,den),w)

py.subplot(2,1,1)
py.semilogx(w1,mag1,'r')
py.grid()
py.ylabel('Mag[dB]')

py.subplot(2,1,2)
py.semilogx(w1,phi1,'r')
py.grid()
py.ylabel('Fase[$^\circ$]')
py.xlabel('$\omega$ [rad\sec]')

[98]: Text(0.5,0,'$\\omega$ [rad\\sec]')

0
Mag[dB]

20

40
10 1 100 101
50
Fase[ ]

100
150
10 1 100 101
[rad\sec]

Para el segundo polinomio

0.52858111960228022
HLP (s) =
s2 + 0.5285811196022802 + 0.52858111960228022

4
[99]: import sympy as sym
import numpy as np
import pylab as py
import scipy.signal as sg
%config InlineBackend.figure_formats=['pdf']

num = py.array([0.5285811196022802**2])
den = py.array([1,0.52858111960228026,0.5285811196022802**2])

w = py.logspace(-1,1,1000)

(w1, mag1, phi1) = sg.bode((num,den),w)

py.subplot(2,1,1)
py.semilogx(w1,mag1,'r')
py.grid()
py.ylabel('Mag[dB]')

py.subplot(2,1,2)
py.semilogx(w1,phi1,'r')
py.grid()
py.ylabel('Fase[$^\circ$]')
py.xlabel('$\omega$ [rad\sec]')

[99]: Text(0.5,0,'$\\omega$ [rad\\sec]')

0
Mag[dB]

20

40

10 1 100 101

50
Fase[ ]

100
150
10 1 100 101
[rad\sec]

5
2 Diseño
2.0.1 Metodo 1:
El primer metodo de diseño establece que C1 = C2 = 1f Y Ra = Rb = R = 1K y para
los valores de R1 = ωQ0 y R2 = ω01Q para esto se utilizara los valores calculados
parsa cada estapa de ω0 y Q.
Para la primera etapa R1 = 3.55904419 1
0.9932295 = 3.58,R2 = 3.55904419∗0.9932295 = 0.2828 Para la
0.784548793527286 1
segunda etapa R1 = 0.5285811196022802 = 1.48,R2 = 0.784548793527286∗0.5285811196022802 = 2.41
Filtro S-K normalizado.
[100]: Image.open('ds2.png')
[100]:

2.0.2 Metodo 2:
El primer metodo de diseño establece que R1 = R2 = 1Ohm Y Ra = Rb = R =
1K y para los valores de R1 = 2Q 1
ω0 y R2 = 2ω0 Q para esto se utilizara los valores
calculados parsa cada estapa de ω0 y Q. Para la primera etapa C1 = 2∗3.559044190.9932295 =
1
7.16,C2 = 2∗3.55904419∗0.9932295 = 0.141
2∗0.784548793527286
Para la segunda etapa C1 = 0.5285811196022802 = 2.96,C2 =
1
2∗0.784548793527286∗0.5285811196022802 = 1.2

[101]: Image.open('d4.png')
[101]:

6
2.1 Comparación.
Se procederá a comparar los 2 métodos con la respuesta en frecuencia del
polinomio de chebyshev factorizado para comprobar si el modelo utilizado es el
correcto.

2.1.1 Modelo 1.
[102]: import pandas as pd
import pylab as py
import matplotlib.pyplot as plt

data1 = pd.read_table('./d1.txt',sep='\t|,',engine='python',skiprows=1)

freq1 = data1.values[:,0]
respfreq1 = data1.values[:,1] + data1.values[:,2]*1j
mag = py.absolute(respfreq1)
phase1 = py.angle(respfreq1,deg=True)
phase1 = py.unwrap(phase1,discont=180)

plt.subplot(2,1,1)
plt.semilogx(freq*py.pi*2,20*py.log10(mag))
py.semilogx(w1,mag1)
py.xlabel('$\omega$ [rad/seg]')
py.ylabel('Mag[dB]')
plt.grid()

C:\ana\lib\site-packages\ipykernel_launcher.py:5: FutureWarning: read_table is


deprecated, use read_csv instead.
"""

7
0
Mag[dB] 50
100
150
10 1 100 101
[rad/seg]

2.1.2 Modelo 2.
[103]: data1 = pd.read_table('./d4.txt',sep='\t|,',engine='python',skiprows=1)

freq1 = data1.values[:,0]
respfreq1 = data1.values[:,1] + data1.values[:,2]*1j
mag = py.absolute(respfreq1)
phase1 = py.angle(respfreq1,deg=True)
phase1 = py.unwrap(phase1,discont=180)

plt.subplot(2,1,1)
plt.semilogx(freq*py.pi*2,20*py.log10(mag))
py.semilogx(w1,mag1)
py.xlabel('$\omega$ [rad/seg]')
py.ylabel('Mag[dB]')
plt.grid()

C:\ana\lib\site-packages\ipykernel_launcher.py:2: FutureWarning: read_table is


deprecated, use read_csv instead.

8
0
Mag[dB] 50
100
150
10 1 100 101
[rad/seg]

2.2 Simulacion:
Ahora se simulara las dos estapas con una sencibilidad de los componentes de %5
de tolerancia utilizando el metodo de simulacion Monte Carlo.

Metodo 1 :
[104]: Image.open('d2m.png')
[104]:

Metodo 2 :
[105]: Image.open('d4m.png')
[105]:

9
2.3 Selección de Método:
Ahora se selecciona un método, en este caso utilizaremos para seguir el diseño
de este filtro el método 1. Siguiendo el procedimiento de nuestro diseño, ahora
se ajustara la ganancia del filtro de manera de obtener la ganancia especificada
una ganancia en corriente continua de 0 dB. Para eso realizaremos los siguientes
cálculos. R1a = R1 1
α y R1b = R1 1
+ R11a . donde α = 1/4 Entonces se obtiene
R1a = 3.58 1 1 1
1/4 = 14.32 y R1b = 3.58 + 14.32 = R1b = 4.77. Se observa en la siguiente
imagen el circuito con R1 reemplazado por R1a y R1b.Por otro lado se observa la
ganancia en 0dB para la corriente en continua.

[106]: Image.open('d2g0.png')
[106]:

10
3 Desnormalización.
Ahora procederemos a desnormalizar la impedancia de los componentes tal que los
capacitores sean de valores comerciales y también desnormalizaremos en frecuencia
ajustando el valor de las resistencias. Para eso utilizaremos las siguientes
expresiones. R = Rn ∗ (ωp1 /ωp2 ) ∗ Kz donde ωp1 = 1.02 ωp2 = 2π4kHz Kz = 108

1.02
R1a = 14.38 ∗ 108 ∗ = 58.3k
2π4000
1.02
R1b = 4.77 ∗ 108 ∗ = 19.35k
2π4000
1.02
R2 = 0.2828 ∗ 108 ∗ = 1.14k
2π4000
1.02
R3 = 1.48 ∗ 108 ∗ = 6k
2π4000
1.02
R4 = 2.41 ∗ 108 ∗ = 9.78k
2π4000
C1 = C2 = C3 = C4 = 10nF

3.1 Filtro desnormalizado y su funcion de transferencia.


[107]: Image.open('d2d.png')
[107]:

11
3.1.1 Ahora se procede a seleccionar los valores comerciales más cercanos (tolerancia
5 %)
En la siguiente imagen se puede ver el circuito con los valores comerciales de
sus componentes y su respuesta en frecuencia. En la que se puede observar que no
cumple con las especificaciones dadas para su diseño por que la sensibilidad de
los componentes produce un cambio en los resultados.
[108]: Image.open('d2c.png')
[108]:

4 Conclusión:
En los 2 diseños normalizados los resultados encontrados fueron los correctos
ya que la frecuencia de paso de 159mHz se encontraba a una ganancia de 1dB que
también fueron comparables con la simulación de JupyterLab.
En la utilización de los 2 métodos se encontró una diferencia muy notoria en la
repuesta de frecuencia utilizando la simulación de monte-carlo ya que en los
diseños existe una diferencia en su sensibilidad, lo que hace que el diseño 2
tenga una mayor variación en su simulación con una tolerancia al 5%.
Se eligió para seguir el desarrollo del proceso al diseño 2 por que tenía un
valor de Q muy bajo que permitía tener poca sensibilidad y también por que se
utilizaba el mismo valor para todos los capacitores.
En el diseño final para corregir y obtener las especificaciones pedidas para el
filtro, se cabio el valor de los capacitores comerciales de 10nF a 5, 6nF así

12
obteniendo el resultado esperado.
[ ]:

13

También podría gustarte