pytc2.filtros_digitales

@author: mariano

Module Contents

Classes

DC_removal_recursive_filter

DC_PWL_removal_recursive_filter

Functions

fir_design_ls(order, band_edges, desired[, weight, ...])

Algoritmo de Parks-McClellan para el diseño de filtros FIR de fase lineal

fir_design_pm(order, band_edges, desired[, weight, ...])

Algoritmo de Parks-McClellan para el diseño de filtros FIR de fase lineal

estimar_orden_filtro(Amin_dB, Amax_dB, delta_wT)

Estima el orden del filtro N, y calcula delta_c y delta_s.

herrmann_lp_fir_order(wT, d[, ripple_in_db])

Estimación de Herrmann del orden N para filtros FIR pasa bajos de fase lineal (minimax).

_filter_extremes(Ew, peaks)

_remez_exchange_algorithm(cant_bases, fr_grid, ...[, ...])

pytc2.filtros_digitales.fir_design_ls(order, band_edges, desired, weight=None, grid_density=16, fs=2.0, filter_type='multiband')[source]

Algoritmo de Parks-McClellan para el diseño de filtros FIR de fase lineal utilizando un criterio minimax. El algoritmo está basado en RERMEZ_FIR de Tapio Saramaki y Lars Whannamar y el detallado trabajo en el material suplementario de Thomas Holton. La imple_ mentación del algoritmo ha sido ampliamente modificada con fines didácticos respecto a la version original de Saramaki y Parks McClellan.

Parameters:
  • order (order - filter) – Orden del filtro a diseñar. El tamaño del filtro será de orden+1.

  • band_edges (array_like) – Los límites de cada banda indicada en la plantilla de diseño del filtro. Habrá dos valores, principio y fin, por cada banda definida en fr_desiredired. Ej: [0., 0.3, 0.7, 1.] Para un pasabajos con corte en 0.3

  • fr_desiredired (array_like) – El valor numérico fr_desiredado por cada banda. Ej: [1.0, 0.] para un pasabajos.

  • weight (array_like) – Un valor postivo que pesará cada banda al momento de calcular el error.

  • grid_density (int, numeric) – Un entero que indicará por cuanto interpolar la respuesta del filtro al calcular el error del filtro. El valor de interpolación se calcula aproximadamente por grid_density*orden/2. Por defecto se usa 16.

  • fs (float, numeric) – Frecuencia de muestreo a la que se implementará el filtro digital. Por defecto se usa 2.0, es decir se normaliza a la f. de Nyquist.

  • filter_type (string,) – Un string que identifica el filtro que se diseñará. Se admiten tres posibilidafr_desired: ‘multiband’ o ‘m’. Filtros FIR tipo 1 o 2 de propósitos generales. ‘differentiator’ o ‘d’, se utilizará para diseñar filtro FIR derivadores de tipo 3 o 4 dependiendo el orden. Finalmente, ‘hilbert’ o ‘h’ para implementar filtros FIR que permiten calcular la parte imaginaria de una señal analítica. Es decir tener una transferencia aproximadamente constante y una rotación constante de pi/2 para todas las frecuencias.

  • max_iter (int, numeric) – Cantidad máxima de iteraciones del algoritmo de Remez para hallar las frecuencias extremas.

  • debug (boolean) – Un valor booleano para activar la depuración de la propia función.

  • order

  • consideration. (band_edges - specifies the upper and lower band_edgess of the bands under) – The program, however, uses band efr_desired in terms of fractions of pi rad. band_edges = band_edges/pi;

  • band. (fr_desiredired - specifies the fr_desiredired values at the band_edgess of each) –

Returns:

  • h_coeffs (array_like) – Los coeficientes de la respuesta al impulso del filtro FIR diseñado.

  • err (float, numeric) – Error máximo obtenido de la iteración del algoritmo Remez.

  • w_extremas (array_like) – Las frecuencias extremas obtenidas de la iteración del algoritmo Remez.

Raises:

ValueError – Si no se cumple con el formato y valores indicados en la documentación.

See also

:func:`` :func:``

Examples

>>>
>>>
>>>
>>>
>>>

Notes:

J. H. McClellan, T. W. Parks, and L. R. Rabiner, “A computer program for fr_desiredigning optimum FIR linear phase digital filters,” IEEE Transactions on Audio and Electroacoustics, vol. AU-21, no. 6, pp. 506 - 526, December 1973. .. _DSPMatlab20:

  1. Wanhammar, T. Saramäki. Digital Filters Using MATLAB. Springer 2020.

M. Ahsan and T. Saramäki, “A MATLAB based optimum multiband FIR filters fr_desiredign program following the original idea of the Remez multiple exchange algorithm,” in Proc. 2011 IEEE International Symposium on Circuits and Systems, Rio de Janeiro, Brazil, May 15-–17, 2011, pp. 137-140. .. _holton21:

  1. Holton, Digital Signal Processing: Principles and Applications. Cambridge University Press, 2021.

pytc2.filtros_digitales.fir_design_pm(order, band_edges, desired, weight=None, grid_density=16, fs=2.0, filter_type='multiband', max_iter=25, debug=False)[source]

Algoritmo de Parks-McClellan para el diseño de filtros FIR de fase lineal utilizando un criterio minimax. El algoritmo está basado en RERMEZ_FIR de Tapio Saramaki y Lars Whannamar y el detallado trabajo en el material suplementario de Thomas Holton. La imple_ mentación del algoritmo ha sido ampliamente modificada con fines didácticos respecto a la version original de Saramaki y Parks McClellan.

Parameters:
  • order (order - filter) – Orden del filtro a diseñar. El tamaño del filtro será de orden+1.

  • band_edges (array_like) – Los límites de cada banda indicada en la plantilla de diseño del filtro. Habrá dos valores, principio y fin, por cada banda definida en fr_desiredired. Ej: [0., 0.3, 0.7, 1.] Para un pasabajos con corte en 0.3

  • fr_desiredired (array_like) – El valor numérico fr_desiredado por cada banda. Ej: [1.0, 0.] para un pasabajos.

  • weight (array_like) – Un valor postivo que pesará cada banda al momento de calcular el error.

  • grid_density (int, numeric) – Un entero que indicará por cuanto interpolar la respuesta del filtro al calcular el error del filtro. El valor de interpolación se calcula aproximadamente por grid_density*orden/2. Por defecto se usa 16.

  • fs (float, numeric) – Frecuencia de muestreo a la que se implementará el filtro digital. Por defecto se usa 2.0, es decir se normaliza a la f. de Nyquist.

  • filter_type (string,) – Un string que identifica el filtro que se diseñará. Se admiten tres posibilidafr_desired: ‘multiband’ o ‘m’. Filtros FIR tipo 1 o 2 de propósitos generales. ‘differentiator’ o ‘d’, se utilizará para diseñar filtro FIR derivadores de tipo 3 o 4 dependiendo el orden. Finalmente, ‘hilbert’ o ‘h’ para implementar filtros FIR que permiten calcular la parte imaginaria de una señal analítica. Es decir tener una transferencia aproximadamente constante y una rotación constante de pi/2 para todas las frecuencias.

  • max_iter (int, numeric) – Cantidad máxima de iteraciones del algoritmo de Remez para hallar las frecuencias extremas.

  • debug (boolean) – Un valor booleano para activar la depuración de la propia función.

  • order

  • consideration. (band_edges - specifies the upper and lower band_edgess of the bands under) – The program, however, uses band efr_desired in terms of fractions of pi rad. band_edges = band_edges/pi;

  • band. (fr_desiredired - specifies the fr_desiredired values at the band_edgess of each) –

Returns:

  • h_coeffs (array_like) – Los coeficientes de la respuesta al impulso del filtro FIR diseñado.

  • err (float, numeric) – Error máximo obtenido de la iteración del algoritmo Remez.

  • w_extremas (array_like) – Las frecuencias extremas obtenidas de la iteración del algoritmo Remez.

Raises:

ValueError – Si no se cumple con el formato y valores indicados en la documentación.

See also

:func:`` :func:``

Examples

>>>
>>>
>>>
>>>
>>>

Notes:

J. H. McClellan, T. W. Parks, and L. R. Rabiner, “A computer program for fr_desiredigning optimum FIR linear phase digital filters,” IEEE Transactions on Audio and Electroacoustics, vol. AU-21, no. 6, pp. 506 - 526, December 1973. .. _DSPMatlab20:

  1. Wanhammar, T. Saramäki. Digital Filters Using MATLAB. Springer 2020.

M. Ahsan and T. Saramäki, “A MATLAB based optimum multiband FIR filters fr_desiredign program following the original idea of the Remez multiple exchange algorithm,” in Proc. 2011 IEEE International Symposium on Circuits and Systems, Rio de Janeiro, Brazil, May 15-–17, 2011, pp. 137-140. .. _holton21:

  1. Holton, Digital Signal Processing: Principles and Applications. Cambridge University Press, 2021.

class pytc2.filtros_digitales.DC_removal_recursive_filter(samp_avg=16, upsample=1)
reset()

Reseteo del filtro y sus variables internas. Es necesario resetear el filtro cuando se procesa una señal diferente o un bloque disjunto.

set_initial_conditions(xx_ci, yy_ci)

Configuración de los parámetros iniciales del filtro recursivo.

Parámetros:

xx_ciarray_like

La matriz de datos de entrada para las (samp_avg * upsample)-ésimas muestras anteriores a la primer muestra a procesar.

yy_ciarray_like

La matriz de datos de entrada para las (upsample)-ésimas muestras anteriores a la primer muestra a procesar.

process(xx)

Función que ejecuta la recursión y calcula la salida a partir de la entrada “xx”.

Parámetros:

xxarray_like

La matriz de datos de entrada. Será un vector o array de N muestras.

Retorna:

yyarray_like

La salida del filtro para cada muestra de xx.

impulse_response(length=None)

Calcula la respuesta al impulso empírica del filtro

Parámetros:

lengthint

Longitud de la respuesta a calcular, si no se define se calcula automáticamente en función de los parámetros. Default = None

Retorna:

yndarray

Respuesta al impulso

frequency_response(n_freq=None, bTeorica=False)

Calcula la respuesta en frecuencia teórica/empírica excitando el filtro con ruido blanco

Parámetros:

n_freqint, None

Número de puntos en frecuencia a evaluar.

bTeoricaBool

Calcular la respuesta teórica o empírica.

Retorna:

wndarray

Frecuencias normalizadas (0 a π)

frec_respndarray

Respuesta en frecuencia compleja

class pytc2.filtros_digitales.DC_PWL_removal_recursive_filter(fs=2, fpwl=None, samp_avg=16, cant_ma=2, upsample=None, batch=None)
reset()

Reseteo del filtro y sus variables internas. Es necesario resetear el filtro cuando se procesa una señal diferente o un bloque disjunto.

process(xx)

Función que ejecuta la recursión y calcula la salida a partir de la entrada “xx”.

Parámetros:

xxarray_like

La matriz de datos de entrada. Puede ser un conjunto de señales, por lo general será una matriz de NxM, siendo N la cantidad de muestras y M la cantidad de señales.

Retorna:

frec: int

Frecuencia de línea estimada 50 ó 60 Hz.

__detectar_interferencia_linea(fs, ancho_banda=4.0, prominencia_min=3.0)

Detecta interferencia de frecuencia de línea (50/60 Hz) en una señal.

Parámetros:

xxarray_like

Señal de entrada.

fsfloat

Frecuencia de muestreo (en Hz).

ancho_bandafloat, opcional

Ancho de banda alrededor de 50/60 Hz para buscar interferencia (por defecto 4 Hz).

prominencia_minfloat, opcional

Prominencia mínima para considerar un pico significativo (por defecto 3 dB).

Retorna:

frec: int

Frecuencia de línea estimada 50 ó 60 Hz.

impulse_response(length=None)

Calcula la respuesta al impulso empírica del filtro

Parámetros:

lengthint

Longitud de la respuesta a calcular, si no se define se calcula automáticamente en función de los parámetros. Default = None

Retorna:

yndarray

Respuesta al impulso

frequency_response(n_freq=None, bTeorica=False)

Calcula la respuesta en frecuencia teórica/empírica excitando el filtro con ruido blanco

Parámetros:

n_freqint, None

Número de puntos en frecuencia a evaluar.

bTeoricaBool

Calcular la respuesta teórica o empírica.

Retorna:

wndarray

Frecuencias normalizadas (0 a π)

frec_respndarray

Respuesta en frecuencia compleja

pytc2.filtros_digitales.estimar_orden_filtro(Amin_dB, Amax_dB, delta_wT)

Estima el orden del filtro N, y calcula delta_c y delta_s.

Parámetros:

Amin_dBfloat

Atenuación mínima en la banda de detención, en dB (Amin).

Amax_dBfloat

Ripple máximo permitido en la banda de paso, en dB (Amax).

delta_wTfloat

Ancho de la zona de transición en radianes (ΔωT).

Retorna:

Nfloat

Orden estimado del filtro.

delta_cfloat

Ripple en banda de paso.

delta_sfloat

Ripple en banda de detención.

pytc2.filtros_digitales.herrmann_lp_fir_order(wT, d, ripple_in_db=False)

Estimación de Herrmann del orden N para filtros FIR pasa bajos de fase lineal (minimax).

Parámetros:
wT = [wcT, wsT]

wcT: passband cutoff edge (NORMALIZED 0 < wcT < pi) wsT: stopband cutoff edge > wcT

d = [dc, ds] or [A_max, A_min] depending on ripple_in_db

dc: passband ripple (linear) ds: stopband ripple (linear) OR A_max: maximum passband ripple (dB) A_min: minimum stopband attenuation (dB)

ripple_in_db: boolean indicating if d is provided in dB (default False)

Outputs:

N: Filter order estimate Be: Band edges for use with remez function [0, wcT, wsT, pi] D: Desired values at band edges [1, 1, 0, 0] W: Weighting factors [1, dc/ds]

Formated for direct use by MPR_FIR.m and firmp.m or remez.m

Toolbox for DIGITAL FILTERS USING MATLAB

Author: Lars Wanhammar 2004-07-17 Modified by: LW 2005-05-09 Copyright: by authors - not released for commercial use Version: 1 Known bugs: Report bugs to: Wanhammar@gmail.com

References: [1] Herrmann O., Rabiner L.R., and Chan D S K.: Practical

design rules for optimum finite impulse response lowpass digital filters, Bell System Techical Journal, vol. 52 (July-August), 1973.

[2] Rabiner & Gold, Theory and Appications of DSP, pp. 156-7.

pytc2.filtros_digitales._filter_extremes(Ew, peaks)[source]
pytc2.filtros_digitales._remez_exchange_algorithm(cant_bases, fr_grid, fr_desired, fr_weight, band_edges_idx, max_iter=250, error_tol=0.001, debug=False)[source]