Señales y sistemas caso del mundo real: el diseño de filtros analógicos con un toque

Que le den la tarea de diseñar una entrada analógica (continua en el tiempo) filtrar para cumplir con las especificaciones de respuesta de amplitud que se muestran. También es necesario encontrar la respuesta al escalón del filtro, determinar el valor de la superación de pico, y el tiempo en que se produce el rebasamiento de pico.

El objetivo del diseño de filtro es que la magnitud de la respuesta de frecuencia en dB (20log10|MARIDO(F) |) Pase a través de la región sombreada de la figura a medida que aumenta la frecuencia. Los requisitos de diseño se reducen a la banda de paso y la banda de rechazo frecuencias críticas Fpag y Fs Hz y los niveles de atenuación de banda de paso y la banda de parada UNpag y UNs dB.

Además, la característica de respuesta es ser Butterworth, lo que significa que la respuesta y el sistema de función de magnitud filtro de tomar esta forma:

Aquí, norte es el orden del filtro, Fdo es la banda de paso 3 dB frecuencia de corte del filtro, y los polos, situados en un semicírculo es la izquierda; media s-avión, están dadas por

Video: Filtro IIR para una señal compuesta de 1Khz y 60Hz - DSP-UPS

Este problema requiere que trabaje en el dominio de la frecuencia, el dominio del tiempo, y tal vez la s-dominio, dependiendo del enfoque de solución que elija.

A partir de los requisitos, la respuesta de frecuencia del filtro tiene la ganancia unitaria (0 dB) en la banda de paso. La respuesta al escalón (una caracterización de dominio de tiempo) del filtro Butterworth se conoce a rebasar la unidad antes de asentarse finalmente a la unidad como

Para el diseño del filtro, puede utilizar uno de dos enfoques:

  1. Trabajar una solución a mano, usando la respuesta de amplitud Butterworth |MARIDOBU(F) | y la función del sistema, MARIDOBU(s).

  2. Utilizar las capacidades de diseño de filtro de la SciPy señal paquete.

Encontrar el orden del filtro y 3 dB frecuencia de corte

Siga estos pasos para diseñar el filtro mediante el uso de Python y SciPy hacer crujir el número real:

  1. Encontrar norte y Fdo para cumplir con los requisitos de respuesta de magnitud.

    Utilice la función SciPy N, wc = signal.buttord (WP, WS, Ap, As, analógica = 1) y entre los requisitos de diseño del filtro, donde wp y ws son la banda de paso y la banda de parada frecuencias críticas en rad / s y ap y Como son los niveles de banda de paso y la banda de parada de atenuación (ambos conjuntos de números provienen de la figura anterior). La función devuelve el orden del filtro norte y la frecuencia de corte baño en rad / s.

  2. Sintetizar el filtro - encontrar el {segundok} Y {unk} coeficientes de la ecuación diferencial LCC que realiza el sistema deseado.

    Si la búsqueda de elementos del circuito es el final del juego, puede ir allí inmediatamente, utilizando fórmulas de síntesis de circuitos. Llame a la función SciPy b, a = signal.butter (N, wc, analógica = 1) con el orden del filtro y la frecuencia de corte, y devuelve los coeficientes de filtro en arrays segundo y un.

  3. Encuentra la respuesta al escalón de forma matemática exacta o por medio de la simulación.

Aquí es cómo utilizar las herramientas de Python con los requisitos de diseño dados y luego verificar el trabajo por el trazado de la respuesta de frecuencia como una superposición. Nota: Puede hacer lo mismo en MATLAB con casi la misma sintaxis.

en [379]: N, wc = signal.buttord (2 * pi * 1e3,2 * pi * 10e3,3.0,50, analógica = 1) orden de filtro # find NIn [380]: N # filtro orderOut [380]: 3 en [381]: Wc frec # de corte en rad / sOut [381]: 9222.4701630595955In [382]: B, a = signal.butter (N, wc, analógica = 1) # get coeffs.In [383]: Bout [383]: Array ([7.84407571e + 11 + 0.j]) En [384]: Real (a) de salida [384]: Array ([1.00000000e + 00, 1.84449403e + 04,1.70107912e + 08,7.84407571e + 11])

Los resultados de la red [379] le dicen que el orden del filtro es requerido norte = 3 y la frecuencia de corte del filtro requerido es

Los conjuntos de coeficientes de filtro también se incluyen en los resultados.

Utilizar el real() función para visualizar de forma segura la parte real de la matriz de coeficientes un porque sabes que los coeficientes son reales. ¿Cómo? Los postes, las raíces del denominador MARIDOBU(s), Son reales o se producen en pares conjugados complejos, lo que garantiza que el polinomio denominador tiene coeficientes reales cuando se multiplica a cabo. Las muy pequeñas partes imaginarias son debidos a errores de precisión numérica.

Comprobación de la respuesta de frecuencia de diseño final

Para comprobar el diseño, utilice la receta de respuesta de frecuencia.

en [386]: F = logspace (2,5,500) axisIn # frecuencia log [387]: W, h = signal.freqs (b, a, 2 * pi * f) En [388]: Semilogx (f, 20 * log10 (abs (H)),’g’)

La figura muestra la representación gráfica de la respuesta final diseño magnitud junto con los requisitos de diseño originales.

Video: #DISEÑAR FILTRO PASO BAJO-DISEÑO Y SIMULACIÓN PROTEUS.TUTORIAL PASO A PASO

Encontrar la respuesta de paso de los coeficientes de filtro

El enfoque más elegante a la búsqueda de la respuesta al escalón de los coeficientes del filtro es encontrar


los s-la sección de dominio de la figura le indica cómo llevar a cabo la expansión en fracciones parciales (PFE) numéricamente. Dispone de las matrices de coeficientes para MARIDO(s), Por lo que todo lo que tiene que hacer es multiplicar el polinomio denominador por s. Esto se puede hacer a mano o se puede utilizar una relación entre coeficientes de los polinomios y convolución de la secuencia.

Al multiplicar dos polinomios, las matrices de coeficientes para cada polinomio se convolucionados, como en la secuencia de convolución.

A continuación, se trabaja a través del problema, utilizando signal.convolve para llevar a cabo la multiplicación polinomio en el denominador. Para convencerte de que esto realmente funciona, considere la multiplicación de los dos polinomios siguientes:

Video: Diseño de filtros pasivos Pasa Bajo

(x2 + x + 1) (x + 1) = x3 + 2x2 + 2x + 1

Si la convolución de los coeficientes conjuntos [1, 1, 1] y [1, 1] como matrices en Python, se obtiene este resultado:

en [418]: Signal.convolve ([1,1,1], [1,1]) Fuera [418]: Array ([1, 2, 2, 1])

Esto concuerda con el cálculo manual. Para encontrar la ZFP, conecte las matrices de coeficientes segundo y convolve (a, [1,0]) dentro R, p, K = residuo (b, a). Los coeficientes de [1, 0] corresponden a la s-polinomio de dominio s + 0.

en [420]: R, p, K = signal.residue (b, signal.convolve ([1,0], a)) en [421]: R # (residuos) rayar pequeña errorsOut numérico [421]: Array ([1.0000e + 00 + 2.3343e-16j, # residuo 0, parte imag 0-1.0000e + 00 + 1.0695e-15j, # residuo 1, parte imag 01.08935e-15 -5.7735e-01J, # residuo 2, parte real 01.6081e-15 + 5.7735e-01J]) # residuo 3, parte real 0in [422]: P # (polos) de salida [422]: Array ([0,0000 + 0.0000e + 00j, # polo 0-9.222,4702 -1.5454e-12j, # polo 1, parte imag 0-4.611,2351 -7.9869e + 03J, # polo 2-4.611,2351 + 7.9869e + 03J]) # polo 3En [423]: K # (de la división larga) de salida [423]: Array ([0. + 0.j]) # adecuada racional, así que no hay términos

Tiene cuatro polos: dos reales y un par complejo conjugado - un poco de un desastre para trabajar a través, pero es factible. Consulte el par transformar

para calcular la transformada inversa para los cuatro términos.

Para los polos conjugados, los residuos también son conjugados. Esta propiedad siempre se mantiene.

Se puede escribir la transformada inversa de los términos de polos conjugado como senos y cosenos, utilizando la fórmula de Euler y la cancelación de las partes imaginarias delante del coseno y partes reales delante del seno:

Poniendo todo junto, se obtiene ypaso(t) = u(t) - mi-9,222.47tu(t) -2 x 0,5774mi-4,611.74tsin (7,986.89t)u(t). Tener esta forma es agradable, pero que todavía tienen que encontrar el máximo de la función t gt; 0 y la ubicación máximo. Para ello, representar gráficamente la función y observar el máximo.

Un enfoque más directo es el uso de la simulación a través signal.lsim y el dominio del tiempo de la receta. La entrada del sistema es un paso, por lo que la salida de la simulación será la respuesta al escalón. A partir de la respuesta al escalón simulado, se puede calcular el rebasamiento pico numéricamente y verlo en una parcela. El código de línea de comandos es IPython

Video: Implementacion y diseño de un Filtro pasabanda digital

en [425]: T = arange (0,0.002,1e-6) # paso menor que menor tiempo Constantin [426]: T, ys, x_state = signal.lsim ((b, a), los (len (t)), t) En [428]: Plot (t * 1E3, ys)

Usando el la matriz de respuesta de salto array t y ys, se puede utilizar el max () y encontrar() funciones para completar la tarea:

en [436]: Max (real (YS)) # reales para borrar num. errorsOut [436]: 1,0814651457627822 # pico sobreimpulso is8.14% En [437]: Encontrar (reales (YS) == Max (reales (YS))) de salida [437]: Array ([534]) # find pico sea en el índice 534In [439]: T [534] * 1e3 # tiempo en el índice 534 en msOut [439]: 0,5339
Artículos Relacionados