:py:mod:`pytc2.filtros_digitales` ================================= .. py:module:: pytc2.filtros_digitales .. autoapi-nested-parse:: @author: mariano Module Contents --------------- Functions ~~~~~~~~~ .. autoapisummary:: pytc2.filtros_digitales.fir_design_ls pytc2.filtros_digitales.fir_design_pm pytc2.filtros_digitales._filter_extremes pytc2.filtros_digitales._remez_exchange_algorithm .. py:function:: fir_design_ls(order, band_edges, desired, weight=None, grid_density=16, fs=2.0, filter_type='multiband') 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 :ref:`Tapio Saramaki y Lars Whannamar ` y el detallado trabajo en el material suplementario de :ref:`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. :param order: Orden del filtro a diseñar. El tamaño del filtro será de *orden+1*. :type order: TransferFunction :param band_edges: 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 :type band_edges: array_like :param fr_desiredired: El valor numérico fr_desiredado por cada banda. Ej: [1.0, 0.] para un pasabajos. :type fr_desiredired: array_like :param weight: Un valor postivo que pesará cada banda al momento de calcular el error. :type weight: array_like :param grid_density: 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. :type grid_density: int, numeric :param fs: 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. :type fs: float, numeric :param filter_type: 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. :type filter_type: string, :param max_iter: Cantidad máxima de iteraciones del algoritmo de Remez para hallar las frecuencias extremas. :type max_iter: int, numeric :param debug: Un valor booleano para activar la depuración de la propia función. :type debug: boolean :param order - filter order: :param band_edges - specifies the upper and lower band_edgess of the bands under consideration.: The program, however, uses band efr_desired in terms of fractions of pi rad. band_edges = band_edges/pi; :param fr_desiredired - specifies the fr_desiredired values at the band_edgess of each band.: :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. .. seealso:: :func:`` :func:`` .. rubric:: Examples >>> >>> >>> >>> >>> Notes: ------- .. _pm73: 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: L. 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: T. Holton, Digital Signal Processing: Principles and Applications. Cambridge University Press, 2021. .. py:function:: fir_design_pm(order, band_edges, desired, weight=None, grid_density=16, fs=2.0, filter_type='multiband', max_iter=25, debug=False) 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 :ref:`Tapio Saramaki y Lars Whannamar ` y el detallado trabajo en el material suplementario de :ref:`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. :param order: Orden del filtro a diseñar. El tamaño del filtro será de *orden+1*. :type order: TransferFunction :param band_edges: 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 :type band_edges: array_like :param fr_desiredired: El valor numérico fr_desiredado por cada banda. Ej: [1.0, 0.] para un pasabajos. :type fr_desiredired: array_like :param weight: Un valor postivo que pesará cada banda al momento de calcular el error. :type weight: array_like :param grid_density: 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. :type grid_density: int, numeric :param fs: 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. :type fs: float, numeric :param filter_type: 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. :type filter_type: string, :param max_iter: Cantidad máxima de iteraciones del algoritmo de Remez para hallar las frecuencias extremas. :type max_iter: int, numeric :param debug: Un valor booleano para activar la depuración de la propia función. :type debug: boolean :param order - filter order: :param band_edges - specifies the upper and lower band_edgess of the bands under consideration.: The program, however, uses band efr_desired in terms of fractions of pi rad. band_edges = band_edges/pi; :param fr_desiredired - specifies the fr_desiredired values at the band_edgess of each band.: :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. .. seealso:: :func:`` :func:`` .. rubric:: Examples >>> >>> >>> >>> >>> Notes: ------- .. _pm73: 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: L. 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: T. Holton, Digital Signal Processing: Principles and Applications. Cambridge University Press, 2021. .. py:function:: _filter_extremes(Ew, peaks) .. py:function:: _remez_exchange_algorithm(cant_bases, fr_grid, fr_desired, fr_weight, band_edges_idx, max_iter=250, error_tol=0.001, debug=False)