{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# **Filtros de Respuesta al Impulso Finita (*finite impulse responce - FIR*)**\n","Un filtro de respuesta al impulso finita (FIR) es un sistema de procesamiento digital de señales caracterizado por tener su respuesta al impulso acotada en el dominio del tiempo. Esto significa que su salida es una suma ponderada de muestras pasadas y presentes de la señal de entrada.\n","Las propiedades más interesantes de los filtros FIR son su respuesta en fase lineal y su estabilidad. Son ampliamente utilizados en el procesamiento de señales de audio, imagen y telecomunicaciones.\n","\n","Los coeficientes de los filtros FIR son calculados en base a las especificaciones de diseño dadas por cuatro parámetros:\n","- Riple en la banda de paso (δp)\n","- Frecuencia límite de la banda de paso (fp).\n","- Frecuencia límite de la banda de atenuación (fs).\n","- Atenuación (δs)\n","\n","Los métodos utilizados para el cálculo de los coeficientes son:\n","- Método de la ventana\n","- Método del muestreo en frecuencia\n","- Método óptimo\n"],"metadata":{"id":"cFiin5Ry7bRk"}},{"cell_type":"markdown","source":["# Los pasos para el diseño de filtros FIR son los siguientes:\n","\n","**Determinar las especificaciones del filtro:** Esto involucra especificaciones del tipo de filtro (pasa bajos, pasa altos, pasa banda o elimina banda), la frecuencia de corte, la banda de transición (el rango de frecuencias entre la banda de paso y la banda de atenuación), riple en la banda de paso y atenuación.\n","\n","**Elegir un método de diseño:** La selección depende de las especificaciones del filtro y de las propiedades deseadas.\n","\n","**Calcular los coeficientes del filtro:** Según la fórmula o algoritmo que corresponda con el método seleccionado. Los coeficientes determinan la forma de la respuesta en frecuencia.\n","\n","**Evaluar el desempeño del filtro:** A pesar de haber seguido los pasos anteriores, se debe verificar si se cumplen o no las espeficicaciones. Esto involucra el análisis de la respuesta en frecuencia del filtro, la respuesta en fase, la respuesta al impulso, entre otras métricas.\n","\n","**Implementar el filtro:** Una vez que el diseño está completo, este puede ser implementado en software o hardware en tiempo real."],"metadata":{"id":"fpGagJ5m7rVc"}},{"cell_type":"markdown","source":["# Método de la Ventana\n","El método de la ventana es uno de los más comunes para el diseño de filtros FIR. La idea básica del método es truncar la respuesta al impulso de un filtro ideal multiplicándola por una función llamada ventana, lo cual ayuda a conformar la respuesta en frecuencia del filtro. Los pasos para el diseño del filtro FIR utilizando el método de la ventana son:\n","\n","i. Determinar las especificaciones del filtro, principalmente el tipo de filtro, la frecuencia de corte, la banda de transición, el riple y la atenuación.\n","\n","ii. Seleccionar la función ventana, esto es Hamming, Hann, Blackman, o Kaiser. Que depende del riple en la banda de paso y la atenuación requeridos.\n","\n","iii. Seleccionar la cantidad de coeficientes según el ancho de la banda de transición.\n","\n","iv. Calcular la respuesta al impulso ideal del filtro correspondiente, que es de duración infinita y por lo tanto se trunca para volverla realizable.\n","\n","v. Multiplicar la respuesta al impulso del filtro ideal por la función de ventana para obtener los coeficientes del filtro realizable.\n","\n","vi. Normalizar los coeficientes del filtro para asegurar que el filtro tiene ganancia unitaria en la frecuencia cero (constante).\n","\n","vii. Evaluar el comportamiento del filtro analizando su respuesta en frecuencia, respuesta en fase, u otra métrica según el caso. Si el filtro no cumple con las especificaciones deseadas, aumentar el número de coeficientes o modificar la ventana.\n","\n","viii. Implementar el filtro en software o hardware para procesar señales en tiempo real."],"metadata":{"id":"101lJedJ8Gd-"}},{"cell_type":"markdown","source":["# Función Ventana\n","Cada función de ventana utilizada en el diseño de filtros FIR tiene sus propias ventajas y desventajas, como se describe a continuación:\n","\n","**Ventana Rectangular:** La ventana rectangular es la más simple y posee una forma plana en el dominio del tiempo. Es fácil de calcular y provee buena banda de transición, pero posee relativamente bajos niveles de atenuación y altos riples.\n","\n","**Ventana Hamming:** Provee una solución de compromiso entre el ancho de banda de transición y la atenuación. Es apropiada para muchas aplicaciones.\n","\n","**Hann window:** Similar a la ventana de Hamming, pero provee mejor atenuación a expensas de mayor ancho de banda de transición.\n","\n","**Blackman window:** . Provee aun mayor atenuación a expensas de mayor ancho de banda de transición.\n","\n","**Kaiser window:** Es una ventana variable que provee mayor control en los niveles de riple y atenuación y ancho de banda de transición. Permite el diseño de filtros con la mayor atenuación."],"metadata":{"id":"Ix_tlCn089Fc"}},{"cell_type":"markdown","source":["# **Ejemplo de filtro pasa bajos utilizando la ventana de Hamming**"],"metadata":{"id":"EkYePgn6AR_v"}},{"cell_type":"markdown","source":["En este código, se define la frecuencia de muestreo fs, frecuencia de corte deseada, ancho de la banda de transición, y el número de coeficientes del filtro. Luego, se utiliza la función firwin para calcular los coeficientes del filtro que son almacenados en la variable taps. Finalmente, se utiliza la función freqz para determinar la respuesta en frecuencia del filtro, que es graficada con el comando matplotlib."],"metadata":{"id":"6LGm9_Tc49Fl"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000 # Sample rate, Hz\n","cutoff = 100 # Desired cutoff frequency, Hz\n","trans_width = 100 # Width of transition from pass band to stop band, Hz\n","numtaps = 101 # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='hamming', pass_zero=True, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, np.abs(h), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-0.05, 1.05])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":472},"id":"b_fHPfxV7460","outputId":"968b74fb-5d8d-4802-d043-8ed1e46f306e","executionInfo":{"status":"ok","timestamp":1713916524029,"user_tz":180,"elapsed":2022,"user":{"displayName":"Javier Ernesto Kolodziej","userId":"07607278774554166393"}}},"execution_count":1,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"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OtX5WkVFhXj11VdFp06dLNuOjY0V8+fPF5cuXRJCCLFx40Zx1113ifDwcKHT6UR4eLgYN26c1Sns5tPuv/jiC5GamiqCg4OFl5eXGD58uDh58mSt7a5atcryeZs3by7Gjx8vzpw5Y9Vm4sSJwsfHp9Z7a/7b/Oqrr8SQIUNEcHCw0Ol0onXr1uLhhx8WOTk5Vu8rLi4WqampIiYmRuh0OhEUFCR69+4tXn/9dVFRUWHz/iT3xe8yI7qKrKws9OjRA59++ulVD7mRctT8DrfG5JtvvsGoUaOwefNmy8UzlSAzMxMDBgzAl19+ibvvvlvucoicgnOIiP5y+fLlWsuWLFkCtVqN22+/XYaKyN28//77uOGGG+r9OhQich7OISL6yz//+U/s3r0bAwYMgIeHh+UU34ceeqjBXwVBZIuVK1fit99+w/fff4+lS5dec84aETkeAxHRX3r37o309HS88MILKCkpQevWrTFv3jzL95MROcu4cePg6+uLyZMn17paOhG5BucQERERkdvjHCIiIiJyewxERERE5Pbcbg6RyWTCn3/+CT8/P05cJCIiaiSEECguLkZ4eHitLx52BLcLRH/++SfPGCIiImqkTp8+jVatWjl8vW4XiPz8/AAA2dnZaN68uczVuDeDwYAffvgBQ4YMgVarlbsct8f+UA72hXKwL5SjoKAA0dHRlt/jjuZ2gch8mMzPzw/+/v4yV+PeDAYDvL294e/vz/9oFID9oRzsC+VgXyiHwWAAcO3vlmwoTqomIiIit8dARERERG6PgYiIiIjcHgMRERERuT0GIiIiInJ7DERERETk9hiIiIiIyO0xEBEREZHbYyAiIiIit8dARERERG5P1kC0efNmjBgxAuHh4VCpVFizZs0135OZmYmbb74Zer0eMTExWLFihdPrJCIioqZN1kBUWlqKbt264e2337apfXZ2NoYPH44BAwYgKysLM2fOxAMPPIANGzY4tK6yMiA/H8jNBYqKACEavi4hpHWdOQOcOAFcvHh967tyRVrP779Ltz//BCoqrq++igqguFiqragIKCkBLl+WlldWSm1MJqlNTg5w4ULDt0dERKREsn6567BhwzBs2DCb26elpSE6OhqLFi0CANx0003YunUr3njjDSQmJtq17d9+k37RHz8OHD0q3U6ckG75+dZtdTogNBRo0wZo3dr6vk0b6fXSUiAvT1rPsWNVt+PHpdeq8/AAwsOr3l9znc2aAYWFwNmzwKFDwMGD0v2hQ8CpU7UDlUYDtG0LdOwIdOgAtG8v3SIjAR8fKcxcvCi917ye6p+3Zn22aNMGmD4dmDlT+jxERESNWaP6VbZ9+3YkJCRYLUtMTMTMmTPrfU95eTnKy8stz4uKigAAAwfa/q3FFRVSmDh1yr56q9PpBNRq4MoVFSorq9a3ZYv969LrBXx9pWBUWAgYjSocPgwcPtzw+mylVguYTCqcPAk89RTwww8mfP21ETqd/esyf3Ox+Z7kxf5QDvaFcrAvlMPZfdCoAlFubi5CQkKsloWEhKCoqAiXL1+Gl5dXrfcsXLgQ8+fPr7U8MPAKfH1VCA4uQ2ho6V+3MgQHlyEoqAze3pVQq4Hycg0uXdKhoMAT58974/x5r2r30mOTSQVPz0r4+hqqrUu6hYVJ69RqTQCAigo1Ll3SIz+//vVdvuwBb28DAgIqEBFRjIiIEqubv38FVCrpc5hMQEGBJ86c8cOZM344e9YXZ8744s8/fXHxoh4mk3RU1NOzEs2aXbGsIzy8BCEhUm3+/hXQak1Qq00QQgUhVDCZVDCZAJNJ9dcyaR06nQnl5Rps2RKBDz/sgvR0D9xzz0k8/PBvDe7X9PT0Br+XHI/9oRzsC+VgX8ivrKzMqetvVIGoIVJTU5GSkmJ5XlRUhMjISBw4YEKLFp4APAE0v86tCACav26eAFpc19pMpkqo1SoA+r9uQQ1ckxEVFUaoVIBWi2rru776AGD0aCAxERg5Eli3LhrPPReJXr3smxxlMBiQnp6OwYMHQ6u1fcSOnIP9oRzsC+VgXyhHfs35LA7WqAJRaGgo8vLyrJbl5eXB39+/ztEhANDr9dDr9bWWa7Vat/jhduZHHDECSEoCPv4YeOUVD/zvfw1bj7v0RWPB/lAO9oVysC/k5+z936iuQxQfH4+NGzdaLUtPT0d8fLxMFdFzzwEqFfDdd8CRI3JXQ0RE1DCyBqKSkhJkZWUhKysLgHRafVZWFk79NXs5NTUVSUlJlvZTpkzB8ePH8fTTT+PgwYN45513sHr1ajz++ONylE8AbrxROnQGAJ99Jm8tREREDSVrINq1axd69OiBHj16AABSUlLQo0cPzJkzBwCQk5NjCUcAEB0dje+//x7p6eno1q0bFi1ahA8++MDuU+7Jse67T7r//HN56yAiImooWecQ9e/fH+IqVyms6yrU/fv3x969e51YFdlrxAjpWkRHjkjXN4qJkbsiIiIi+zSqOUSkTP7+QJ8+0uN16+SthYiIqCEYiMghhg6V7mvMeSciImoUGIjIIcwjRNu3X993tREREcmBgYgcIjZWuubRuXNAdrbc1RAREdmHgYgcwtMT+OtkQWzfLm8tRERE9mIgIocxXx/z55/lrYOIiMheDETkMLGx0v2vv8pbBxERkb0YiMhhunSR7vfv58RqIiJqXBiIyGE6dAA0GuDiReDPP+WuhoiIyHYMROQwnp5Au3bS4/375a2FiIjIHgxE5FDmw2b79slbBxERkT0YiMihOneW7n//Xd46iIiI7MFARA51443S/dGj8tZBRERkDwYicijzN90zEBERUWPCQEQO1batdJ+bC5SUyFsLERGRrRiIyKGaNQNatJAeHzsmby1ERES2YiAih+NhMyIiamwYiMjhGIiIiKixYSAih2MgIiKixoaBiBwuKkq6P3VK1jKIiIhsxkBEDte6tXTPQERERI0FAxE5XPVAxG+9JyKixoCBiByuVSvpvqwMKCiQtxYiIiJbMBCRw3l6AiEh0mMeNiMiosaAgYicgvOIiIioMWEgIqdgICIiosaEgYicwhyITp6Utw4iIiJbMBCRU0RESPd//ilvHURERLZgICKnCA+X7nNy5K2DiIjIFgxE5BRhYdI9AxERETUGDETkFAxERETUmDAQkVOYA1FRkXSBRiIiIiVjICKn8PMDvL2lxxwlIiIipWMgIqdQqXjYjIiIGg8GInIaBiIiImosGIjIaRiIiIiosWAgIqdhICIiosaCgYichoGIiIgaCwYichoGIiIiaiwYiMhpzIGI32dGRERKx0BEThMcLN2fPy9vHURERNfCQERO07KldH/hAmAyyVsLERHR1TAQkdMEBUn3RiNQWChrKURERFfFQEROo9cD/v7SYx42IyIiJWMgIqcyzyM6d07eOoiIiK6GgYicyjyPiCNERESkZAxE5FQMRERE1BgwEJFTMRAREVFjwEBETsVAREREjQEDETkVAxERETUGDETkVDzLjIiIGgMGInIqjhAREVFjwEBETsVAREREjQEDETlV9e8zE0LeWoiIiOrDQEROZQ5EBgNw6ZK8tRAREdWHgYicytMT8PaWHufny1sLERFRfWQPRG+//TaioqLg6emJuLg47Nix46rtlyxZgvbt28PLywuRkZF4/PHHceXKFRdVSw3RooV0X1Agbx1ERET1kTUQrVq1CikpKZg7dy727NmDbt26ITExEefqOUf7888/xzPPPIO5c+fiwIED+PDDD7Fq1So8++yzLq6c7NG8uXTPQEREREolayBavHgxHnzwQSQnJ6Njx45IS0uDt7c3li1bVmf7n376CbfddhvuvfdeREVFYciQIRg3btw1R5VIXgxERESkdB5ybbiiogK7d+9GamqqZZlarUZCQgK2b99e53t69+6NTz/9FDt27ECvXr1w/PhxrF27FhMmTKh3O+Xl5SgvL7c8LyoqAgAYDAYYDAYHfRq6msBADQA1zp83wmAwWZab9z/7QRnYH8rBvlAO9oVyOLsPZAtEFy5cgNFoREhIiNXykJAQHDx4sM733Hvvvbhw4QL69OkDIQQqKysxZcqUqx4yW7hwIebPn19reUZGBrzNs33JqUpKugGIws8/H0abNodrvZ6enu76oqhe7A/lYF8oB/tCfmVlZU5dv2yBqCEyMzPx8ssv45133kFcXByOHj2KGTNm4IUXXsDs2bPrfE9qaipSUlIsz4uKihAZGYkBAwaghXm2LznVtm1qpKcDQUE34o47YizLDQYD0tPTMXjwYGi1WhkrJID9oSTsC+VgXyhHvpNPVZYtEAUFBUGj0SAvL89qeV5eHkJDQ+t8z+zZszFhwgQ88MADAIAuXbqgtLQUDz30EJ577jmo1bWnROn1euj1+lrLtVotf7hdxHwtosJCDbRaTa3X2RfKwv5QDvaFcrAv5Ofs/S/bpGqdTofY2Fhs3LjRssxkMmHjxo2Ij4+v8z1lZWW1Qo9GI/2CFbwMsmJxUjURESmdrIfMUlJSMHHiRPTs2RO9evXCkiVLUFpaiuTkZABAUlISIiIisHDhQgDAiBEjsHjxYvTo0cNyyGz27NkYMWKEJRiR8pgDES/MSERESiVrIBo7dizOnz+POXPmIDc3F927d8f69estE61PnTplNSL0/PPPQ6VS4fnnn8fZs2fRsmVLjBgxAi+99JJcH4FswBEiIiJSOtknVU+fPh3Tp0+v87XMzEyr5x4eHpg7dy7mzp3rgsrIUXilaiIiUjrZv7qDmr7qI0Qm09XbEhERyYGBiJyuWTPp3mQC/rouJhERkaIwEJHTeXlJN4CHzYiISJkYiMglOLGaiIiUjIGIXIITq4mISMkYiMgleC0iIiJSMgYicgkeMiMiIiVjICKXYCAiIiIlYyAil+AhMyIiUjIGInIJ87WILl2Stw4iIqK6MBCRSwQGSveFhXJWQUREVDcGInIJBiIiIlIyBiJyCQYiIiJSMgYicgkGIiIiUjIGInIJBiIiIlIyBiJyCXMgunRJ+tZ7IiIiJWEgIpcwByIhgOJiWUshIiKqhYGIXMLTE9Drpcc8bEZERErDQEQuw3lERESkVAxE5DIMREREpFQMROQyDERERKRUDETkMgxERESkVAxE5DIMREREpFQMROQyDERERKRUDETkMgxERESkVAxE5DIMREREpFQMROQyDERERKRUDETkMgxERESkVAxE5DLNmkn3DERERKQ0DETkMhwhIiIipWIgIpdhICIiIqViICKXMQeiS5cAk0nWUoiIiKwwEJHLBARI90IAxcXy1kJERFQdAxG5jKendAN42IyIiJSFgYhcivOIiIhIiRiIyKUYiIiISIkYiMilzPOIGIiIiEhJGIjIpcyBqKhI3jqIiIiqYyAil/L3l+4vXZK3DiIiouoYiMilOEJERERKxEBELmUeIWIgIiIiJWEgIpcyjxDxkBkRESkJAxG5FEeIiIhIiRiIyKU4QkRERErkYUuj5s3tW6lKBezZA7Rp05CSqCnjCBERESmRTYGosBBYsqTqr/urEQKYOhUwGq+vMGqaOEJERERKZFMgAoB//AMIDrat7aOPNrQcauo4QkREREpkUyAymexbaXFxQ0ohd8ARIiIiUiJOqiaXqj5CJIS8tRAREZnZfMjMLD8faNFCenz6NPD++8Dly8DIkUDfvo4uj5oacyAyGoGyMnlrISIiMrN5hGjfPiAqSppH1KEDkJUF3HIL8MYbwHvvAQMGAGvWOK1OaiJ8fAD1Xz91nEdERERKYXMgevppoEsXYPNmoH9/4M47geHDpbkgFy8CDz8MvPKKEyulJkGl4he8EhGR8th8yGznTmDTJqBrV6BbN2lUaOrUqr/2H30UuPVWZ5VJTUlAgHQph+JildylEBERAbBjhKigAAgNlR77+kqHPpo1q3q9WTOeXUa24QgREREpjV1nmalUV39OZAvzqfecQ0REREph11lmkyYBer30+MoVYMoUaaQIAMrLHVwZNVnmEaLi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PhiISFECAqRvvQc4j4iIiFyHgYgURa3mYTMiInI9BiJSHE6sJiIiV1NEIHr77bcRFRUFT09PxMXFYceOHfW2ff/999G3b180a9YMzZo1Q0JCwlXbU+PDESIiInI12QPRqlWrkJKSgrlz52LPnj3o1q0bEhMTce7cuTrbZ2ZmYty4ccjIyMD27dsRGRmJIUOG4OzZsy6unJzFPELEOUREROQqsgeixYsX48EHH0RycjI6duyItLQ0eHt7Y9myZXW2/+yzzzB16lR0794dHTp0wAcffACTyYSNGze6uHJyFh4yIyIiV5M1EFVUVGD37t1ISEiwLFOr1UhISMD27dttWkdZWRkMBgOam4+zUKPHQERERK7mIefGL1y4AKPRiJCQEKvlISEhOHjwoE3rmDVrFsLDw61CVXXl5eUor3ZBm6KiIgCAwWCAwWBoYOXkCOb9X7MfAgPVADQ4f94Eg8EoQ2Xuqb7+INdjXygH+0I5nN0Hsgai6/XKK69g5cqVyMzMhKenZ51tFi5ciPnz59danpGRAW9vb2eXSDZIT0+3ev7nn1EAuuHAgTysXcsJ865Wsz9IPuwL5WBfyK+srMyp65c1EAUFBUGj0SAvL89qeV5eHkJDQ6/63tdffx2vvPIK/u///g9du3att11qaipSUlIsz4uKihAZGYkBAwaghfnYDMnCYDAgPT0dgwcPhlartSwvK1MhLQ3QakNwxx13yFihe6mvP8j12BfKwb5Qjnwnz6OQNRDpdDrExsZi48aNGDVqFABYJkhPnz693vf985//xEsvvYQNGzagZ8+eV92GXq+HXq+vtVyr1fKHWyFq9oX5CGpBgRparezz/t0O/20oB/tCOdgX8nP2/pf9kFlKSgomTpyInj17olevXliyZAlKS0uRnJwMAEhKSkJERAQWLlwIAHj11VcxZ84cfP7554iKikJubi4AwNfXF76+vrJ9DnIcTqomIiJXkz0QjR07FufPn8ecOXOQm5uL7t27Y/369ZaJ1qdOnYJaXTVK8O6776KiogJ333231Xrmzp2LefPmubJ0chLzCYMFBYAQgEolbz1ERNT0yR6IAGD69On1HiLLzMy0en7ixAnnF0SyMo8QGQxASQng5ydvPURE1PRxggYpjrc3YD5pkIfNiIjIFRiISJE4j4iIiFyJgYgUqWVL6f78eXnrICIi98BARIoUHCzd1/Mdv0RERA7FQESKZL4WUY1rdhIRETkFAxEpEkeIiIjIlRiISJEYiIiIyJUYiEiRzIGIh8yIiMgVGIhIkcxziDhCRERErsBARIrEQ2ZERORKDESkSNUDkRDy1kJERE0fAxEpkvnCjAYDUFgoaylEROQGGIhIkTw9gYAA6TEPmxERkbMxEJFi8UwzIiJyFQYiUixOrCYiIldhICLFYiAiIiJXYSAixeK1iIiIyFUYiEixOIeIiIhchYGIFIuBiIiIXIWBiBQrLEy6z8mRtw4iImr6GIhIsSIipPuzZ+Wtg4iImj4GIlIscyDKyQGMRnlrISKipo2BiBQrNBRQq4HKSp5pRkREzsVARIrl4VF16j0PmxERkTMxEJGicR4RERG5AgMRKRoDERERuQIDESkaAxEREbkCAxEpWqtW0j0DERERORMDESkaR4iIiMgVGIhI0RiIiIjIFRiISNHMgej0aUAIeWshIqKmi4GIFK1NG+m+pAQoKJC3FiIiaroYiEjRvLyqvuT1+HF5ayEioqaLgYgULzpaus/OlrcOIiJquhiISPFuuEG65wgRERE5CwMRKR5HiIiIyNkYiEjxOEJERETOxkBEiscRIiIicjYGIlI88wjRyZOA0ShvLURE1DQxEJHihYcDWi1QWSldoJGIiMjRGIhI8TQaoG1b6fHhw/LWQkRETRMDETUKHTtK93/8IW8dRETUNDEQUaPAQERERM7EQESNAgMRERE5EwMRNQqdOkn3f/zBb70nIiLHYyCiRuHGGwG1Grh4EcjNlbsaIiJqahiIqFHw9JRCEQBkZclaChERNUEMRNRo9Owp3e/cKW8dRETU9DAQUaNxyy3S/Y4d8tZBRERNDwMRNRrmQLRzJydWExGRYzEQUaPRvTvg4QGcOwecOiV3NURE1JQwEFGj4eUFxMZKjzdtkrcWIiJqWhiIqFEZPFi6T0+Xtw4iImpaGIioUTEHov/7P8BkkrcWIiJqOhiIqFG59VbA1xc4f55nmxERkeMwEFGjotMBd90lPf7kE3lrISKipoOBiBqdpCTpfuVKoLxc3lqIiKhpUEQgevvttxEVFQVPT0/ExcVhxzWOhXz55Zfo0KEDPD090aVLF6xdu9ZFlZISDBoEREQABQXARx/JXQ0RETUFsgeiVatWISUlBXPnzsWePXvQrVs3JCYm4ty5c3W2/+mnnzBu3DhMnjwZe/fuxahRozBq1Cjs37/fxZWTXDQa4KmnpMcLFgCXLslbDxERNX4qIeS95m9cXBxuueUW/Otf/wIAmEwmREZG4tFHH8UzzzxTq/3YsWNRWlqK7777zrLs1ltvRffu3ZGWlnbN7RUVFSEgIAAXLlxAixYtHPdByG4GgwFr167FHXfcAa1Wa9d7L18GunQBjh2TrmDduTOwezdQWgoEBgKtWwOtWgGhodLN2xtQq6WbRlN18/AAtFpAr5fuS0uBwkLg4kUpaKnV0muenoCPT9VNCKlNQQFQUiKtx8NDauvtXXXTaICiIulmbqfTWbfz8QGMRqlNcbFUg7kmnU7atpeXdKuslF4vKZH2gXmbnp5V7fV6wGCQXi8rq2rn6VnVTquVlhkMwJUr0q2kpBK7du3E7bffAj8/D3h5SW2EACoqpDbl5dJNo6lan5eXtJ+EkNZXUVF1Mxql/lKpqm4NeV5T9dfVauleCOnMQ/N9XW3rW2fN7ZoJUfdV0WvWaourbbcmg8GArVu3ok+fPtf8t1HXZ6qv5pptarara1+Z21VvW9dnt3V9NfuorjbmduabLe3M26/5c2G+N5mkn0dzW/Nr12pXWWnA1q2b0b//7dDptJZ2RqN1u5rrqdnOaKxqV3O7arV1u/rOoHXFb+vqfVrX4/per97/V/tZqLmuqy2r3rcmE5Cfn49+/YJw6dIl+Pv7N/xD1sPD4Wu0Q0VFBXbv3o3U1FTLMrVajYSEBGzfvr3O92zfvh0pKSlWyxITE7FmzZo625eXl6O82kSToqIiANJ/OAaD4To/AV0P8/5vSD94eAAffqjCkCEa7NypqvWFr7t3O6JCd+MBIF7uIggAoAUwQO4iCIDUF4PkLoIASH3hPLIGogsXLsBoNCIkJMRqeUhICA4ePFjne3Jzc+tsn5ubW2f7hQsXYv78+bWWZ2RkwNvbu4GVkyOlX8dVFp9+OhiffXYTWrUqQd++Z+HnV4HiYi0uXPBGQYEnLl7U4+JFTxgM6r/+ylBBCBWMRhVMJuneaFTDYFCjslINvd4IX98K+PgY4O1d+deohwYGgxrl5RpcueKB8nINAMDXtwK+vgZ4elbCZFKhslJaT0WFBhUVGpSXa2A0quDtXQlvbwM8PY0wmYDKSus2V65ooFIB3t7SNvV6I4xGlaWdeZ3l5RpoNCZ4ehrh6VkJnc4Ik0llqa/qpoGHhwl6vRE6ndHSzrwug0ENo1ENo1EFDw8TdDoTtFojtFoThFChoqJqe0JIf6p5eJjg4WGCViu1ldpV1Wb+a9DczsNDwMPDBLVaekH6i7Hqz8nqz6v+qlRVe826vZlKJSxtq7cxmVRQqcRff12KWn+5Vl9/TXW9bh5BqLndutrZor5t2/ZeW19XAahqXHsfVO3fqteq9pW5TdVf96q/2opqf7ULy3Lr9Yoaf+lL7aSRDpVVn2o0AoCAWn31dmq1sNp2zbrqXp/1z4/JVPXzoVYLy6167dIIhMpquw1tV/31mu3Mn6V6bdXbqlSARmP6q71538ip9s+59c9iXf9e6vo5kNrWXkftZXX9G6y+74Ar+GtMwylkDUSukJqaajWiVFRUhMjISAwYMICHzGRmMBiQnp6OwYMH233IzOyOO4A5cwDAB0DINVrbQgvA08a2trazlc6B69LAtr+mNJZHV+8PW6cbyj4tsUlwxL8Nx7ElzNkT+FR2rNNR7ap+MV+9be12dfdFw9dXfxtb1qd0zqi9ap/k55sQFuaETfxF1kAUFBQEjUaDvLw8q+V5eXkIDQ2t8z2hoaF2tdfr9dDr9bWWa7VaBfxHQwD7QmnYH8rBvlAO9oX8nL3/Zf1zTqfTITY2Fhs3brQsM5lM2LhxI+Lj657LEB8fb9UekA651NeeiIiI6FpkP2SWkpKCiRMnomfPnujVqxeWLFmC0tJSJCcnAwCSkpIQERGBhQsXAgBmzJiBfv36YdGiRRg+fDhWrlyJXbt24b333pPzYxAREVEjJnsgGjt2LM6fP485c+YgNzcX3bt3x/r16y0Tp0+dOgW1umogq3fv3vj888/x/PPP49lnn0W7du2wZs0adO7cWa6PQERERI2c7IEIAKZPn47p06fX+VpmZmatZffccw/uueceJ1dFRERE7oKnhBAREZHbYyAiIiIit8dARERERG6PgYiIiIjcHgMRERERuT0GIiIiInJ7DERERETk9hiIiIiIyO0xEBEREZHbU8SVql1JCAEAKC4u5jcXy8xgMKCsrAxFRUXsCwVgfygH+0I52BfKUVxcDKDq97ijuV0gys/PBwBER0fLXAkRERHZKz8/HwEBAQ5fr9sFoubNmwOQvjTWGTuUbFdUVITIyEicPn0a/v7+cpfj9tgfysG+UA72hXJcunQJrVu3tvwedzS3C0RqtTRtKiAggD/cCuHv78++UBD2h3KwL5SDfaEc5t/jDl+vU9ZKRERE1IgwEBEREZHbc7tApNfrMXfuXOj1erlLcXvsC2VhfygH+0I52BfK4ey+UAlnnb9GRERE1Ei43QgRERERUU0MREREROT2GIiIiIjI7TEQERERkdtzu0D09ttvIyoqCp6enoiLi8OOHTvkLqnJ2bx5M0aMGIHw8HCoVCqsWbPG6nUhBObMmYOwsDB4eXkhISEBR44csWpTUFCA8ePHw9/fH4GBgZg8eTJKSkpc+CmahoULF+KWW26Bn58fgoODMWrUKBw6dMiqzZUrVzBt2jS0aNECvr6++Pvf/468vDyrNqdOncLw4cPh7e2N4OBgPPXUU6isrHTlR2n03n33XXTt2tVygb/4+HisW7fO8jr7QT6vvPIKVCoVZs6caVnG/nCNefPmQaVSWd06dOhged2l/SDcyMqVK4VOpxPLli0Tv//+u3jwwQdFYGCgyMvLk7u0JmXt2rXiueeeE//9738FAPH1119bvf7KK6+IgIAAsWbNGvHrr7+KkSNHiujoaHH58mVLm6FDh4pu3bqJn3/+WWzZskXExMSIcePGufiTNH6JiYli+fLlYv/+/SIrK0vccccdonXr1qKkpMTSZsqUKSIyMlJs3LhR7Nq1S9x6662id+/eltcrKytF586dRUJCgti7d69Yu3atCAoKEqmpqXJ8pEbr22+/Fd9//704fPiwOHTokHj22WeFVqsV+/fvF0KwH+SyY8cOERUVJbp27SpmzJhhWc7+cI25c+eKTp06iZycHMvt/Pnzltdd2Q9uFYh69eolpk2bZnluNBpFeHi4WLhwoYxVNW01A5HJZBKhoaHitddesywrLCwUer1efPHFF0IIIf744w8BQOzcudPSZt26dUKlUomzZ8+6rPam6Ny5cwKA+PHHH4UQ0r7XarXiyy+/tLQ5cOCAACC2b98uhJACrlqtFrm5uZY27777rvD39xfl5eWu/QBNTLNmzcQHH3zAfpBJcXGxaNeunUhPTxf9+vWzBCL2h+vMnTtXdOvWrc7XXN0PbnPIrKKiArt370ZCQoJlmVqtRkJCArZv3y5jZe4lOzsbubm5Vv0QEBCAuLg4Sz9s374dgYGB6Nmzp6VNQkIC1Go1fvnlF5fX3JRcunQJQNWXHO/evRsGg8GqPzp06IDWrVtb9UeXLl0QEhJiaZOYmIiioiL8/vvvLqy+6TAajVi5ciVKS0sRHx/PfpDJtGnTMHz4cKv9DvDfhasdOXIE4eHhuOGGGzB+/HicOnUKgOv7wW2+3PXChQswGo1WOw0AQkJCcPDgQZmqcj+5ubkAUGc/mF/Lzc1FcHCw1eseHh5o3ry5pQ3Zz2QyYebMmbjtttvQuXNnANK+1ul0CAwMtGpbsz/q6i/za2S7ffv2IT4+HleuXIGvry++/vprdOzYEVlZWewHF1u5ciX27NmDnTt31nqN/y5cJy4uDitWrED79u2Rk5OD+fPno2/fvti/f7/L+8FtAhGRu5s2bRr279+PrVu3yl2K22rfvj2ysrJw6dIlfPXVV5g4cSJ+/PFHuctyO6dPn8aMGTOQnp4OT09Puctxa8OGDbM87tq1K+Li4tCmTRusXr0aXl5eLq3FbQ6ZBQUFQaPR1JqdnpeXh9DQUJmqcj/mfX21fggNDcW5c+esXq+srERBQQH7qoGmT5+O7777DhkZGWjVqpVleWhoKCoqKlBYWGjVvmZ/1NVf5tfIdjqdDjExMYiNjcXChQvRrVs3LF26lP3gYrt378a5c+dw8803w8PDAx4eHvjxxx/x5ptvwsPDAyEhIewPmQQGBuLGG2/E0aNHXf7vwm0CkU6nQ2xsLDZu3GhZZjKZsHHjRsTHx8tYmXuJjo5GaGioVT8UFRXhl19+sfRDfHw8CgsLsXv3bkubTZs2wWQyIS4uzuU1N2ZCCEyfPh1ff/01Nm3ahOjoaKvXY2NjodVqrfrj0KFDOHXqlFV/7Nu3zyqkpqenw9/fHx07dnTNB2miTCYTysvL2Q8uNmjQIOzbtw9ZWVmWW8+ePTF+/HjLY/aHPEpKSnDs2DGEhYW5/t+F3VPCG7GVK1cKvV4vVqxYIf744w/x0EMPicDAQKvZ6XT9iouLxd69e8XevXsFALF48WKxd+9ecfLkSSGEdNp9YGCg+Oabb8Rvv/0m7rrrrjpPu+/Ro4f45ZdfxNatW0W7du142n0DPPLIIyIgIEBkZmZandZaVlZmaTNlyhTRunVrsWnTJrFr1y4RHx8v4uPjLa+bT2sdMmSIyMrKEuvXrxctW7bk6cV2euaZZ8SPP/4osrOzxW+//SaeeeYZoVKpxA8//CCEYD/IrfpZZkKwP1zliSeeEJmZmSI7O1ts27ZNJCQkiKCgIHHu3DkhhGv7wa0CkRBCvPXWW6J169ZCp9OJXr16iZ9//lnukpqcjIwMAaDWbeLEiUII6dT72bNni5CQEKHX68WgQYPEoUOHrNaRn58vxo0bJ3x9fYW/v79ITk4WxcXFMnyaxq2ufgAgli9fbmlz+fJlMXXqVNGsWTPh7e0t/va3v4mcnByr9Zw4cUIMGzZMeHl5iaCgIPHEE08Ig8Hg4k/TuN1///2iTZs2QqfTiZYtW4pBgwZZwpAQ7Ae51QxE7A/XGDt2rAgLCxM6nU5ERESIsWPHiqNHj1ped2U/qIQQosFjW0RERERNgNvMISIiIiKqDwMRERERuT0GIiIiInJ7DERERETk9hiIiIiIyO0xEBEREZHbYyAiIiIit8dARERkp0mTJkGlUkGlUmHNmjUOXXdmZqZl3aNGjXLouomofgxERGT1C7767ejRo3KXplhDhw5FTk6O1bd11xeQJk2aZHO46d27N3JycjBmzBgHVUpEtvCQuwAiUoahQ4di+fLlVstatmxZq11FRQV0Op2rylIsvV7vlG811+l0CA0NhZeXF8rLyx2+fiKqG0eIiAhA1S/46jeNRoP+/ftj+vTpmDlzJoKCgpCYmAgA2L9/P4YNGwZfX1+EhIRgwoQJuHDhgmV9paWlSEpKgq+vL8LCwrBo0SL0798fM2fOtLSpa0QlMDAQK1assDw/ffo0xowZg8DAQDRv3hx33XUXTpw4YXndPPry+uuvIywsDC1atMC0adNgMBgsbcrLyzFr1ixERkZCr9cjJiYGH374IYQQiImJweuvv25VQ1ZWltNGyE6cOFHnaFz//v0dvi0ish0DERFd00cffQSdTodt27YhLS0NhYWFGDhwIHr06IFdu3Zh/fr1yMvLszrM89RTT+HHH3/EN998gx9++AGZmZnYs2ePXds1GAxITEyEn58ftmzZgm3btsHX1xdDhw5FRUWFpV1GRgaOHTuGjIwMfPTRR1ixYoVVqEpKSsIXX3yBN998EwcOHMC///1v+Pr6QqVS4f777681MrZ8+XLcfvvtiImJadgOu4rIyEjk5ORYbnv37kWLFi1w++23O3xbRGSH6/ueWiJqCiZOnCg0Go3w8fGx3O6++24hhPQt4D169LBq/8ILL4ghQ4ZYLTt9+rQAIA4dOiSKi4uFTqcTq1evtryen58vvLy8rL5RHID4+uuvrdYTEBAgli9fLoQQ4pNPPhHt27cXJpPJ8np5ebnw8vISGzZssNTepk0bUVlZaWlzzz33iLFjxwohhDh06JAAINLT0+v87GfPnhUajUb88ssvQgghKioqRFBQkFixYsVV99ddd91VazkA4enpabUffXx8hIeHR53tL1++LOLi4sSdd94pjEajTdsgIufgHCIiAgAMGDAA7777ruW5j4+P5XFsbKxV219//RUZGRnw9fWttZ5jx47h8uXLqKioQFxcnGV58+bN0b59e7tq+vXXX3H06FH4+flZLb9y5QqOHTtmed6pUydoNBrL87CwMOzbtw+AdPhLo9GgX79+dW4jPDwcw4cPx7Jly9CrVy/873//Q3l5Oe655x67ajV74403kJCQYLVs1qxZMBqNtdref//9KC4uRnp6OtRqDtgTyYmBiIgASAGovkNE1cMRAJSUlGDEiBF49dVXa7UNCwuzee6NSqWCEMJqWfW5PyUlJYiNjcVnn31W673VJ3xrtdpa6zWZTAAALy+va9bxwAMPYMKECXjjjTewfPlyjB07Ft7e3jZ9hppCQ0Nr7Uc/Pz8UFhZaLXvxxRexYcMG7Nixo1bgIyLXYyAiIrvdfPPN+M9//oOoqCh4eNT+b6Rt27bQarX45Zdf0Lp1awDAxYsXcfjwYauRmpYtWyInJ8fy/MiRIygrK7PazqpVqxAcHAx/f/8G1dqlSxeYTCb8+OOPtUZuzO644w74+Pjg3Xffxfr167F58+YGbctW//nPf7BgwQKsW7cObdu2deq2iMg2HKMlIrtNmzYNBQUFGDduHHbu3Iljx45hw4YNSE5OhtFohK+vLyZPnoynnnoKmzZtwv79+zFp0qRah4UGDhyIf/3rX9i7dy927dqFKVOmWI32jB8/HkFBQbjrrruwZcsWZGdnIzMzE4899hjOnDljU61RUVGYOHEi7r//fqxZs8ayjtWrV1vaaDQaTJo0CampqWjXrh3i4+Mds6PqsH//fiQlJWHWrFno1KkTcnNzkZubi4KCAqdtk4iujYGIiOwWHh6Obdu2wWg0YsiQIejSpQtmzpyJwMBAS+h57bXX0LdvX4wYMQIJCQno06dPrblIixYtQmRkJPr27Yt7770XTz75pNWhKm9vb2zevBmtW7fG6NGjcdNNN2Hy5Mm4cuWKXSNG7777Lu6++25MnToVHTp0wIMPPojS0lKrNpMnT0ZFRQWSk5OvY89c265du1BWVoYXX3wRYWFhltvo0aOdul0iujqVqHkAn4jISfr374/u3btjyZIlcpdSy5YtWzBo0CCcPn0aISEhV207adIkFBYWOvxrO1y9DSKqwhEiInJr5eXlOHPmDObNm4d77rnnmmHI7LvvvoOvry++++47h9azZcsW+Pr61jmRnIich5OqicitffHFF5g8eTK6d++Ojz/+2Kb3/POf/8Tzzz8PQDqrzpF69uyJrKwsAKjzsgZE5Bw8ZEZERERuj4fMiIiIyO0xEBEREZHbYyAiIiIit8dARERERG6PgYiIiIjcHgMRERERuT0GIiIiInJ7DERERETk9hiIiIiIyO39PyXIn4nOWNBYAAAAAElFTkSuQmCC\n"},"metadata":{}}]},{"cell_type":"code","source":["taps"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Gl45pHTr4jQO","outputId":"46144982-2f1e-4ca2-81a4-7fcba8e3b0cd","executionInfo":{"status":"ok","timestamp":1713916800969,"user_tz":180,"elapsed":331,"user":{"displayName":"Javier Ernesto Kolodziej","userId":"07607278774554166393"}}},"execution_count":2,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([-6.24626469e-19, -3.09386982e-04, -5.28204854e-04, -5.68603873e-04,\n","       -3.84733845e-04,  8.00411993e-19,  4.78240340e-04,  8.72722835e-04,\n","        9.88204050e-04,  6.92866882e-04, -1.31056145e-18, -8.91532416e-04,\n","       -1.63296122e-03, -1.84452998e-03, -1.28447138e-03,  2.10513786e-18,\n","        1.61758285e-03,  2.92513469e-03,  3.26049078e-03,  2.24039932e-03,\n","       -3.10636255e-18, -2.74988519e-03, -4.91367845e-03, -5.41615936e-03,\n","       -3.68344907e-03,  4.21622867e-18,  4.44140561e-03,  7.87802495e-03,\n","        8.62944908e-03,  5.83889238e-03, -5.32609478e-18, -6.99531745e-03,\n","       -1.23941762e-02, -1.35824371e-02, -9.21034960e-03,  6.32731947e-18,\n","        1.11516029e-02,  1.99371744e-02,  2.21148625e-02,  1.52357860e-02,\n","       -7.12189588e-18, -1.93284298e-02, -3.57407883e-02, -4.14148278e-02,\n","       -3.02201393e-02,  7.63204534e-18,  4.61664134e-02,  1.00235498e-01,\n","        1.51038522e-01,  1.87203448e-01,  2.00294682e-01,  1.87203448e-01,\n","        1.51038522e-01,  1.00235498e-01,  4.61664134e-02,  7.63204534e-18,\n","       -3.02201393e-02, -4.14148278e-02, -3.57407883e-02, -1.93284298e-02,\n","       -7.12189588e-18,  1.52357860e-02,  2.21148625e-02,  1.99371744e-02,\n","        1.11516029e-02,  6.32731947e-18, -9.21034960e-03, -1.35824371e-02,\n","       -1.23941762e-02, -6.99531745e-03, -5.32609478e-18,  5.83889238e-03,\n","        8.62944908e-03,  7.87802495e-03,  4.44140561e-03,  4.21622867e-18,\n","       -3.68344907e-03, -5.41615936e-03, -4.91367845e-03, -2.74988519e-03,\n","       -3.10636255e-18,  2.24039932e-03,  3.26049078e-03,  2.92513469e-03,\n","        1.61758285e-03,  2.10513786e-18, -1.28447138e-03, -1.84452998e-03,\n","       -1.63296122e-03, -8.91532416e-04, -1.31056145e-18,  6.92866882e-04,\n","        9.88204050e-04,  8.72722835e-04,  4.78240340e-04,  8.00411993e-19,\n","       -3.84733845e-04, -5.68603873e-04, -5.28204854e-04, -3.09386982e-04,\n","       -6.24626469e-19])"]},"metadata":{},"execution_count":2}]},{"cell_type":"markdown","source":["`from scipy.signal import firwin, freqz`\n","\n","`scipy.signal` library is used to perform signal processing operations including digital filter design. The `firwin` function is used to design FIR filters and the `freqz` function is used to compute the frequency response of a digital filter. These functions are commonly used in Python for filter design and analysis."],"metadata":{"id":"A4NW9VZR5DUC"}},{"cell_type":"markdown","source":["\n","```\n","# Filter requirements\n","fs = 1000 # Sample rate, Hz\n","cutoff = 100 # Desired cutoff frequency, Hz\n","trans_width = 100 # Width of transition from pass band to stop band, Hz\n","numtaps = 101 # Size of the FIR filter\n","```\n","These are the filter requirements, which define the specifications for the FIR filter to be designed:\n","\n","**fs** is the sampling rate of the input signal, in Hz.\n","\n","**cutoff** is the desired cutoff frequency of the filter, in Hz. Frequencies below the cutoff frequency will be passed, while frequencies above will be attenuated.\n","\n","**trans_width** is the width of the transition band between the pass band and stop band of the filter, in Hz. This is the frequency range over which the filter transitions from passing to attenuating the signal.\n","\n","**numtaps** is the number of filter coefficients or taps, which determines the order and complexity of the filter.\n"],"metadata":{"id":"HRK_c7j35Wtq"}},{"cell_type":"markdown","source":["\n","```\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='hamming', pass_zero=True, fs=fs)\n","```\n","This line of code uses the firwin function from the scipy.signal library to design the FIR filter coefficients. The function takes the following arguments:\n","\n","**numtaps:** the number of filter coefficients to compute\n","cutoff: the cutoff frequency of the filter\n","\n","**window:** the window function to apply to the filter coefficients. A window function helps to smooth out the transition band of the filter.\n","\n","**pass_zero:** whether to create a low-pass or high-pass filter. If True, a low-pass filter is created that passes frequencies below cutoff. If False, a high-pass filter is created that passes frequencies above cutoff.\n","\n","**fs:** the sampling rate of the input signal, in Hz.\n","\n","In this case, a low-pass filter is designed using a Hamming window function. The resulting filter coefficients are stored in the taps variable."],"metadata":{"id":"fmuiRIwo5oW0"}},{"cell_type":"markdown","source":["\n","```\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","```\n","This line of code uses the freqz function from the scipy.signal library to compute the frequency response of the filter. The function takes the following arguments:\n","\n","**b:** the numerator coefficients of the filter (in this case, the FIR filter coefficients)\n","\n","**a:** the denominator coefficients of the filter (in this case, a value of 1 since we are using an FIR filter)\n","\n","**worN:** the number of frequency points to compute the frequency response at (in this case, 2000 points)\n","\n","The function returns the frequency values w (in radians/sample) and the complex frequency response h of the filter at those frequencies. The freqz function is commonly used to visualize the frequency response of a digital filter.\n"],"metadata":{"id":"9v4uXbio58AR"}},{"cell_type":"markdown","source":["\n","```\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, np.abs(h), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-0.05, 1.05])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n","```\n","This code block uses matplotlib library to plot the frequency response of the designed FIR filter.\n","\n","`fig, ax1 = plt.subplots()` creates a figure and an axis object for the plot.\n","\n","`ax1.set_title('Digital filter frequency response')` sets the title of the plot.\n","\n","`ax1.plot(0.5*fs*w/np.pi, np.abs(h), 'b')` plots the frequency response of the filter using the frequency values w and the complex frequency response h computed by the freqz function. `np.abs(h)` is used to plot the magnitude response of the filter. The frequency values are converted to Hz using the formula `0.5*fs*w/np.pi`. `'b'` specifies that the plot should be shown in blue.\n","\n","`ax1.set_ylabel('Amplitude [dB]', color='b')` sets the label for the y-axis of the plot.\n","\n","`ax1.set_xlabel('Frequency [Hz]')` sets the label for the x-axis of the plot.\n","\n","`ax1.set_ylim([-0.05, 1.05])` sets the y-axis limits of the plot to be between -0.05 and 1.05.\n","\n","`ax1.set_xlim([0, 0.5*fs])` sets the x-axis limits of the plot to be between 0 and half of the sampling rate fs/2.\\\n","\n","`ax1.grid()` adds a grid to the plot.\n","\n","`plt.show()` displays the plot."],"metadata":{"id":"3ttPxkTV6NRi"}},{"cell_type":"markdown","source":["# Filtro pasa bajos utilizando la ventana de Blackman"],"metadata":{"id":"1WswjsI7AmlY"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000 # Sample rate, Hz\n","cutoff = 100 # Desired cutoff frequency, Hz\n","trans_width = 100 # Width of transition from pass band to stop band, Hz\n","numtaps = 101 # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='blackman', pass_zero=True, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, np.abs(h), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-0.05, 1.05])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"id":"kmpB3Rjm8MOe","colab":{"base_uri":"https://localhost:8080/","height":472},"outputId":"fcc6129d-eb32-4819-d9b2-80dc8cdd6a26","executionInfo":{"status":"ok","timestamp":1713918072087,"user_tz":180,"elapsed":438,"user":{"displayName":"Javier Ernesto Kolodziej","userId":"07607278774554166393"}}},"execution_count":4,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"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\n"},"metadata":{}}]},{"cell_type":"markdown","source":["# Low Pass Filter using Rectangular window method"],"metadata":{"id":"m6lA4wfeArdV"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000 # Sample rate, Hz\n","cutoff = 100 # Desired cutoff frequency, Hz\n","trans_width = 100 # Width of transition from pass band to stop band, Hz\n","numtaps = 101 # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='rectangular', pass_zero=True, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, np.abs(h), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-0.05, 1.05])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"YVonrpiD66vm","outputId":"54bfa0ed-e7c0-4b1f-8f63-02c3573bfc0d"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# Low Pass Filter using Hanning window method"],"metadata":{"id":"LMuXdnsXAwHC"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000 # Sample rate, Hz\n","cutoff = 100 # Desired cutoff frequency, Hz\n","trans_width = 100 # Width of transition from pass band to stop band, Hz\n","numtaps = 101 # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='hann', pass_zero=True, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, np.abs(h), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-0.05, 1.05])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"_GnHkmaD8o_4","outputId":"7cf5a861-6541-4028-c25d-ab00cdf91195"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# **High Pass Filter**"],"metadata":{"id":"p5bxD1oAA1TC"}},{"cell_type":"markdown","source":["# High Pass Filter using Hanning window method"],"metadata":{"id":"rzYyH4udA5FI"}},{"cell_type":"markdown","source":["In this code, we specify the filter requirements such as the sample rate, cutoff frequency, transition width, and number of taps. Then, we use the firwin function to compute the filter coefficients using the Hann window function and the `pass_zero=False` parameter to create a high-pass filter. Finally, we compute the frequency response of the filter using the freqz function and plot it using matplotlib."],"metadata":{"id":"FxqcjdG7_zhz"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","cutoff = 100  # Desired cutoff frequency, Hz\n","trans_width = 100  # Width of transition from pass band to stop band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='hann', pass_zero=False, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"X0GywL1I8qbM","outputId":"b7f835fd-3bc6-411c-ded0-8746cffa8e63"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# High Pass Filter using Hamming window method"],"metadata":{"id":"HTDjKYZaBCZM"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","cutoff = 100  # Desired cutoff frequency, Hz\n","trans_width = 100  # Width of transition from pass band to stop band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='hamming', pass_zero=False, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"EgA_mYL_B3ne","outputId":"e704187e-a65b-45d1-8cad-4084f4e7febf"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# High Pass Filter using Blackman window method"],"metadata":{"id":"mcPCbwL7BFYe"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","cutoff = 100  # Desired cutoff frequency, Hz\n","trans_width = 100  # Width of transition from pass band to stop band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='blackman', pass_zero=False, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"4pzUpEC5B72t","outputId":"919ade69-fb8e-42ea-c0a7-664f0c98e0a0"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# High Pass Filter using Rectangular window method"],"metadata":{"id":"p0vMZ9whBH7u"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","cutoff = 100  # Desired cutoff frequency, Hz\n","trans_width = 100  # Width of transition from pass band to stop band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, cutoff, window='rectangular', pass_zero=False, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"VxyCPjujB-nu","outputId":"7f485ae5-2479-4fee-97b0-bb222a24186a"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# **Band-pass Filter**"],"metadata":{"id":"lnxsEs-WBMED"}},{"cell_type":"markdown","source":["# Band-pass ass Filter using blackman window method"],"metadata":{"id":"yrM2iRqIBQ53"}},{"cell_type":"markdown","source":["In this code, we specify the filter requirements such as the sample rate, band-pass range, transition width, and number of taps. Then, we use the firwin function to compute the filter coefficients using the Blackman window function and the `pass_zero=False` parameter to create a band-pass filter. Finally, we compute the frequency response of the filter using the freqz function and plot it using matplotlib."],"metadata":{"id":"s0oMjNf__uvL"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","band = [200, 400]  # Desired band-pass range, Hz\n","trans_width = 100  # Width of transition from pass band to stop band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, band, window='blackman', pass_zero=False, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"-d1YQGtt_Q5s","outputId":"76e70968-92fd-40b2-b967-af5670b9ce5c"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# Band-pass ass Filter using Hanning window method"],"metadata":{"id":"cC60xwEXBXza"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","band = [200, 400]  # Desired band-pass range, Hz\n","trans_width = 100  # Width of transition from pass band to stop band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, band, window='hann', pass_zero=False, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"JYS9SOABCIre","outputId":"04a17b19-4568-4a43-e883-8b5f6e6f5683"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# Band-pass ass Filter using Hamming window method"],"metadata":{"id":"HOe_WV_XBaRl"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","band = [200, 400]  # Desired band-pass range, Hz\n","trans_width = 100  # Width of transition from pass band to stop band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, band, window='hamming', pass_zero=False, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"B6XZxb1CCLrP","outputId":"7245ec0f-817b-4cfd-e6b5-cb02cf61f289"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAZYAAAEWCAYAAABFSLFOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAAsTAAALEwEAmpwYAABGB0lEQVR4nO29eZwdVZn//36yL52N7CE7kBDWAIGAIkRBWURxlNEguAHD6Au/ioI4yDgjOgzMiKiMDj8ExVEZlnFkERkgLA3EkIQEyEIWSEJI0mnSnaSzdPakn98fpw63bvW91XVv361vP+/X677qVp2qU8+tW+d86nnOUqKqGIZhGEah6FJuAwzDMIzqwoTFMAzDKCgmLIZhGEZBMWExDMMwCooJi2EYhlFQTFgMwzCMgmLCYsQiIv+fiHy/0PtmOV5F5MgsacNF5CUR2SkiPxGR74nIvUHa+ODYbvmeO4Ftaecv1nkMoxooWkE0Kh8RWQsMBw4Ch4BlwO+AX6lqC4CqfjVpfuF9RWQG8AdVHV0gc68GNgP9tY3BVyJSG5z73gKdO6fzG0ZnxzwW4xOq2g8YB9wGfBf4dXlNysg4YFkpKnUR6Zrr+YvpLVUiWa6RYThU1T6d9AOsBc6NbDsNaAGOC9Z/C/xLKP0GoB7YCFwFKHBkeF+gL7AnyKc5+IwK8n4F2Bbk8QugRyjv9/OK2PRb4ACwP8jrXOAHOK8EYHxwbDfgFpz3tTfY9xfBPkcDs4CtwErgs5H87wKeBHZluCbZzv9H4A/AjuBaDMCJcj1QF1yLrkEeXYHbcV7PGuAab3Om/yL8+4L104E5wbVbBMwIpdUCPwL+CuwEngGGhNLPDB27HvgycCqwydsX7PdpYFGWe6XVNQr+0/8FGoF3gG9E7qMFwbXZBNwR+a+uxt1D9cD1oeN6Aj8L0jYG33sGaTOADcB1QENw7FdCx16I87p3Btc/nO9FwBvBNZgDnFDu8lfNn7IbYJ8y/vkZhCXYvg74WvD9twTCApwPvAccC/QJKtVWwhJ8nwFsiOR7SlBBdgsqmOXAtaH0jMISzTtY/wEZhCVYrwWuCu3bN6hQvxKc+yRcBX9MKO/twAdxXnyvhOc/AHwqOKY38Ahwd3C+YcB84O+D/b8KrADGAIcBL5BQWIDDgS1BxdkF+GiwPjT0e1cDkwI7aoHbgrRxuIr2UqA7MBiYGqQtAy4InfMR4LqY6x++Rn2AhcA/AT2AiTjBPC/Y/xXgC8H3GuD0yH/1QHCdjscJ07lB+g+BucH1G4oTgR+F7qmDwT7dg+uxGxgUpNcDHwq+DwJODr6fhBOi6TiB/1JwvXuWuwxW68dCYUYmNuIqvyifBe5T1TdVdTeu8kuMqi5U1bmqelBV1+Iq4bPba2wCLgLWqup9wblfxz1p/21on8dU9a+q2qKqexPm+4qqPqquPao/rqK7VlV3qWoD8FNgZrDvZ4Gfqep6Vd0K3JqD/ZcDT6rqk4F9s3DewIWhfe5T1bdUdQ/wMDA12P554FlVfUBVD6jqFlV9I0j7ryBvROQw4Dzgv2PseP8a4QRhqKr+UFX3q+oa4J7Q7z0AHCkiQ1S1WVXnRvK6ObhOS4D7cMIHcBnwQ1VtUNVG4GbgC6HjDgTpB1T1SZwHOTmUdoyI9FfVJlV9Ldh+NXC3qs5T1UOq+l/APtxDjlEETFiMTByOCxlFGYV78vesz7BPVkRkkog8ISLvicgO4F+BIfmbmZhxwHQR2eY/uApsRGifnH5LhmPG4Z6i60PnuBv35A2tr927OZxnHPC3EfvPBEaG9nkv9H03zksA5yGtzpLvH4BPiEhfnPC9rKr1MXZEf++oiE3fw3UGAbgS50GtEJFXReSimLzexV0fguW7WdIAtqjqwdB6+Ld+Bie274rIiyJyRsjW6yK2jonkaxSQTtXgaLSNiJyKE5bZGZLrgXAvrzExWWVq5L4LeB24VFV3isi1wCV5mhpH9NzrgRdV9aM5HJPredbjnoKHRCo+Tz3p12tsJH0XLrzkiYre71X17/KwcT2uvaMVqlonIq/g2la+gPt/4oj+3ndU9agseb8NXCoiXYL8/ygig0O7jMGFBsFdi43B9404IXgzQ1q8caqvAheLSHfg6zjPbUxg6y2qekuSfIz2Yx6LAYCI9A+eKh/ExfaXZNjtYeArIjJFRPoAcWNWNgGDRWRAaFs/XGNus4gcDXytQOZnOvfE0PoTwCQR+YKIdA8+p4rIlEKdMHjSfwb4SXAtu4jIESLiQ30PA98QkdEiMgj4h0gWbwAzA9umkS643rM4T0S6ikgvEZkhIkm6ct8PnCsinxWRbiIyWESmhtJ/h+uQcTzwpxx+8nxgp4h8V0R6B3YdFzyYICKXi8jQIGy2LTimJXT890Wkj4gci2v7eijY/gDwjyIyVESG4Npw/tCWMSLSQ0QuE5EBqnoAd5/5890DfFVEpoujr4h8XET65fB7jRwwYTH+LCI7cU91NwF34Ap6K1T1/4A7cQ3Pq3CNrOCe1KP7rsBVEmuC8MMo4HpczH8nrrA/FD2uQPwcuEREmkTkTlXdCXwMF//fiAsb/RuuB1Ih+SKuIXsZ0ITrNebDVfcAT+N6dL1G60r8+8ARwXE3E2rrUNX1wMW4UFMj7r/6DgnKr6quw4WHrsOFN98ATgzt8gjOQ3gkaDdLhKoewrVdTcX1CNsM3IvrGQeuo8ebItKM+z9mBu0/nhdx99BzwO2q+kyw/V9w7UeLgSW4a/UvCc36ArA2CLN+FRfuRFUXAH+H64XYFJz3y0l/q5E7ompjvYz8CJ74l+J612QK/xhZEJHxuAq5e7mvnYisxvVee7YE5xpPhfxuo3iYx2LkhIj8jYj0DMI5/wb82SqIjouIfAbXdvJ8uW0xqgcTFiNX/h43JmA1biBisdpJjCITTH1zF3BN0BZiGAXBQmGGYRhGQTGPxTAMwygoVT2OZeDAgXrkkRlnYe907Nq1i759+5bbjIrArkUKuxYp7FqkWLhw4WZVHZrv8VUtLMOHD2fBggXlNqMiqK2tZcaMGeU2oyKwa5HCrkUKuxYpRCSXmSFaYaEwwzAMo6CYsBiGYRgFxYTFMAzDKCgmLIZhGEZBMWExDMMwCooJi2EYhlFQTFgMwzCMgmLCYhiGYRQUExbDMAyjoJiwGIZhGAXFhMUwDMMoKCYshmEYRkExYTEMwzAKigmLYRiGUVBMWAzDMIyC0uGERUTOF5GVIrJKRP6h3PYYhmEY6XQoYRGRrsAvgQuAY4BLReSY8lplGIZhhOlob5A8DVilqmsARORB4GJgWVmtMqqKnTuhthZefx3eew+2bYODBzPvK5Isz6T75bqvRzXz97ZoaDiGu+5Ktq+3q73LJDbnkxbdr2tXGD4cxoyBM86AadPcNqP4dDRhORxYH1rfAEwP7yAiVwNXAwwdOpTa2tqSGVfJNDc327UIyHYtmpq6c999E5g1azh793ZFROnX7yA1NQfp3r2l1f5JK3DVPJQiUb7ZRUgkmXEtLb1Zs2ZXgnNJZD26zC09k53R3xInsNmOC38/eFBoaurB3r1OTUaM2MPMmeu56KKNGQXGykgBUdUO8wEuAe4NrX8B+EW2/SdNmqSG44UXXii3CRVDpmvxwguqhx2m2q2b6pVXuvWdO0ttWemp9vuipUW1vl71/vtVzzxTFVQ/9CHVxsbW+1b7tcgFYIG2o67uUG0sQB0wJrQ+OthmGHnz1FPw0Y+6sMmiRXDvvTBjBtTUlNsyo72IwIgR8PnPw0svwW9/C/Pnw5lnQmNjua2rXjqasLwKHCUiE0SkBzATeLzMNhkdmCVL4JJL4LjjYM4cOMa6glQtIvClL8Ezz8C778Lf/A0cOFBuq6qTDiUsqnoQ+DrwNLAceFhV3yyvVUZHZf9+uPxy55n85S8wcGC5LTJKwVlnwX33wV//CrfeWm5rqpOO1niPqj4JPFluO4yOz49/DIsXw2OPwahR5bbGKCUzZ8Ljj8OPfuQ8VvNUC0uH8lgMo1A0NsJtt7lwyCc/WW5rjHJw553Qpw/cdFO5Lak+TFiMTsmtt8Lu3XDLLeW2xCgXQ4bAd74Djz4K8+aV25rqwoTF6HQ0N3flnnvgsstgypRyW2OUk2uvhUGD4Cc/Kbcl1YUJi9HpeOqpkTQ3wze/WW5LjHJTUwNXXQV/+hM0NPQstzlVgwmL0alQhUcfHcUHPwinnFJua4xK4Jpr3H3x5z9bD45CYcJidCrmzYO6uj5cdVW5LTEqhXHj3ADZZ58dltM8a0Z2TFiMTsX990OPHof49KfLbYlRSVx2Gbz3Xm/mzCm3JdWBCYvRaTh4EB56CM44Ywv9+5fbGqOS+NSnoGfPQ/zhD+W2pDowYTE6Da+84savfPjDNkmUkU6/fnD66Vt47LHcXjtgZMaExeg0/OUv0K0bnHLK1nKbYlQgp5++hfp69x4eo32YsBidhr/8BT70IaipOVRuU4wKZPr0rYjAE0+U25KOjwmL0SlYtw6WLoWPf7zclhiVyqBBB5g+3YSlEJiwGJ2Cp55yywsvLK8dRmVz3nmwcKF7HbWRPyYsRqfgpZfcC5+OPrrclhiVzIwZ0NICs2eX25KOjQmLUfWowosvuvdwxL1H3TBOPx169oTa2nJb0rExYTGqnnffhQ0bXMO9YcTRqxdMn27C0l5MWIyq5+WX3fKss8prh9ExmDHDdTnesaPclnRcTFiMquell9xrh487rtyWGB2BM85w7SwLF5bbko6LCYtR9cyb5yqLLna3Gwk49VS3nD+/vHZ0ZKyoGVXNnj2wbJlNkW8kZ/BgOOIIE5b2YMJiVDWLFsGhQyYsRm6cdhq8+mq5rei4mLAYVc1rr7nlySeX1w6jY3HaabB+PdTXl9uSjokJi1HVLFwIQ4bAmDHltsToSEyb5pb+wcTIDRMWo6pZuNCFwWxgpJELvgfhkiXltaOjYsJiVC379sGbb1oYzMidgQNh7FgTlnwxYTGqlpUr3VsjTzih3JYYHZHjj4fFi8ttRcfEhMWoWpYtc8tjjimvHUbH5PjjYcUK2L+/3JZ0PExYjKpl2TI3KHLSpHJbYnRETjjBebwrV5bbko6HCYtRtSxf7ga69epVbkuMjsjxx7ulhcNyx4TFqFqWLYMpU8pthdFRmTTJebzmseSOCYtRlRw4AG+9Ze0rRv706AETJrj7yMiNihMWEfmxiKwQkcUi8oiIDAyl3Sgiq0RkpYicV0YzjQpn9WoXHzdhMdrDpEkmLPlQccICzAKOU9UTgLeAGwFE5BhgJnAscD7wnyLStWxWGhWN9QgzCoEXFtVyW9KxqDhhUdVnVPVgsDoXGB18vxh4UFX3qeo7wCrgtHLYaFQ+/inTeoQZ7WHSJNi1y+YMy5Vu5TagDa4AHgq+H44TGs+GYFsaInI1cDXA0KFDqbV3jALQ3Nzcqa7F7NmTGDhwCAsXzmmV1tmuRRx2LVJkuhZ79gwCTuThh99g6tRt5TCrQ1IWYRGRZ4ERGZJuUtXHgn1uAg4C9+eSt6r+CvgVwOTJk3XGjBntM7ZKqK2tpTNdix/9CI4+moy/ubNdizjsWqTIdC0mToTrr4c+faZilyk5ZREWVT03Ll1EvgxcBJyj+n50sw4Iz1E7OthmGK1YswY+8IFyW2F0dEaPduOgrMtxblRcG4uInA/cAHxSVXeHkh4HZopITxGZABwF2DvejFYcOADr1rmnTcNoD126wPjxsHZtuS3pWFRiG8svgJ7ALHFznc9V1a+q6psi8jCwDBciu0ZVD5XRTqNCWbcOWlpMWIzCMG4cvPtuua3oWFScsKjqkTFptwC3lNAcowOyerVbmrAYhWD8ePdeHyM5FRcKM4z2smaNWx5xRHntMKqDceNg82bX7dhIhgmLUXWsWeOm4xg1qtyWGNXA+PFuaeGw5JiwGFXHunXu7X9d7O42CsC4cW5pDfjJsaJnVB0bNsDhrYbOGkZ+mMeSOyYsRtVRV+fGHxhGIRgxwoVWTViSY8JiVBUtLSYsRmHp0sWFVi0UlhwTFqOqaGx0AyRNWIxCMnYsrF9fbis6DiYsRlWxYYNbmrAYhWTkSJvhOBeyDpAU4fEEx29V5cuFM8cw2kddMHucCYtRSEaNgo0b3XtZ3IQgRhxxI++nAFfFpAvwy8KaYxjtwzwWoxiMHAn79kFTExx2WLmtqXzihOUmVV6MO1iEmwtsj2G0iw0boFs3GDas3JYY1YQfbFtfb8KShKxtLKo83NbBSfYxjFKyYYOrBGxwpFFIRo50y40by2tHRyFr8RNhiAj/LMI3RKgR4S4RlorwmAhZJ4o0jHJSV2eDI43CE/ZYjLaJe677b9z09f69J2uAS4AngHuLb5ph5M6mTW5Am2EUEvNYciOujWW4Kt8TQYB3VflxsH2FCNeUwDbDyJmGBjjzzHJbYVQbfftC//4mLEmJ81gOAaiiwOZIWkvRLDKMPDl0yE1vbg33RjGwsSzJifNYJgZjWST0nWB9QtEtM4wc2brVjTMwYTGKgQlLcuKE5eLQ99sjadF1wyg7DQ1uacJiFIOhQ2Hx4nJb0THIKixtjWExjErDhMUoJkOGuFCr0TZxU7osATRbuionFMUiw8gTExajmAwd6sKthw5B167ltqayiQuFXRQsfQ+w3wfLy4kRHMMoFyYsRjEZMsS14W3d6kTGyE5cKOxdABE+qspJoaTvivAa8A/FNs4wcqGhwY24tyk3jGLgxaSx0YSlLZJMfCEifDC1wgcSHmcYJaWhwRV4m87FKAZDhriltbO0TVwozHMl8BsRBgTr24ArimaRYeSJFxbDKAZhj8WIp01hUWUhcKIXFlW2F90qw8gDC1EYxcQ8luTETUJ5UXhdle1RUYnuYxjlpKkJBg0qtxVGteKFxTyWtonzWH4sQh1upH02/hU3KaVhlJ1t20xYjOLRs6ebL8yEpW3ihGUTcEcbx79dQFsMo100NcHAgeW2wqhmBg1yDzBGPHHdjWeU0A7DaBf79sGePeaxGMVl4EATliRYx0yjKtgetP6Zx2IUExOWZFSssIjIdSKiIjIkWBcRuVNEVonIYhE5udw2GpVDU5NbmsdiFBMLhSWjIoVFRMYAHwPWhTZfgHub5VHA1cBdZTDNqFB8YTePxSgmAwemHmKM7LQpLCL0EeH7ItwTrB9Vgm7GPwVuIH1OsouB36ljLjBQREYW2Q6jg2Aei1EKLBSWjCQj7+8DFgJnBOt1wP9QpG7GInIxUKeqi0TSejofDqwPrW8ItqW9ekdErsZ5NAwdOpTa2tpimNnhaG5uruprMWfOMOAY3nprPvv27Y7dt9qvRS7YtUiR5Fps2zaOnTsn8NxzL9K1q83Fm40kwnKEKp8T4VIAVXaLxI5taRMReRYYkSHpJuB7uDBYXqjqr4BfAUyePFlnzJiRb1ZVRW1tLdV8LZYvd8vzzjuNEZnurBDVfi1ywa5FiiTXYtEitzzppLNtstMYkgjLfhF6E4SlRDgC2Neek6rquZm2i8jxuNcee29lNPCaiJyG85TGhHYfHWwzDGtjMUqCD7Vu22azaMeRpPH+n4GngDEi3A88h2v/KDiqukRVh6nqeFUdjwt3nayq7wGPA18MeoedDmxXVXsDtQG4NpZevdzHMIqFf3CxdpZ4kkxCOSt4/8rpuOldvqlKOaZhexK4EFgF7Aa+UgYbjApl+3YYMKDt/QyjPfh7zIQlnrhXE0fHiXjvYKwIY1V5rXhmOQKvxX9XUm+zNIw0mpuhpqbcVhjVTr9+btncXF47Kp04j+UnwbIXMA1YhPNYTgAWkOolZhhlZ9cu6Nu33FYY1Y5/eDFhiSdrG4sqH1blwzhP5WRVpqlyCnAS1mhuVBgmLEYpMGFJRpLG+8mqLPErqiwFphTPJMPIHQuFGaXAhCUZSbobLxbhXuAPwfplwOLimWQYubNrF22OXzGM9uK94p07y2tHpZNEWL4CfA34ZrD+EjZPl1FhWCjMKAVdu0Lv3uaxtEWS7sZ7cXN3/bT45hhGfpiwGKWipsaEpS3aFBYR3iF9MkgAVJlYFIsMIw+sjcUoFf36mbC0RZJQ2LTQ917A3wI2mYFRMajC7t3msRilwTyWtmmzV5gqW0KfOlV+Bny8+KYZRjL27HHiYsJilIKaGmu8b4skobDwCPwuOA8miadjGCVh1y63NGExSkGfPs5DNrKTRCB+Evp+EHgH+GxxzDGM3PFhCWtjMUpBr16wdWu5rahskgjLlaqsCW8QYUKR7DGMnDGPxSglvXrB3r3ltqKySTLy/o8JtxlGWTBhMUqJCUvbxM1ufDRwLDBAhE+HkvrjeocZRkVgwmKUEhOWtokLhU0GLgIGAp8Ibd8J/F0RbTKMnDhwwC179CivHUbnwISlbbIKiyqPAY+JcIYqr5TQJsPICS8s3ayvolECTFjaJi4UdoMq/w58XoRLo+mqfKOolhlGQg4edMvu3ctrh9E58MKiCiLltqYyiXvGWx4sF5TCEMPIFy8s5rEYpaBXL2hpcfedPcxkJi4U9udg+V+lM8cwcsdCYUYp6RV0Xdq714QlG3GhsD+TYfJJjyqfLIpFhpEj5rEYpSQsLP36ldeWSiWuKN5eMisMI0dU4aabXE+wcePcNnt6NEpBWFiMzMSFwl7030XoARyN82BWqrK/BLYZRlbmz4dbb3Xff/ADtzSPxSgFXli2bIHbb4fPfAbOOqu8NlUabY68F+HjwGrgTuAXwCoRLii2YYYRxxNPpL7/9a9uacJilAIvLL/5Ddx5J1x+eXntqUSSTOnyE+DDqsxQ5Wzgw9jbJI0yM2cOHHGE+75ypVtaKMwoBV5Ynn/eLdevh3feKZ89lUgSYdmpyqrQ+hrc6HvDKAuq8Oqr8LGPuUK+YYPbbh6LUQq8sLz5Jgwe7L7X1pbNnIokibAsEOFJEb4swpeAPwOvivDpyBxihlESNmxwL1o6/ngYOdKNKQATFqM0hKcOuvBCN0fd66+Xz55KJImw9AI2AWcDM4BGoDdu/rCLimaZYWRheTB0d8oUGD48td1CYUYpCN9nw4fDccfBkiXls6cSafMZT5WvlMIQw0hKWFjC4wi6di2PPUbnIiwsAwc6z/mRR2yKlzBJeoVNEOEOEf4kwuP+UwrjDCMTK1bAoEEwbFhqqvwuXdzHMIpNJmHZsgU2bWr72P374eMfh1NPdceEWbsWTjgBvvvdzMdq1uHqlUeSovgosBb4D1wPMf8xjLKwfDkcfbR7OvTCYu0rRqkI32sDB8Ixx7jv3pOO44kn4MknYcECuOuu9LTbbnMhtX//99Z53X03DBgADz7YOk9V2Lcvp59QdJIIy15V7lTlBVVe9J+iW2ZUHUuXQl1d6+2rV8Nll8Hs2cnyeestJyyQEhZrXzFKRdRj8cKybFnbx/7xj87TPvVU+L//S21XdeG0GTPc+uOhmNDBg3Djja7Dyg03pHsuLS1wzjkwapQrF1HmzYN165L+ssKRRFh+LsI/i3CGCCf7TzGNEpH/JyIrRORNEfn30PYbRWSViKwUkfOKaYNRWObNgxNPhKlTYdu29LRvfxv++7/h859PzfuVjZ07ob4eJk1y6+axGKUmLCx9+7qeif37JxOW+fPdKP2zzoKFC11oDFwYrKEBPvc5OPJI153e8+qr0NTkQmjr18Pixam0556DF16ArVvdLABhnn8eTj8dpk2D7dvT02prXaeDP2Z4yXzUk8qHJMJyPO6NkbeRCoMVbR4xEfkwcDFwoqoe688lIscAM3GvSz4f+E8RsebaCuO221wBiMaP777bPV1t3pzuzm/bBn/+sxvsuH49vNLGK+Xeftsto8JiDfdGqQgLS8+eLiR7zDFth8K2bXPe+cknw2mnufCVF6OFC93y1FPdw9cbb6SOe/llt7zppvR9AZ55xnV/vugiF2ILc889btnYCP/7v+lp117rxuFcc036w9yWLXDddfG/IwlJhOVvgYmqnK3Kh4PPR9p/6qx8DbhNVfcBqGpDsP1i4EFV3aeq7wCrgNOKaIcRw3vvtd62YoVz2Z980sWJPaquAFxyiZsw8tlnU2lz57r0225z63PmxJ/Xu/tRYWnL0zGMQhH2jv2YlilT0j2W/fudZxEOW3nhOf54OOoo93316vTlpEmuAX/1ati9O3XcqFEwfbq738OiM3u2237OOS7M7DsQtLQ4b+byy92x4TK3YQMsWuS8mYaG9Ie5Rx+FPXvyuSrpJAkgLMW9976hjf0KxSTgQyJyC7AXuF5VXwUOB+aG9tsQbEtDRK4GrgYYOnQotTYkFoDm5uaCXYvf/34cv/nNBK68cg2XX54K4D700BjgCCZObOb++7twwQXzAWhs7EFd3QcYOfJtxo0byNy5famtdWkPPzwOkfH06TObkSOn8dRTO5k+PXtM4emnxwETqKt7ic2bW6irOxw4in37DlFb+3Ii+wt5LTo6di1SJL0W27d3A84EYNGiV9m5cxc9e45h06YjePzx2dTUHOS6607kjTcGcdVVa7jsMldGnntuGHAMmzfPB/YBH2LWrNUMHrye2bMnMXDgEBYunMPevcOBKfzxj/MYO3YP8+efxPDhLbz00iLGjj2Z2bMPUVu7CFVYsuRMzj13E6qNwFR+97tFnHpqE/X1vWhsPJ1hw1Yyfvxg5szpTW2ti6/NmuXs+MxnFjF37ok88MAqDh1y01c88sgk+vUbys72zq2iqrEf0FrQraBPgz7uP20dF58nz+IEK/q5OFj+ByA4j+Sd4PsvgMtDefwauCTuPJMmTVLD8cILL+S0/4EDqj/9qepLL6Vv379ftV8/VVDt3191375U2gUXqB59tOq//ZtL37rVbZ81y60/95zqzTeriqju3OnSvvAF1bFj3fdPf1p18uR4uy6/PLW/qup//qfLu1ev5L8t12tRzdi1SJH0WjQ1uXsOVFescNueeMKtz56t+vTTqfShQ1UPHXL73Hqr29bc7NYHD1b96lfd93PPVZ0+3X2vrXX7zZrl1gcNSu33uc+pHnmk+15f7/b7+c9VGxvd9zvucGlPPunWX35Z9R//UbVLF9Xdu13a976n2q2bK8sjR6p+8Yup33bCCarnn68KLNB21PFJQmH/DPwN8K8UqLuxqp6rqsdl+DyG80T+FPzO+UALMASoA8aEshkdbDPaQUtLqgExzF13wbe+Beeem95eMneua0D/0pdgxw637lm61MWPTzjBrftGxhUr3HLKFDj2WFfkfFvJ6tUwcaL7fsQRrhHTT9ECbv2BB1JviVy+PBUGg1S8uyP18Tc6NuH2PB8K8z3Dli51ZWfoUNfG0diYKgdr18KQIanw7Zgxrl0RXM+tsWPdd79ct86Fw5qaUtv8MaqpsPDkyW7Osj59Uvn5Mjd5srOtpSU1UeaKFa6sde/uyqqfNcCXS/9b2kObwhLuYhx0Mz4EfLb9p87Ko7gZlBGRSUAPYDPwODBTRHqKyATgKGB+Ee2oeg4ccHHWsWNTN6TnwQddo+T+/S7u6vFT1N9wg1v6eG9zs8tjypSUsPgbdtUqV5hGjHAFA1ITR4aFZfx416Dp48T798OZZ7reYtdf79aXLHGNmx5fsE1YjFIRHojr779x41w34j/8wXUVvuIKOPtsl+bnEVu/PnX/gxOfxkb3vbHRHQ9w+OGu7K1blyoLI0a45dixrow0NsLGjW7bmDFu/7FjU12LV61y416GDEkXKnCzgU+e7L5PmADvvuu+b9rk2lcmTGjf9YFkjfeIcJIIPxZhLfAjIMFQoLz5DTBRRJYCDwJfCryXN4GHgWXAU8A1qnqoiHZUDc8+CzfddNz7TzGeRx91XRk3bXLvlfDs2OG6B994o7vZXw41XSxb5m78KVPcTeufxvzT05Qprvtlz56pG3njRhg92t38vmCtX58SkfHj3Ta/XLvWLZ96yjVIjhoFv/gF/OlPTlymTUvZYx6LUWoyeSxdusB557nGdFX42tdcBd29e6psbN7sxMTjheXAAeeV+LQePdzMEps3pzrJjBzplr78rFvnut1DSnTGjEmVufr6lECFyxy4hzr/1tWxY11X5d27Yc0at80/6LWHrMIiwqRg/MoKXJvHOkCCXmG/aP+pM6Oq+1X18iA0drKqPh9Ku0VVj1DVyar6f3H5dDZ27XJvUox21z140IWt5swZwje+kZ729NNugNdHPpI+WGvpUjh0CD7wAecdhCfYW77ciYeI6wfve7r4m3b8eJc2enRq28aNqYIxfLgrbOvXp57W/ESS/mb3T1DPPw+9e7u+/717w6WXuu0f+EDKHvNYjFKTSVjAddMdMwZuvtndy926uZCTf19QNmHxoeYhQ1Jphx3mKnwvLF48vFfjRceLEKSH1t57L3XMqFFO+Natcx7J9u2thWr9+lS58w947SHOY1kBfAS4SJUzVfkPXBjMKCP33w+//W3r7T/6kbuhP/GJVDdFcFNHbNwIhx++m+eeczerZ/Zs566feaYTCN/N0Heb9GGtN99Mded9++2UGz12bCqk5d3yUaPccsyYVFp9fWp7ly7u+4YNKWHxhS1caMB1iTz+ePfk9e1vu23nnJMeTjCPxSg12YTlxBNd5f3976e2HXVUqivx5s3p4jFsWCqEDOmik01YDjvMLX3aiBGpiS+HDXMiperSvHh06+a+19Vl9nLA2dAQ9PsNzxieL3HC8mmgHnhBhHtEOAfXO8soMrNmwZVXtp7Ubu5c1y/9K19xo209qvDQQ+4FRFu2uOM9/i13V131Di0tqcFV+/e7OOzxx7sC0dLiBAScyPTq5Z66Jk92IauNG51XtH2780bALTdudN7Nxo1ONLw4jB7txEPVpXlhAVe4tm5N3ci+QB12mCskXnAWL3a2AfzTP8Fjj7nfGcaExSg1mdpYsjFihLvP9+1zIeawsPj73j/IZRIW7834F4plEpbwMQcOOLGKpvkyFw2t+X0aG92nS5eUB9QesgqLKo+qMhM4GngBuBYYJsJdInys/afuHCxZkvm1pXPmuIo73LYBsHevmzfrN7+B730vPc1Xqt26Oc/Fs2aNa5e49VbXthFuE1myxLm2J53UBDgvAJznceiQm3PruOPcNi8sa9e6+HDXrikRWb8+9bTjRWL0aOfJbNrkxGPEiNTT3KhRbtvOne43hZ+CBg1yMWUvIF6MunZ1hWPzZnfc1q1uegv/mz/5yVQB89gcYUY5aWvGh2HDUpU2pAuLv5d9D8nwve2FZccO95Dn73Nf6W/d6j7RY8CFtPbsaV3mtm5t7bGE82tsdPkVYpbwJL3Cdqny36p8AtfF93Ugy8TOlcWhQ9kdrGxPuI2NriKM0tzsKvumptZpP/2pe02u/9M8vvvt1KmtvY+bbnJu83e/mz6PzzPPOBtGjnTTMIRHlD/7LHz0o27KlLB4eLE480zXnTc8l5BvExkw4CCHH966sf3oo1O9RrxLHg5deWHZsCEV7vJPO1HR8dvB3aD796eOGTgwleaFJeqxgCt4mzenJqs8vNUQ2HR8IbApXYxKZNgw9wCXSTz8u4S8FxF+t1BYWPr3T23v3t3tlynNC4tvhPfr4fyi7TlRYQmXxfaQkzap0qTKr1Q5pzCnLy5r1tTwl7+kb1OFT33KPZFHu9guWeK8iOnTU+MmPN/6lgtPXX55+vYNG1z8f9YsuOWW9LRf/tIJw44drhuip6nJTQJ37rlOxJ57LpU2Z457Ov/hD53g+J5cfl6h6dOdUL39dvqUD+BE4oQTUkLT0uIaDv1MwBMnphrofMU9Zox7IhoyJL29JCoeGza09lj8E1FjY/anJ3+TDxiQSvPCsmWLE4aw6AwZkt6VMqmw2LtYjErEe+O+nSUsBF5IfLny41vAlZ9t29wnfIxPixMWX8ajaU1N7hhIlcfu3aGmJhVBKIuwdDS6d2/h299O905qa12s/t134SeRYZ533OFcyMWL3XsTPM3N8Pvfu+9PPpnumTzyiFtOneq6w0bPddFFbsBRWDzmzXPL665zIrJgQXra1KlufAmkh65aWpz3ceKJ7jxLl7q0FSucQNTUuMGDDQ2uPWTzZidcvl96tEG9W7fUk0u4TSTssQwY4AZe1dW1bkj0QrJ1qxPBsHj4m9yHAaPCsnWru641Nelv3fM9ZXL1WExYjErEC4svB2HxiHos4bT+/VNlMZuw7NzZ2suBVHf9cJovczt2pL/HKJzfli3pobr2UNXFceDA/bz1VsoNBScYPXs6byHszYQnSuzf33XF9cyf7zyGf/1Xt/5i6G00r7ziKr+rrnI3ga+4m5pchX/GGW7cRXjiON+A/sEPOm/Ciwc4W4891jWa9+iRefS6H3nub9a1a1N9z8MDEDO1iYQb1EeMSFXIvnvw1q0uhOU9FhFX2W/Zkpru3otEuCFx27Z08fCik81jOXDACWBNDWkMGOBufm97OLyWCRMWo5Lx5cCPLwnf71Fh6d07ldanj1vW16cLBLj6ads29/CYyWPxwhJN27vXheT79UsvLz6CsHNnaxHLl6oujr17u97RYY/glVdcRX/OOa5XlK8s1693le1ZZ7l2ET9aFlLTllxxhXMdw0KwYIELT/neSz7N9/Q46SSXVl+fasBbtcpVmP36udCV9zz27HFP6hMnuvOMG5e6Sfxy4sT0tg1I73XVVpvI/v3Ok4m2ifjeK76rb7SHypYtziupqUnN7jpggLtBfVpYPPx3b2NUWLyNUWHp18/d4E1NTlij6VGsjcWoZHxFnc0r8Wl9+qRX9n6/995rXdn36ZNqs80UWvPefjjNl7m1a7N7QLt2pdvXHqpaWHr0aKFHj/Q2h9dfd+888ELgPQK/POUUl+YHCYJrwxg71rUpTJmSyu/gQec1+LYNSA0m9E/qRxyRmnvHN5ivWeO2gwtT1dW5c3nx8GnhAU8bN7obqn9/V0n365ceukrSJuKXGzem93MH92QV9krC7R6DB2cOd/muiX4qiPAxXhD8TZ5JdDZubH0j9+/vPJbt25M9PZnHYlQyce0ovoy0tLQuB349kxfRt2/mBn/v5fi0bO050fwGDnTlvrnZhCURIk4IfGVfX+/cwUmT3PgNSHWx9UJw5JGu++3u3alKPSwERx/tPA5wlffBg86L6N/fxSd9w9nq1e7848a1nlJhzZpU6Gr0aCcq773XeuSrD11520eNSrVH+NDVjh2uUo96LHV1KY8l2iayZYvzCML91X0f+ExC4J9oouEucDdspmOiwhIWHV8AGhszeyyHDjnvyYTF6OhEw13h+71bt1Q34mzCApmFpbm5dVq3bs7LjxOdTMLSp4+rRw4cMGFJzPjxqfhmeC6ckSPdHxFOq6lxIaBo99vwRInh2UXDXgmkC8GaNa7tpWfP9NCVH0wYnq3Up0VHvo4ZkxqAGA1djR6dLh4+rVcvd3Ns2eI+NTVuG+TW2J6pe3D0GHD5+9+cTVi6dUvZAKmbfOfOzMICLs/ouTJhoTCjkunZ01X2vptvtOLu2TPzdl9GoHUZCadlEp19+9z3sLD4/DdvziwsPkxvwpKQcDgpLCxdu7qKP+pFRCdt273bhXrCPav27nU3ivcw/BxX0bl6fI+mcOhq61bn+oZHqPtzeWHxaaNGpZ7ew12AwXlHW7a0HmQIKQ8jm3hs3uyeUJL24qqpSY26zyQsmTwWf/MfPOhu1nDPr3DBiN7I4TixeSxGNeDv6Z49Wz8A+QeuOI8l/FAWTcsmOn36pL/psi0x8tM5tdWmmZSqL45jxrhKdMeO1JO1F46wENTVpSr5sLD4RrLwHFg+LVqph7vzRvuEe28mKh4+TNXQ4I7p0SN1I/quf15AouLhG82hdY+sTA3q3mNZu9Z5XOE0f7Nl8z527XJeS9iT8Wn+aSz8hNSlS6oAhHu7RNejN7Jf37gxN4/FhMWoVHy5yOQNeI8lWg7C+/p9ckkLC0l0Pc4DMo8lIVEh6Ncv9QQQFpawENTUuAo0LB4+LdyG0dDgKkn/Z4wcmequ29DQekR52MPwab6dIzxAyT/deyHI5GEMHuzaPPxMAFHvI5Ow9OrlhCtTT61w6Eok/eaLq+zD+0UFxKdFn7jibnKfR0uLeSxGdeDv/0zeQLZQWLjMROcjixMWX7ZyESMTljwIjw6PehHDh7ttqq3T/NiNqBCE2ymix3iR2LYtc1p4fqzwuxf69ElNcRL1SsC1A7W0tBYW1VQ4Lpw2cKATlagYQfbQVbhto3//9IraF4g9e1rfeHHC4tfjhCVbzBlyExZrYzEqlWziAamyES0j4TnwokIQXs8mIHHikUt5zJeqF5bwIL5MlX1zsxOCvXszzy6axMMI5wcu1HTgQLpIZJt4MZy2ZUv6tCj+e6Z2Dx+S8p0Pol0Lm5tzaxPxAvHee7l5JXGxYH9zR7dnGgiWKQ/zWIxqwJeDaNkJp4XbQyBeWJKITpywxKVZG0tCkgiBH5mfxMPwlW5cfn68Sqb8/PtQwl19fVpzc3pl6sXDh67CaeHQVffu6RVyTU12YfGdCMK/JZwftK7sw2lxIhFN8y58tECF84+6+eE8ovllwoTFqHR8RZ5pJm5/j0fTwuvRMhJej6b546LiES5LFgorAHHC4r2ZOCFobHR/hK9cu3Z1FXImDyPssUDr0ebeO+rRI/2GCAtL+I/13+M8DN8tN9zrqqbGdeXNNMiwpiY1e3OmdhSId5WziQe0FhCfls2TgdYFKs7Nz4T/3RYKMyqVbOIBhfdYfJnLJXwWXk/yMJeEqheWfv1cpePfXxCeStoLge+GnMmL8O0U4Yo7PIlidKI3SHkY4co6bhoTf65du9LTunZ1lXUmDyPcLTeTV7J/vxOQTMLiCQtBjx6pmztOCLKJR9xx0e1h7yJa2OKerDLhJ/00j8WoVLKJR1xavsKSzWMJP3jFCUuh3m9U9cVRxFXcmze7xudMlX0mIfDTTGea5iBbWlg8ovmFzxXNL+yxZBowGOexbN0aLx5Jw1oi2RsS455o4tKyhcLCtFdY/LQ7JixGpdLeUFghhCWTPZ7ww6EJSw4cdliqco6KB6SEICoSLS1uxHsmD2PLlraFKpxfeH6sTH3Wd+7M3uvKdynO1MYSPU80LS6slc37yMUriYv3ZvNYwrQ3FNbS4pYmLEalEicsvsxEPZa41x+H88nm6eQrLJm8qnzoFMVxwICUsIQrYd84nklY4iZK7NcvNXAynNa9u/uT/CDITJ5DY2Pr/Hr3Tk3+mG2Kk+i5CtEmkjR0laQdBdLDheG0uPeCx3ksbb1PHExYjMonTlh8RR7nKcQJQbTM+Xziyo6FwgpE376Z58IJV/aQXAjCc+tkGsUal1+0HSWclim/bAISJx5JQ1fZbth8wl2Z8GlxDevtDYWZsBiVThJhifMU4kJhUcxjKSHZJlnzT98+LVxZ++9+Isdofn520UxpvrLLJGLZjvHEjcAN3xBJw1PZ0nr0aF0ZJ/FY4kQnik+Lq/SjhSR8YycRFj8A9hOfaHtfwygHcY33STyWuIb9KJXSxlIgfaps+vRJvcM+Om11jx6uB1WvXulP1nGVfVyaF6suXdIr4XAIKZeZTMNPO2H7unVzbrBqfh5GpnaPJB5L3E2ZLb84jyWXJ7VMjBrl2sHCA04No5KI81h8KCuuHETLTxJhSVIuPeFzm8eSA5nGhnh8pZ5LeCpJWtyMvtnmx8qUls2LEGmfh5FJWJLkF73Jk8RycwmFZTq+LcKvWDaMSiPOK/Hd5ePKQT7CkotQmbDkSRLvIx+vJO64fIUq2j04HyFI4rFkEoRsaeH1bOGzTPjjcgmFJc3bMDoKviKPE5a4Cj1afpJ0hokrc9G08LkL9YDW6YQl2/TUuQhLUo8l2zG5THHS3tBVtrRMN1C2tHB+uXgs+TTeZzuvYXRUfMWdbznIx2OJ9hYLEy3fxZi1otMJS1IPIy48Fedh+PWoePTsmfqzozdGeN9s4zryDV1lS/MDCzOlxbnKuQhLewtUodxywygn/v7PVNnn47EkEZZM5dsTtaMY5azTCUs2IYh7MU7cOJHoU7UXieifJZI91hrXKyNOWPwNl89cXHHCEr2RwzdiLsLi9803FGbzfxnVQBJhKbTHEicscaGwQlFxwiIiU0Vkroi8ISILROS0YLuIyJ0iskpEFovIyUnzjBsbka3HRviYuNHh0T/FV7RJ/vzoMXHnyiQs/qaM66mVTQgOHmydXxIPI5eb0ueTr8diDfJGNeDLSKb7uVgeS6bynS2/TiEswL8DN6vqVOCfgnWAC4Cjgs/VwF1JM4yruLMJQZJjcskPsofCkghLpvYGX2FHb4y4NhGflq+wxIXJsuUXh3ksRrUT92qHfIQl7oErLtSd7fjO0saigJ8VawCwMfh+MfA7dcwFBorIyCQZxj3BZ/NYwuvlFBaflsmNztYDJK4XV5zHkiR0Fb1+uYhQJnIpUIbREfHikakM+8HUuXQPjmuY9/v6c2aiFG0sldg8ei3wtIjcjhO+DwTbDwfWh/bbEGyrDx8sIlfjPBqGDh1KbW0tq1cPB6YA8OKLtWkn2779WGAoTU2N1Na+GTFlBgBvv72c2tpN729dvnwQcCIAr7zyEr17t7yf1tBwFHA4zc1bqa1dnJab6oeArrzzzlvU1m58f/vatX2A0wCYP/+vDBp04P20urqxwES2bt1Obe3rafnt338q0JfVq9+mtrbu/e1793YBzgJg3rw5rFmzn+bmZmpra3nrraHAsRw4cIja2pfT8mtoOAYYxtq1q6mtXU86MwL75lJXt/f9ratW9QVOBaC2tjbtiLVrne3vvruO2to1GfNbsGAeDQ17Mqa9+mr6uQqFvxaGXYswuV2LGUDrez4Tq1ePBo5k/fr11NauTkurr3dlbsWKZdTWNmQ8x9y5c1i9ev/7W5uaugMfzHj+t94aCUxm06Z6amtXpqV16XI2LS3CG2+8xsGDO97fHq4vCnYvqGrJP8CzwNIMn4uBO4HPBPt9Fng2+P4EcGYoj+eAaXHnmTRpkqqqPvCAqtNwbcWll7rtM2e2TvPHPPhg+vbnn0+l7d2bnvatb7ntF17YOr9evVzaPfekb3/rrVR+W7emp91xh9s+bVrr/E44waX98pfp2/ftS+W3caPb9sILL6iq6p/+5Lb37t06v5kzXdrtt7dO8/m980769iVLsl/bW29122+4IXt+K1cmP1eh8NfCsGsRJpdrke2ez8TPfub2/cY3Wqd97nMu7YEHsp+jvj59e0ND9vPffbfbfsUVrdNEXNorr6Rv37u3dX7AAm1HHV8Wj0VVz82WJiK/A74ZrP4PcG/wvQ4YE9p1dLCtTZIM4itUY3uxQmGZQlfZYrdh1zlbWiZX2duXSyisvW50ErfeMDoyvjy1tMTv19bxnrgy49PieqBF04oRcq7EKPZG4Ozg+0eA4I30PA58MegddjqwXVXrM2UQJckgvrgKMk4IsrVh5CJU4XNH05JUrtF9wjbl0iaSZJ9chMXfwLnEe8NYG4tRqTz2GDzySLJ9/X0c16Ce5Phs6+3NL64M5ksltrH8HfBzEekG7CVoLwGeBC4EVgG7ga8kzTCJaOQyUC/fLrbZ+qyH942mJbmJ4m6UQnssufQoSXLD5uIdGUal8MlPJt83iccS9/CVS+N9XEeBqD1J8suXihMWVZ0NnJJhuwLX5JNnkifwXDyMJLP1xvUAicsvn4q7UEKQZJ98QmHmsRhG/hV4Ph5LuYWlUxTdJGMtCiUscV12kwhLlHw8lri8k3gsuQhLEuHLV1jMYzGqiUKVgyQeSxzFEJIonUJYklSUubSxJAmFxQ2GykdY4m6YQoeuCtV4n+QGNo/FqHbaW5Hn4rFUSiisUxTdcngs+YbCsuUXRz4eRi4x3TC5TAdhjfeG0X5y8ViS7GPCUiCSeBiFarxPMi9QLh5QXOVarDaWQo28t1CYYaSIKwe5RCQK7bEUg04hLO2dWqRQHks++RUrFBbXxpJLZV/McSzmsRhGbh6Gj4okGetSTDpF0Y2r/HwFm8vU7u0Vlqg97Q2FldLDKHR+1t3Y6CzkW9nnE7oq9wNbpxCWuAoqicLn03ifyx+bi8cRd85MRO1I4rHEYW0shpEfSXpsZSKXkfJJzmHCUiCSeCyF9jDyfUrPtm++AxqjJPECcrG9vV6FtbEY1U6hQ0+FHiBZDDqFsMRVUEn+iFzaFeJG2SZpw2jr3HHnzCW/fBsSoyT5Lfl6LKWIBRtGJZBLmWtv4721sRSIJI3jcdMtZAsnxeWXaV6gJGGybPkV6gmkvVOw5EJ7Q2EmLEY1kW8oLIq1sVQISdowCiUsft9CeSzt7RUWpdAeSxztFRbD6CzkUg7aO/LehKWE5PLknO+01YVuE0kyBUs++RWK9j5ZGYaRGxYKKyHtvZC5CIunUE/p7Z0rLEqSXmGF8lg8hfK2DMOIxxrvOxD5eCy55BdHpfUKywULhRlG+x9Ec8GEpYSUw2OJy6cSeoVloj3XKdP7KU4JXn5w9tmt0wpxTsMw0qkUYam497EUg0oRlnyOb+8Ayfbsm5RDhzL/pjPOgMZGGDIk+7EmLEZnoZSee7nbWDqFsLSXQrexVOoAyXzbWOLOHycq4XMaRrVSynu8UnqFdQphKfQf294/ppyhsCSzJWe6Odeuhbq65OdJigmLUe0UujNMknNZKKwDUKmhsGK12WQqCOPGuU+hsV5hhlF48Sm3sHSKYl1KIYg7pj0DJAtFnLAMH+6WAwcW9pxxmMdiVDuVFgqzNpYKoZyhtFIKy/e/DxMmwGc/W9hzxmHCYhiZy8GSJbBxY/ZjMrVfWiishJTDYylUD5BCjzuJy69HD7jiiuR5FQITFqOzkGu467jj3CcTc+bA+PHZz2HCUgJKKSzlGCCZC5U2Fb0Ji1HtFOMeP+OMzNttSpcORKH+iEpoYxFxXslzzxU233wxYTGqnSSeSrWNvDePpQTHtye/YlS8v/514fPMl0y/78knXfdmwzByw4SlA1HoNpZC/7Gl7CdfaDJdiwsuKL0dhlEsSjnLd79+btm/f/Z9TFgKRKWFWwolVHH5jB/fMZ76K+2/MYyOzNe+Bvv3wze+kX0f625cIRRqHEs++eU7fczKlfEvL6sUTFiMzkIpIgvdu8P118fvYx5LgaiUNpZ8Gu/zpUeP4p+jEJiwGNVOKafNT4L1CisQlTaOpVBPDH6AVM+ehcnPMIzC05HbQPOlU3gs7aWc41jiuO8+eOCB1HtPDMOoPHr3dsuamuz7VJvnXhaPRUT+VkTeFJEWEZkWSbtRRFaJyEoROS+0/fxg2yoR+Yfcztdee9t3fLHyGzwYvv71jnlTPvEEfOYz5bbCMIrPzJlwyy3u01kol8eyFPg0cHd4o4gcA8wEjgVGAc+KyKQg+ZfAR4ENwKsi8riqLiuFsZXQxlJt7vTHP+4+hlHtdO0K3/teua0oLWURFlVdDiCta9iLgQdVdR/wjoisAk4L0lap6prguAeDfRMJS3sbz8o5V9jhh7vl17+euw2GYXQMqu3BUbSMv0hEaoHrVXVBsP4LYK6q/iFY/zXwf8Hu56vqVcH2LwDTVbVVdSsiVwNXB6vH4bwjA4YAm8ttRIVg1yKFXYsUdi1STFbVfvkeXDSPRUSeBUZkSLpJVR8r1nlV9VfArwIbFqjqtDYO6RTYtUhh1yKFXYsUdi1SiMiC9hxfNGFR1XPzOKwOGBNaHx1sI2a7YRiGUUFU2jiWx4GZItJTRCYARwHzgVeBo0Rkgoj0wDXwP15GOw3DMIwslKXxXkT+BvgPYCjwFxF5Q1XPU9U3ReRhXKP8QeAaVT0UHPN14GmgK/AbVX0zwal+VZxf0CGxa5HCrkUKuxYp7FqkaNe1KGvjvWEYhlF9VFoozDAMw+jgmLAYhmEYBaVqhaU9U8B0RETkNyLSICJLQ9sOE5FZIvJ2sBwUbBcRuTO4NotF5OTyWV54RGSMiLwgIsuCqYO+GWzvdNdDRHqJyHwRWRRci5uD7RNEZF7wmx8KOsUQdJx5KNg+T0TGl/UHFBgR6Soir4vIE8F6p7wOACKyVkSWiMgbvntxocpIVQqLiHTFTQFzAXAMcGkwXUw181vg/Mi2fwCeU9WjgOeCdXDX5ajgczVwV4lsLBUHgetU9RjgdOCa4P/vjNdjH/ARVT0RmAqcLyKnA/8G/FRVjwSagCuD/a8EmoLtPw32qya+CSwPrXfW6+D5sKpODY3fKUwZUdWq+wBnAE+H1m8Ebiy3XSX43eOBpaH1lcDI4PtIYGXw/W7g0kz7VeMHeAw3z1ynvh5AH+A1YDpuhHm3YPv75QXX8/KM4Hu3YD8pt+0F+v2jg8ryI8ATgHTG6xC6HmuBIZFtBSkjVemxAIcD60PrG4JtnY3hqloffH8PGB587zTXJwhhnATMo5NejyD88wbQAMwCVgPbVPVgsEv4975/LYL07cDgkhpcPH4G3AD4d6sOpnNeB48Cz4jIwmAqLChQGbH3sXQSVFVFpFP1LReRGuB/gWtVdUd40tPOdD3UjQWbKiIDgUeAo8trUekRkYuABlVdKCIzymxOpXCmqtaJyDBgloisCCe2p4xUq8cSNzVMZ2KTiIwECJYNwfaqvz4i0h0nKver6p+CzZ32egCo6jbgBVzIZ6CI+AfL8O99/1oE6QOALaW1tCh8EPikiKwFHsSFw35O57sO76OqdcGyAffAcRoFKiPVKiw2BYzjceBLwfcv4doa/PYvBj09Tge2h9zfDo841+TXwHJVvSOU1Omuh4gMDTwVRKQ3rq1pOU5gLgl2i14Lf40uAZ7XIKjekVHVG1V1tKqOx9UHz6vqZXSy6+ARkb4i0s9/Bz6Gmwm+MGWk3A1IRWyYuhB4CxdPvqnc9pTg9z4A1AMHcPHPK3Ex4eeAt4FngcOCfQXXa241sASYVm77C3wtzsTFjxcDbwSfCzvj9QBOAF4PrsVS4J+C7RNx8/CtAv4H6Bls7xWsrwrSJ5b7NxThmswAnujM1yH43YuCz5u+jixUGbEpXQzDMIyCUq2hMMMwDKNMmLAYhmEYBcWExTAMwygoJiyGYRhGQTFhMQzDMAqKCYvRKRCRQ8Esrv4zvtw2FQIR+bKINIrIvcH6DD9zb2if34rIJZlzABH5sYi8JyLXF9teo3NgU7oYnYU9qjo1U0IwoFJUtSVTegfgIVX9er4Hq+p3RGRXIQ0yOjfmsRidEhEZL+59Pb/DDRwcIyLfEZFXg/dN3Bza9yYReUtEZovIA/7JXkRqRWRa8H1IMF2In/Txx6G8/j7YPiM45o8iskJE7g9EDRE5VUTmiHtvynwR6SciL4nI1JAds0XkxHb85mkhj21JZ5krzSg95rEYnYXewQy/AO8A38K9W+JLqjpXRD4WrJ+GG2X8uIicBezCTQEyFVdeXgMWtnGuK3FTXpwqIj2Bv4rIM0HaScCxwEbgr8AHRWQ+8BDwOVV9VUT6A3tw09J8GbhWRCYBvVR1UYLf+qHQbwUYixtpviD4HYjIj4GnEuRlGDljwmJ0FtJCYUEby7uqOjfY9LHg83qwXoMTmn7AI6q6OzguyZxzHwNOCLVrDAjy2g/MV9UNQV5v4N6hsx2oV9VXAVR1R5D+P8D3ReQ7wBW4l7kl4WVVvSj0W9OOE5HPAScHdhpGwTFhMToz4XYFAW5V1bvDO4jItTHHHyQVTu4Vyev/qerTkbxm4N7o6DlETBlU1d0iMgu4GPgscEqMLYkQkeOAHwBnqZtO3zAKjrWxGIbjaeAKce9wQUQOD95T8RLwKRHpHcwG+4nQMWtJVfaXRPL6WjB1PyIyKZhBNhsrgZEicmqwf7/QVO73AncCr6pqU3t+YDDL8QPAF1W1sT15GUYc5rEYBqCqz4jIFOCVoD29GbhcVV8TkYdws8A24F7J4LkdeFjc2/f+Etp+Ly7E9VrQON8IfCrm3PuD8NR/BFPb7wHOBZrVvZhqB3BfAX7mxcA44J7gN5Ktp5xhtAeb3dgwckBEfoCr8G8v0flGAbXA0Zm6Q4vIl3FTmOfd3TjI5weU8HcZ1Y2FwgyjQhGRLwLzcO/KyDbGZg9wgR8gmed5fgxcTnqbk2HkjXkshmEYRkExj8UwDMMoKCYshmEYRkExYTEMwzAKigmLYRiGUVBMWAzDMIyC8v8DtOs4KJFZ6pMAAAAASUVORK5CYII=\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# Band-pass ass Filter using rectangular window method"],"metadata":{"id":"grrb0OtIBdk9"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","band = [200, 400]  # Desired band-pass range, Hz\n","trans_width = 100  # Width of transition from pass band to stop band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, band, window='rectangular', pass_zero=False, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"9s0XpIviCOWW","outputId":"01501757-cbd0-4c50-f307-d610b7a956bb"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# **Band-stop Filter**"],"metadata":{"id":"GNdrQqiJBgl2"}},{"cell_type":"markdown","source":["# Band-stop ass Filter using Hamming window method"],"metadata":{"id":"tV8mUT9BBkAj"}},{"cell_type":"markdown","source":["In this code, we specify the filter requirements such as the sample rate, band-stop range, transition width, and number of taps. Then, we use the firwin function to compute the filter coefficients using the Hamming window function and the `pass_zero=True` parameter to create a band-stop filter. Finally, we compute the frequency response of the filter using the freqz function and plot it using matplotlib."],"metadata":{"id":"55IcMNv6_p92"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","band = [200, 400]  # Desired band-stop range, Hz\n","trans_width = 100  # Width of transition from stop band to pass band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, band, window='hamming', pass_zero=True, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"4b6aKWN1_bA4","outputId":"88391ed0-8871-4cab-fae4-4951089563e9"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# Band-stop ass Filter using Hanning window method"],"metadata":{"id":"wbSXO-ygBoyv"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","band = [200, 400]  # Desired band-stop range, Hz\n","trans_width = 100  # Width of transition from stop band to pass band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, band, window='hann', pass_zero=True, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"yUaVwyRRCl2H","outputId":"519a7a45-42c1-4272-bec1-d423c37c8143"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAZYAAAEWCAYAAABFSLFOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAAsTAAALEwEAmpwYAAA8j0lEQVR4nO2dd7icVbX/PyuBVFLJSUJISAhp9BaaghyKAopiQQQFAbnmysWr/B7Ui9eKXdFr41poolcUUERQmgRyAJGQRoAUCElIOzlJTkjv5azfH+vdzHsmM5OZk5l5p6zP88zz9vdd755z9nfW2nuvLaqK4ziO4xSLTkkb4DiO49QWLiyO4zhOUXFhcRzHcYqKC4vjOI5TVFxYHMdxnKLiwuI4juMUFRcWJyci8isR+Uqxz81yvYrIqCzHBonIMyKyUUR+JCL/LSK3R8dGRNfu19Fn52Fbu+eX6jmOUwuU7B/RqXxEZBEwCNgF7AbmAL8DblXVNgBV/VS+94ufKyKNwO9VdWiRzJ0ArAZ6614GX4lIU/Ts24v07IKe7zj1jnsszntVtRcwHPge8F/AHcmalJHhwJxyVOoi0rnQ55fSW6pEspSR4xiq6p86/QCLgHPT9p0MtAFHRdt3Ad+KHf8C0AIsB/4NUGBU/FygJ7A1us+m6DMkuvfzwLroHrcAXWL3futeaTbdBewEdkT3Ohf4OuaVAIyIrt0P+DbmfW2Lzr0lOmcc8ASwBngNuCTt/r8EHgE2ZyiTbM//M/B7YENUFn0wUW4BmqOy6BzdozPwQ8zrWQhcF2zO9F3E3y/aPhX4V1R2LwGNsWNNwDeB54CNwD+AAbHjp8euXQpcBZwErAz2Red9EHgpy9/KHmUUfaf3A63AG8Bn0v6OpkVlsxL4n7TvagL2N9QCfC52XVfgJ9Gx5dF61+hYI7AMuAFYFV17dezad2Ne98ao/OP3vRCYGZXBv4Bjkv7/q+VP4gb4J8EvP4OwRPuXANdG63cRCQtwPrACOBLoEVWqewhLtN4ILEu774lRBblfVMHMBa6PHc8oLOn3jra/TgZhibabgH+LndszqlCvjp59PFbBHxG793rg7ZgX3y3P5+8E3h9d0x14APh19LyBwBTg36PzPwW8CgwD+gOTyFNYgIOBN6OKsxPwzmi7Ifa+C4AxkR1NwPeiY8OxivYyYH/gQOC46Ngc4ILYMx8AbshR/vEy6gFMB74KdAFGYoJ5XnT+88AV0foBwKlp39Ufo3I6GhOmc6Pj3wAmR+XXgInAN2N/U7uic/aPymML0C863gKcEa33A06I1o/HhOgUTOCvjMq7a9L/g7X68VCYk4nlWOWXziXAb1R1tqpuwSq/vFHV6ao6WVV3qeoirBI+c1+NzYMLgUWq+pvo2S9iv7Q/HDvnQVV9TlXbVHVbnvd9XlX/qtYe1Rur6K5X1c2qugr4MXBpdO4lwE9UdamqrgG+W4D9lwOPqOojkX1PYN7Au2Pn/EZV56nqVuA+4Lho/0eBiar6R1XdqapvqurM6Nhvo3sjIv2B84A/5LDjrTLCBKFBVb+hqjtUdSFwW+x9dwKjRGSAqm5S1clp97opKqdXgN9gwgfwMeAbqrpKVVuBm4ArYtftjI7vVNVHMA9ybOzYESLSW1XXquqMaP8E4Neq+oKq7lbV3wLbsR85TglwYXEycTAWMkpnCPbLP7A0wzlZEZExIvJ3EVkhIhuA7wADOm5m3gwHThGRdeGDVWCDY+cU9C4ZrhmO/YpuiT3j19gvb9iz7BYX8JzhwIfT7D8dOCh2zorY+hbMSwDzkBZkue/vgfeKSE9M+J5V1ZYcdqS/75A0m/4b6wwCcA3mQb0qIlNF5MIc91qMlQ/RcnGWYwBvququ2Hb8XT+Eie1iEXlaRE6L2XpDmq3D0u7rFJG6anB09o6InIQJyz8zHG4B4r28huW4VaZG7l8CLwKXqepGEbkeuLiDpuYi/dlLgadV9Z0FXFPoc5Ziv4IHpFV8gRbal9chacc3Y+GlQLro/Z+qfrIDNi7F2jv2QFWbReR5rG3lCuz7yUX6+76hqqOz3Pt14DIR6RTd/88icmDslGFYaBCsLJZH68sxIZid4Vhu41SnAheJyP7ApzHPbVhk67dV9dv53MfZd9xjcQAQkd7Rr8p7sNj+KxlOuw+4WkQOF5EeQK4xKyuBA0WkT2xfL6wxd5OIjAOuLZL5mZ49Mrb9d2CMiFwhIvtHn5NE5PBiPTD6pf8P4EdRWXYSkcNEJIT67gM+IyJDRaQfcGPaLWYCl0a2jae94AbP4jwR6Swi3USkUUTy6cp9N3CuiFwiIvuJyIEiclzs+O+wDhlHA38p4JWnABtF5L9EpHtk11HRDxNE5HIRaYjCZuuia9pi139FRHqIyJFY29e90f4/Al8WkQYRGYC14fx+b8aISBcR+ZiI9FHVndjfWXjebcCnROQUMXqKyHtEpFcB7+sUgAuL8zcR2Yj9qvsS8D/YP/oeqOqjwM+whuf5WCMr2C/19HNfxSqJhVH4YQjwOSzmvxH7Z783/boi8VPgYhFZKyI/U9WNwLuw+P9yLGz0fawHUjH5ONaQPQdYi/UaC+Gq24DHsR5dM9izEv8KcFh03U3E2jpUdSlwERZqasW+q8+Tx/+vqi7BwkM3YOHNmcCxsVMewDyEB6J2s7xQ1d1Y29VxWI+w1cDtWM84sI4es0VkE/Z9XBq1/wSexv6GngR+qKr/iPZ/C2s/ehl4BSurb+Vp1hXAoijM+iks3ImqTgM+ifVCXBs996p839UpHFH1sV5Ox4h+8c/CetdkCv84WRCREViFvH/SZSciC7DeaxPL8KwRVMh7O6XDPRanIETkAyLSNQrnfB/4m1cQ1YuIfAhrO3kqaVuc2sGFxSmUf8fGBCzABiKWqp3EKTFR6ptfAtdFbSGOUxQ8FOY4juMUFfdYHMdxnKJS0+NY+vbtq6NGZczCXnds3ryZnj17Jm1GReBlkcLLIoWXRYrp06evVtWGjl5f08IyaNAgpk2blrQZFUFTUxONjY1Jm1EReFmk8LJI4WWRQkQKyQyxBx4KcxzHcYqKC4vjOI5TVFxYHMdxnKLiwuI4juMUFRcWx3Ecp6i4sDiO4zhFxYXFcRzHKSouLI7jOE5RcWFxHMdxiooLi+M4jlNUXFgcx3GcouLC4jiO4xQVFxbHcRynqLiwOI7jOEXFhcVxHMcpKlUnLCJyvoi8JiLzReTGpO1xHMdx2lNVwiIinYH/BS4AjgAuE5EjkrXKcRzHiVNtM0ieDMxX1YUAInIPcBEwJ9PJK1Z046qr2u8T2fO8etjX3DyK+++vDFty7duXe40eDeecAyNG7HnMcfaVtjaYOhWefhrmzYPVq2HHDti1Czp1so9Iaj3TdtgXPoVSrmv2lWoTloOBpbHtZcAp8RNEZAIwAaBTp2N57LFtOW+omu++/L6dSr2f6kBEdiZiXzneta0Ndu82B/ykk9ZwzTVvMHbsxozP2bRpE01NTXnZVOt4WaTIVhZtbfDoowdx992H0NLSHYB+/XbQr98OunRpo1MnRVVQhbY2W7Zfb3+sra1jNX2m/4XSXFMEJVLVqvkAFwO3x7avAG7Jdv6YMWPUMSZNmpS0CSWlrU119mzVb3xDddAg1U6dVL/6VdufTq2XRSF4WaTIVBYrVqg2Npo8nHyy6u9/r7p6dfltKzfANN2HurraPJZmYFhse2i0z6lzROCII+zzmc/Y5xvfgMWL4c47LQThOIWwZImFVpcvt7+hq65KJqxUjVSbsEwFRovIoZigXAp8NFmTnEqjTx+46y449FC46SYYOBB+8IOkrXKqiY0b4T3vgdZWmDgRTjstaYuqi6oSFlXdJSKfBh4HOgN3qurshM1yKhAR+NrXYNUquPlmOP10eN/7krbKqRY++UmYOxcee8xFpSNUlbAAqOojwCNJ2+FUPiLw4x/D88/DNddYRTFgQNJWOZXOn/8M994L3/wmnHtu0tZUJx55dmqarl3hd7+DNWvMg3GcXGzZAp/9LJxwAtzow687jAuLU/McfTR86lPwq1/BnIwjnhzH+PnPrbH+Jz+B/aounlM5uLA4dcFNN0G3bvDd7yZtiVOpbNrUme99zxrtzzgjaWuqGxcWpy4YMAAmTIA//hFaWrolbY5TgTz66EGsWwdf/3rSllQ/LixO3XDDDdag/8ADBydtilNh7N4Nf/3rwbz97TB+fNLWVD8uLE7dMHSodTl+/PHBbN+etDVOJfHII7B8eXc++9mkLakNXFicumLCBNiwYX8efDBpS5xK4q67LP/X+9+ftCW1gQuLU1e8850waNA2fvvbpC1xKoV16+Dhh+Hss1ex//5JW1MbuLA4dUWnTtDYuIonnrAKxXEeeAC2b4dzzlmZtCk1gwuLU3eceWYrO3fi4TAHsJ6Chx0G48ZlnmbBKRwXFqfuGDduI8OHw5/+lLQlTtJs2ACTJsGHPuSZi4uJC4tTd4jARRfBU0/B1q1JW+MkycSJNgPke96TtCW1hQuLU5ecf76JyrPPJm2JkyQPP2zTLLztbUlbUlu4sDh1yZlnWoLKxx5L2hInKdrabPzKeed5XrBi48Li1CU9epi4PPpo0pY4STFrFqxYARdckLQltYcLi1O3vPOd8OqrVrk49cczz9jyrLOStaMWcWFx6paQwdbbWeqTZ56BQw6B4cOTtqT2cGFx6pYTTrCQmAtL/aFqwvKOdyRtSW3iwuLULfvvD6ee6sJSj7z+Oqxc6cJSKlxYnLrmjDPgpZdg/fqkLXHKSWhf8Qm9SoMLi1PXvO1tFhaZPj1pS5xyMmUK9OsHY8cmbUlt4sLi1DUnnmjLadOStcMpL9On23fvaVxKgwuLU9cceCCMGOEeSz2xfTu88op13nBKgwuLU/eceKJ7LPXE7Nmwc2fKW3WKjwuLU/eMHw8LF8LatUlb4pSD4J26sJQOFxan7gkVjIfD6oPp06FvXxg5MmlLahcXFqfuOfZYW86alawdTnmYMQOOP94b7kuJC4tT9wwcCAMGWOzdqW3a2mDOHDjmmKQtqW1cWBwHOPJIF5Z6YOlS2LwZjjgiaUtqGxcWxyElLKpJW+KUkjlzbOnCUlpcWBwHE5YNG6C5OWlLnFIShOXww5O1o9apOGERkZtF5FUReVlEHhCRvrFjXxSR+SLymoicl6CZTo1x5JG29Ab82mbOHGtTO/DApC2pbSpOWIAngKNU9RhgHvBFABE5ArgUOBI4H/iFiHROzEqnpgjC4u0stc2cOR4GKwcVJyyq+g9V3RVtTgaGRusXAfeo6nZVfQOYD5ychI1O7TFgAPTvD/PnJ22JUypUYe5cD4OVg/2SNmAvfAK4N1o/GBOawLJoXztEZAIwAaChoYGmpqYSm1gdbNq0ycsiIltZDBx4AlOn7qKp6eXyG5UQ9fR3sW7d/qxf/3Y6dXqdpqY9G9PqqSxKTSLCIiITgcEZDn1JVR+MzvkSsAu4u5B7q+qtwK0AY8eO1cbGxn0ztkZoamrCy8LIVhbHHw/PP09dlVM9/V288IItzztvNI2No/c4Xk9lUWoSERZVPTfXcRG5CrgQOEf1rQ6gzcCw2GlDo32OUxRGjYJ774UdO6BLl6StcYrNwoW29FQupafi2lhE5HzgC8D7VHVL7NBDwKUi0lVEDgVGA1OSsNGpTUaNspHZixYlbYlTCoKwHHposnbUAxUnLMAtQC/gCRGZKSK/AlDV2cB9wBzgMeA6Vd2dnJlOrTFqlC29Ab82WbgQBg+GHj2StqT2qbjGe1UdlePYt4Fvl9Ecp4447DBburDUJgsXehisXFSix+I4iTBwIHTvDosXJ22JUwpcWMqHC4vjRIjAsGGWqNCpLXbssO/VhaU8uLA4TgwXltpk8WIbIOkN9+XBhcVxYriw1CbLltly2LDc5znFwYXFcWIMGwYtLbBr197PdaqH5cttefAeuTqcUuDC4jgxhg2zsSyhInJqgzAdggtLeXBhcZwYIVTi4bDaorkZevWyj1N6XFgcJ4YLS22yfDkMGZK0FfVD1gGSIjyUx/VrVLmqeOY4TrIMjSZpcGGpLZqbPQxWTnKNvD8c+LccxwX43+Ka4zjJ0qePpfxYsSJpS5xi0twMZ56ZtBX1Qy5h+ZIqT+e6WISbimyP4yTOoEGwcmXSVjjFoq3Nevq5x1I+sraxqHLf3i7O5xzHqTYGDnRhqSVWr4adO11YyklWYRFhgAhfE+EzIhwgwi9FmCXCgyJkTRTpONXOoEGwalXSVjjFoqXFlgcdlKwd9USuXmF/ALqSmvdkIXAx8Hfg9tKb5jjJ4KGw2mL1als2NCRrRz2Rq41lkCr/LYIAi1W5Odr/qgjXlcE2x0mEQYOgtRV274bOnZO2xtlXWlttOWBAsnbUE7k8lt0AqiiwOu1YW8kscpyEGTjQGnzffDNpS5xi4B5L+cnlsYyMxrJIbJ1o23OEOjXLoEG2XLXKRMapblavtikR+vVL2pL6IZewXBRb/2HasfRtx6kZgrCsXAlHHZWsLc6+09pqorJfxc2XW7tkLeq9jWFxnFolhExCbN6pblav9jBYucmV0uUVQLMdV+WYkljkOAnTv78t165N1g6nOKxe7Q335SaXc3hhtAw9wP4vWl5ODsFxnGonxOLXrEnWDqc4tLb6lMTlJlcobDGACO9U5fjYof8SYQZwY6mNc5wk6NoVund3j6VWWL0aTjklaSvqi3zS5osIb09t8LY8r3OcqqVfPxeWWkDVhOXAA5O2pL7Ip5/ENcCdIvSJttcBnyiZRY5TAbiw1AZbt1qesNBu5pSHvQqLKtOBY4OwqLK+5FY5TsK4sNQG66PaqnfvZO2oN3Ilobwwvq3K+nRRST/HcWoFF5baYMMGW7qwlJdcHsvNIjRjI+2z8R0sKaXj1BT9+sHMmUlb4ewrwWPp0yf3eU5xySUsK4H/2cv1rxfRFsepGNxjqQ3cY0mGXN2NG8toh+NUFH37wqZNnuG42nFhSQbvNuw4GejVy5abNydrh7NveON9MlSssIjIDSKiIjIg2hYR+ZmIzBeRl0XkhKRtdGqXAw6w5aZNydrh7BvBY/E2lvJSkcIiIsOAdwFLYrsvwGazHA1MAH6ZgGlOnRCEZePGZO1w9o0gLMEDdcrDXoVFhB4ifEWE26Lt0WXoZvxj4Au0z0l2EfA7NSYDfUXEZ7F2SkKoiNxjqW7Wr7f0PPvvn7Ql9UU+I+9/A0wHTou2m4E/UaJuxiJyEdCsqi+JtOvpfDCwNLa9LNrXknb9BMyjoaGhgaamplKYWXVs2rTJyyIin7KYP78vcBzPPvsiGzfW7pjgWv+7ePXVMXTvfiBNTc/v9dxaL4tyko+wHKbKR0S4DECVLSI5x7bsFRGZCAzOcOhLwH9jYbAOoaq3ArcCjB07VhsbGzt6q5qiqakJLwsjn7Lo0cOWo0cfTy0XW63/XfzqV5YnLJ93rPWyKCf5CMsOEboThaVEOAzYvi8PVdVzM+0XkaOxaY+DtzIUmCEiJ2Oe0rDY6UOjfY5TdLzxvjbYvDn1XTrlI5/G+68BjwHDRLgbeBJr/yg6qvqKqg5U1RGqOgILd52gqiuAh4CPR73DTgXWq2pLrvs5TkcJbSzeeF/dbN0K3bolbUX9kU8Syiei+VdOxdK7fFaV1SW3bE8eAd4NzAe2AFcnYINTJ7jHUhts22aN9055yTU1cfo4keAdHCLCIarMKJ1ZRuS1hHUlNZul45QU725cG2zdalkUnPKSy2P5UbTsBowHXsI8lmOAaaR6iTlOzbH//rDffvaL16letm51jyUJsraxqHKWKmdhnsoJqoxX5UTgeLzR3KkDunUzYdmwAS67DO66K2mLnL2xcyd86lPwwx/atrexJEM+jfdjVXklbKgyCzi8dCY5TmUQhOWOO+Cee+Dqqz3jcaVz//3w61/D5z8PS5d6G0tS5CMsL4twuwiN0ec24OVSG+Y4SROEZeLE1L5HH03OHmfv3HNPav3ppz0UlhT5CMvVwGzgs9FnDt4jy6kDgrDMng2XXAI9e8Lzex/A7SSEKvzrX3DFFdClC7z8sgtLUuTT3Xgblrvrx6U3x3Eqh27drH1l8WILg61aBZMnJ22Vk41Fi6C1Fd72NvueFi6EHTtcWJJgr8Iiwhu0TwYJgCojS2KR41QI3bqZqAAMGQLHHgu3326/jGWfkho5pWDOHFseeyyMGAGvvWbb3nhffvJJ6TI+tt4N+DDQvzTmOE7l0K1bqnIaPNh6HG3eDMuXw8EHJ2ubsyfz59ty1CgYNAheeMG23WMpP3ttY1HlzdinWZWfAO8pvWmOkyzduqUGSA4aBGPH2vq8ecnZ5GRn/nybKXLAAOjfPzUXiwtL+cknFBYfgd8J82Dy8XQcp6qJh1D694eBA219wQI466xkbHKyM3++eSsi9n0FXFjKTz4C8aPY+i7gDeCS0pjjOJVD166p9V69oF8/q7SafXhwRbJgARx/vK3HhSX+PTrlIR9huUaVhfEdIhxaInscp2KIzzrYq5d1YR04EJYtS84mJzstLfCeKEjfr19qf5cuydhTz+QzjuXPee5znJpiv+hnV6dOqXDK0KHusVQimzdbJurB0fSBPXumju3ngfuykyu78TjgSKCPCB+MHeqN9Q5znJomVEi9e6e6Fw8dauMjnMpi5UpbDhpky3i7igtL+clV5GOBC4G+wHtj+zcCnyyhTY5TEYQKKUz6BVZx+SDJymPFClsGjyXe8cKFpfxkLXJVHgQeFOE0VTyRhVN3hAopHlYZMABWr/ZBkpWGeyyVRa5Q2BdU+QHwUREuSz+uymdKapnjJEyokOK9igYMgN27Yf16n0Cqkkj3WFxYkiVXkc+NltPKYYjjVBqhQor3DhswwJarV7uwVBLBY2losKULS7LkCoX9LVr+tnzmOE7lsDdhGTWq/DY5mVmzxoQ+fGcuLMmSKxT2NzIknwyo8r6SWOQ4FcLehMWpHNatgz59UtsuLMmSq8h/WDYrHKcCCRVSfIBdGNH95pvlt8fJTnqbl/cKS5ZcobCnw7oIXYBxmAfzmio7ymCb4yRKqJDiFVPoehySUzqVwfr17T0WF5Zk2evIexHeAywAfgbcAswX4YJSG+Y4SRMqpHi34nRhmT4dPvYxmDsXp4zcfTdce63N8AkWCot7LJ07p9ZdWMpPvkkoz1JlPoAIhwEPAz77t1PTZBKWbt1sfxCWa6+FqVMtT9VTT5Xfxnpk5Uq4/HJbHzsWrr9+T48ljgtL+cknV9jGICoRC7HR945T08RzhQVEzGvZuNEquKlTbZxLU5O3u5SLBx6wpQj87W+2nmtckQtL+clHWKaJ8IgIV4lwJfA3YKoIH0zLIeY4NUUmjwVSwjJrlm1/5Ss2En/SpPLaV69MmgTDhsGECTBjBrS1ucdSaeQjLN2AlcCZQCPQCnTH8oddWDLLHCdh9iYsYdrij37Uzp05s6zm1S0zZsD48XD00da2smCBiUs8p1scF5bys9ciV+XqchjiOJVGPsJywAEwYgSMGQOvvFJ2E+uOjRttpsgrr4RDo1mhgsD36JH5GheW8pPP1MSHAv8JjIif7wMknVonl7Bs2GDzshxyiB0/6ijrIeaUljfesOWYMTaFAcDrr9uyW5bJPFxYyk8+Rf5X4A6sbaWtpNY4TgWRqfEeTFiam230fRiJP3KkNSrv3t2+q6tTXBYtsuWIEXDwwbYehCXb3PYuLOUnnyLfpsrPSm6J41QY2TyWAw6wGQtFrLsrwPDhsHOnZdkNFZ5TfOLC0q+fiX6Y0dOFpXLIp/H+pyJ8TYTTRDghfEpplIj8p4i8KiKzReQHsf1fFJH5IvKaiJxXShscJ1uF1LUrbN9u3YsPPND2HXKILZcsKY9t9cqiRdaW0tBgotKvX0pYsoXC0j1Op/Tko+VHA1cAZ5MKhWm0XXRE5CzgIuBYVd0uIgOj/UcAl2LTJQ8BJorIGFXdXQo7HCdUSOkeS7dusHWreS0hFDZ8uC0XL4bTTiufjfXGokXmrYTvJC4s2TwWn5Ct/OQjLB8GRpYxP9i1wPdUdTuAqq6K9l8E3BPtf0NE5gMng89u6ZQGzZLbu1s3GzcBKY/loINsGSacckpDSwsMGZLa7t/feolBdmFxyk8+wjILm/d+1V7OKxZjgDNE5NvANuBzqjoVOBiIzza+LNrXDhGZAEwAaGhooKmpqeQGVwObNm3ysojItyxmz24AjqS1dRVNTXPe2r9ixQiskySsWvUqTU0raGuDTp3OZNq0JTQ1vVEKs0tCtf1dLFlyCuPGbaCpyZKzqR4DWMrpWbOmsW3bptjZjQB5v1+1lUUlk4+w9AVeFWEqsD3s3JfuxiIyERic4dCXIpv6A6cCJwH3icjIfO+tqrcCtwKMHTtWGxsbO2pmTdHU1ISXhZFvWbS22rKhYSCNjQPf2v+vf6XOGT9+HI2N46LzoEeP4TQ2Di+muSWl2v4uNm6Eo47qTmOjTW4/bJil1QE444zxb3WmiJPv+1VbWVQy+QjL14r9UFU9N9sxEbkW+IuqKjBFRNqAAUAzMCx26tBon+OUlXgjcXxQXkMDrIr59aqwa1f7icKcwlBNtZFs327CMjCl8e3K30NhlcNe+0uo8nT8A+wGLimhTX8FzgIQkTFAF2A18BBwqYh0FZFDgdHAlBLa4TgZ6do1tZ4uLMHLaWuD886zrsfz5pXXvlrhN78xsbjjDttOeZCpc+Lln61XmFN+8uqIJ8LxItwswiLgm0ApZ5+4ExgpIrOAe4Ar1ZgN3AfMAR4DrvMeYU4S5PJYQuU3ZQo88YRt//jH5bWvFti1y5J7bt8ON91knkvwBrMJi3sslUOuOe/HAJdFn9XAvYComjdRKlR1B3B5lmPfBr5dyuc7zt7IJiz9+8Patbb+2GMWwjnzTFt3CuPFF60b8TnnwJNPmte3bp0d69cvdZ4LS2WSy2N5FRurcqEqp6vycywM5jh1TTZhCckpAV56CcaNg4susrEXzd4aWBDPPWfLG26w5fTplp8NoHfv1HlxMfER9pVDLmH5INACTBLhNhHOAXyokVM3ZBvH0qVLaj0uLL17W+hmxw4bWzF6NJxyih2bMaN0dtYi06dbkslzzjHPb968lGjH0+Nny2jsJEtWYVHlr6pcCowDJgHXAwNF+KUI7yqTfY5TccR7eaV7LGC/rBcsgFGjUrnEvAG/MObNM4+vSxfrAPHGGylhiXssLiyVST69wjar8gdV3ot18X0R+K+SW+Y4CZMtFUg85BLvIRaEZf58S/ly2GHW7jJgQGrOEGfvqFp5jRlj24ceauHEEAqLeyzerlKZFJSeTZW1qtyqyjmlMshxKp24xxIXmfBLesECW4bxFqNHp1K7O3tn9WpLmTN6tG0PHgwrV5rH0rlzezHxMUKVief9dJwCiYtJfO6V8Es6TEYVElQOGwbLl5fHtlogdHQIGaPDwNONG62M455kvL3LqRxcWBynQOK/kuOVXPBYwpwhIUHlkCFWWWbrDOC0J4hwSDY5cKB1416zpn37CrjHUqm4sDhOgWSrzILHkklYNm9ONT47uQkeSxCWMCDyjTfat6+AC0ul4sLiOAWSbbxEeigsCEuYUTL8El+xAo4+Gi6/3L2Ylhabv+bGG1P7QjkNjtLU9uljy+bmPYXFQ2GViQuL4xRItl/JoVG5uRl69kz1GAsVZEuLLW+5BWbNgrvvhqefLq2tlc4PfgCTJ8P3vw9zo0RRLS3WPhVEI4S/Vq3asxeYeyyViQuL4xRIrimLwQZJxtOO9LfpQlizxpZPPQXHHWcj+B98sGRmVgUPPWRlAfDoo7Zcsybl7UHKS9m6tX33bnBhqVRcWBynQOI9weLEU7307JlaD8Kydq2JzvTp8K53wfjxlqyyXlmyBBYuhKuvtqmdp02z/WvXthfmeIN9egZjF5bKxIXFcQqkU5b/mmypXkIluXattb/s2GFtLCeeCDNnwu46zcD3yiu2PPFEOPJICw9CbmFJ91iyibyTLC4sjlMg2YRFJFXxxYXlgAOsAly7NtVj7NBDLQS0ZYv9aq9HgpAceaSlvlmwwDozpAtLvME+3WPJ9l04yeJfi+MUSK7KLAhLPBQmYhVlurCMjCbcDr3I6o1XX7UuxX372iDSLVusjNKFJd5g7x5LdeCJph2nQHIJS7dultMqPTliXFi6dLGeYiEEVq/CsmSJta1AapT94sU270pcWOJi4h5LdeBfi+MUSD4eSzZhWbkSBg2yewwZYo3PcWFRTYWEaont2y3/V5ylS81TATjoIFvOm2fvHheWeNuVeyzVgQuL4xRIrsos/KJOF5bevc2TiYd5One2OUeWLk2d993vWrr9T3+6uDYnyfbtcMIJ5pXMn2/7VO29g6cSuheHUGG8XUUkJS7usVQH/rU4ThayeQ35eCzpA/l69rQ2hDVrUt2PwbyX1tbU837xC1u/7bbUNMfVzl/+AnPmmLCG93vzTdi2LeWxhISdS5bYMl2YQ04291iqAxcWxymQvbWxwJ6pRnr2tHxh6Q3TAwfaiHKw7rfNzfCJT8DOnfDPfxbX7qR47DHzSM45ByZOtH0rV9py0CBb9u1r5bpsmW1nm8ArXVjcY6lM/GtxnCxkm+grV2UWBCX9l3SPHnsXlpdftuV//Ie1vYR536ud556DM8+0nGBz5pin8uabdiyEwDp3NnEJwpLu8YUyTxdsF5bKxL8WxymQXJVZSPeSnvYleCzpobCBAy0U1tZmubI6d7bBk0cemRKaaiaM0znmGHuv3bttdsh0YQEb7xNENltOsPSy91BYZeLC4jgFko+wpFd4PXta2vytW/f0WHbtMk/m1VdtOuMuXWxa3lqYdXLuXGs7OuooG7sD1o6SSVh69Uq1N6WHwrIJi3sslYl/LY5TILkqsyAomYQlENLAQ/s8Ys3NqXEdo0dbN+SdO1PnLlwI999v3k0lsmULPPlk+xQ18+bZcuxY6wEHFu7K5rFs327r6R5LNsF2j6UycWFxnALJVZmFdplMobBA/Nd4EJn1622eltCYPWqUVdCLF9v29u3wtrfBxRfDr361b/aXio98BM49F7785dS+0GZyyCHmne23n3UzXrPGGuLTU98EsgmLeyzVgX8tjlMguSqzICzp4hMffxGvNEOCxfXrU4MnITV7YpjD5YknUj2pbr+9Y3aXkuZmePhhW7/ttpTXsmyZhbh697YyGTLE9oW2pngHibiw5BsKc4+lMnFhcZwC6YiwxHszxYUleCzLlllvqTApWBiJvmKFLZ9/3n6133ijZUTesKHD5peExx+3tpQbb7Qw15w5tn/ZstRYFbD3ammx9qb02SDj2+keS7YQo3sslYl/LY5TINm6IcdJD4XtTVhCW0TwWNJnnZw2zXqKnXOOVeAvvFC43aVkxgwThiuvTG2DCUuYmhnMS1m71nrIxcOD0N5LyTZA0kNh1YF/LY5TREJFl/7LOj4hVSZhWbDAlg0NtjzwQBOn4LHMmWNddo89NrUd5+GH4dln993+vdHWZs8Kghd48UWbBmDkSHv38D6rV6fEElI50zIJSxj82KlT9gm8PBRWHbiwOE4RKTQUFirX0H4SwkGdOlmF3NJi3ZGXL4cRIyz1Se/eqZxbAM88AxdeCO94R8rzKRW/+IU964wz2vf+ev11OPxwe894TrD0cTvBY9myZU+vJJRR9+7ZvcJcbVdO5VBxwiIix4nIZBGZKSLTROTkaL+IyM9EZL6IvCwiJyRtq1PfnHfenvtCfrF8Q2Fdu1olGgYGxhuwQyW8fLl5CsOG2bmjR7cf4/KHP6TW/+//OvYu+XLnnbZcsMAEDcz7aG014QMbi7NggQnPunXthaVfP9u3ceOeHktcWNLJFgoLQnPBBR18IackVJywAD8AblLV44CvRtsAFwCjo88E4JeJWOc4mIfx4IN77g9jTPL1WERsOwwMjAtLnz7WWywkZgyZgEeObJ9qf+JEeP/7Yfz4PfOL7dwJf/1ratxIvrzyioW34qxcafu+/GWr4JuabH/oEh2E5ZBDrJfYunW2HReWPn1MfFeuzC4s6aIM2YUFrCv23/+e54s5ZaEShUWBMMt1H2B5tH4R8Ds1JgN9ReSgJAx0nIED90yICIULC1hIKJPHEoQljAUJAwwPOijV9rJ5sw2cPP54G+cyZUr7ENU3vwkf+AC8+917ZmteuxamTu23x4DLhQvhpJPg5JNh9uzU/pkzbXn22Rb2CsIThCUM7gz5z4KYxYUliMmbb2YPheWaiyZTm0qXLt6IX2lU4gyS1wOPi8gPMeF7W7T/YCA2cwXLon3tmhFFZALm0dDQ0EBT+FlV52zatMnLIiLfspg9uwE4ktbWVTQ1zdnr+QBr1hwD9Of11+fS1LQydq/egEVvX3jhOfr2TQ2p79z5VMAaC2bMeJbu3U0Ztm07nJUrezN58lJgDK+99hytrTvZsuUQNmwYyeOPP8OiRT1RPRGYRZcu+7Nly1j+9KfJDB68DVW49Va795QpcOedUznssM2AVd7XXXcCc+cey6JF8/nwh5e9Zc9vfzuc7dst/8o3vrGUa6+1lvj77z8EGMmmTf+kf/+xvPxyD5qapjJp0mBgHEuWTGbHjm1s3DiUnTtH8cADLwPHsGzZyzQ1rQFgyZJBwOFRWS2lqWnBW89dunQYcBjbtu2gqelf7cp169aTgR7MmTOL/v1X5/VdQCNA3n/3/j9SRFS17B9gIjArw+ci4GfAh6LzLgEmRut/B06P3eNJYHyu54wZM0YdY9KkSUmbUDHkWxb33acKqhdfnP+9zznHrrn77vb7p02z/aC6Zk37Y+PGpY7t3p3af+21qgceqPqtb9mxbdts/x132PYbb9hzQHXWLNVJk2z9iSfsvLlzbfsrX7HlLbek7j1zZuqZo0a1t+f001XHj1c9+2zV449P7f/EJ1QHDbL1L3xBtUsX1V27VL//fbvPpk127A9/sO0f/ciWzz+fusef/5x67pe/3P65P/2p7e/bd89yHTvWjj344J7HshGeky/+P5ICmKb7UMcn4kCq6rmqelSGz4PAlcBfolP/BJwcrTcDsaFWDI32OU7FkE8oLP1YCI317Nk+pBNCYWvX2jkh9BbGuKxYYQ37YGGyUaNsPXT1DdmRP/ABC589/3zq3k8+actLL13C/Pmpdpy2Nhszc/rpNuvj7NnWKw3az1E/ahTs2GFhutZW650VQlshyWaYGTNkFwjvGMgWCouH8tLx7sXVQSVGJpcDZ0brZwOh/8tDwMej3mGnAutVtSXTDRwnKfLpFZZprhZo374CJiy7dlmX4759U/vDuJCVK+1Yjx5WeQ8ZYs9ZuNCOv/yyPevww238y9y5qXtMmWIi8fa3r37rXDDx2LYNjjjC0tzv2JHqwrx4cUpYQsqZFStsrEpDQ6qBPYzNCWNdsg18zNZ4n0lYcjXeO5VHJX5NnwR+JCIvAd8hai8BHgEWAvOB24D/SMY8x8nOvngsmYQFbB74eKr9kBF4zRrzWIYMsYo3jH0JY2Jef91S1XfrluoCHITvtddMcA491NpcgrAE8Tn8cBMXMGFpa2vvsQwcaMvWVhOWMLVw3O5MwpLLYwkeWS6PxYWlOqi4xntV/SdwYob9ClxXfoscJ3+CsKR7LPGR5OnCEirUdGEJIaQlS1JdjSHlvaxfnxKWQFxYli1L9SQ77DA7f80aE6l586CxEXr23M3QoSY0kAqjjR6dEqHQdXj79tSzQoaAVav2LizxXnBxMUnvVRfEN9O0ANkGnjqVieu/4xSRjngsoYJNH0UeKuSWlvYeSxidv25d+4zI0F5YmptTwjJypC0XLrTw1ZYtJh5gAy9Dl+bly00UGxpSae6bm008ICUgcWFJH12fr7BkCxd6KKz68a/JcbIQKuWjj87/mmzCEt9OrxxDhZqeHysIze7d7ScH69zZvJl16yzLcfxYGEPS1mYiERJAhmzJoV0GUsfiwtLSYp0DOnWyz5AhJizpE3P17Jkaf7NpU3tvK3RC2LTJ3ikuIHGBTX/fXB5L/N2dyqfiQmGOUymcdhpMnmwj2vMlW+N9rl/a2YQl/ks/fVBl374pYYn3uho0KBWe2rkzJR6hTWTVqtSv/8GDbarkoUPhb38z25cvT4kQ2PXZZnxsaLA2lnRhETFRzJQPLB7+yhUuzEYhHsu996Z6zTnlxYXFcXJwyimFnZ/NYym2sPTubSGozZvbC8uAASYooWdYCFmFZWtrSvwGD7bUMMOGmcCsXWseSwibgQnVggUpYUlvS1m/PnOm4u7dcyeazPS++czMWYiwXHJJ/uc6xcVDYY5TRPIJhaWTLUdWtlknwSry0JYSD4WF9TCGJDT0x0NXIR1MaJsJorN69Z5tNiHNfSaPpVcvu2b37szCksnuXB5LPqLhobDqwIXFcYpIuUJhPXqkBCLusYT1kL8rPv4lhK5WrDABCsIVxOLNNy28Fr+mf3/zjN580yr1uIj17p2yIb1HW7A33WOJl0v6++YzM6c33lcHHgpznCLSkVBYqGwLFZbQCB8XllDxh5H0mRr2VfecIwWsPWLHjvbX9OtnIa3Vq81Dic+T0qtXSljy9Vji12cTllwzdLqwVAcuLI5TRDoSCgvCkisUlt4VuUcPa0uBzKGwICxx76NPH2vs79q1vRgFjyWk4k8XFrCeYeneR69e1jYD2YUl/Zo46e+bT5jLQ2HVgeu/4xSRbAMkc/3SDpVlIR5LvCLPFQpLD11t2GCTbIWxMJASj0WLst9v5crMwhJID4UFIcwlLIV4LGFfLm/GqRxcWByniARhSReSfEJh6WIUb+jOFAoLxCv1sL58uVXc8et69TJRSe+iHK5pjlK6xsUoCFhr655eSXw7m8eSac6aQDbxdWGpflxYHKeIhMb7dCHJVSGGCjb9nPgv+lzCkkmAVq0ygYjfM3gs6cLSpYt99iYsucakZBOWTLNBBjrSxpJrEjCncvA2FscpItk8llyEUFguMYqP/4D2QpPNs4mLB6Q8lq5d24exwLyWMPo+k7DsbbBjurCEUFg+bUuBfDwWF5bqwD0WxykiQVgKCdlk81ji5Mo9lk1YMg2q3L3b2ksyiU7oZZZJWCC3sKSHvLKF9+J0xGNxqgMXFscpItlCYbkIolGIsMQr5Xil3rlzSnTSe5LFRSKTx5LpvGz705+bLhJhuxCPJZ9ycKoDFxbHKSIdCYV1xGPJJiyQ8lTShSW+ne6xxAUk7unk67F0RFg60ivMQ2HVgQuL4xSRfWlj6aiwZGt/ySUsuXp4ZTsvXVji52UTllyhsI60sTjVgQuL4xSRjrSxBDoqLOkilo+wpHs5YbtTp+xp7osdCvNeYbWLC4vjFJHQdpHrl3o6obLsqLCkEzyLQoQl3i6TLe1KsUNhhXgsxx1ny3gmAadycWFxnCLy8MNw882pScLyIcyYmKsSTvdKcglLEJD0XmH5eCzpYhS3Kf1YLmHJp1dY+jvlCgn+4hfw7LM2xbJT+biwOE4RGT4cPve5wq4ptscSjnUkFJZ+Ta5n5jNpVyFtTeHcdEEMdp1+ev73cpLFhcVxqoBChCVbd+P4dnqDfz7Ckm5DXFjSBSSfUGC6kO7aZctc+cWc6sCFxXGqgI54LOleSb5tLPnakC5OcYLQ5DPHSmDLFlumdxJwqg9P6eI4ZeLJJzveq6kjHkuuNPwdCYWl3y+f9pNCeseNGQNnnQXf+U7+1ziViQuL45SJs8/OfbzYbSy5QlfZQmGZshGLmCAWMsdMPtmI04916QJPPZX9fKd68FCY41QIubyZjghLehgqW36x+HYmsQj3KURYOpLaxqkd/Gt3nCqgGB5LPHSVrY0ldH3O9OxCZnzMZ6Coj6avXVxYHKcKKGQcS7Y0/LmEJWyH6Y4zPTuXUKWTTxdqF5baxYXFcaqAQjyWQC4xytbGUoiweCjMyYZ/7Y5TIRSr8T7cJ5eHkS0FS6Z2niAOHgpz8sWFxXGqgEK8hUCuUFj69eHcXMLSEY/FxaM+cWFxnCogvRLPp8LOJh7p65nOzXRdR9pYChkg6dQOiQiLiHxYRGaLSJuIjE879kURmS8ir4nIebH950f75ovIjeW32nGSoxBhCcdyVeqFeCzhfh4Kc/IlKY9lFvBB4Jn4ThE5ArgUOBI4H/iFiHQWkc7A/wIXAEcAl0XnOk5dUAyPJU4hHksQCQ+FOfmSyMh7VZ0LIHv+1V0E3KOq24E3RGQ+cHJ0bL6qLoyuuyc6d055LHac0lPIAMl8QkzF8ljCvkJCYem2FHrMqW5EE5ySTUSagM+p6rRo+xZgsqr+Ptq+A3g0Ov18Vf23aP8VwCmq+ukM95wATIg2j8K8IwcGAKuTNqJC8LJI4WWRwssixVhV7dXRi0vmsYjIRGBwhkNfUtUHS/VcVb0VuDWyYZqqjt/LJXWBl0UKL4sUXhYpvCxSiMi0fbm+ZMKiqud24LJmYFhse2i0jxz7HcdxnAqi0robPwRcKiJdReRQYDQwBZgKjBaRQ0WkC9bA/1CCdjqO4zhZSKTxXkQ+APwcaAAeFpGZqnqeqs4WkfuwRvldwHWquju65tPA40Bn4E5VnZ3Ho24tzRtUJV4WKbwsUnhZpPCySLFPZZFo473jOI5Te1RaKMxxHMepclxYHMdxnKJSs8JSbylgROROEVklIrNi+/qLyBMi8nq07BftFxH5WVQ2L4vICclZXnxEZJiITBKROVHqoM9G++uuPESkm4hMEZGXorK4Kdp/qIi8EL3zvVGnGKKOM/dG+18QkRGJvkCRiTJ5vCgif4+267IcAERkkYi8IiIzQ/fiYv2P1KSw1GkKmLuwNDhxbgSeVNXRwJPRNli5jI4+E4BflsnGcrELuEFVjwBOBa6Lvv96LI/twNmqeixwHHC+iJwKfB/4saqOAtYC10TnXwOsjfb/ODqvlvgsMDe2Xa/lEDhLVY+Ljd8pzv+IqtbcBzgNeDy2/UXgi0nbVYb3HgHMim2/BhwUrR8EvBat/xq4LNN5tfgBHgTeWe/lAfQAZgCnYCPM94v2v/X/gvW8PC1a3y86T5K2vUjvPzSqLM8G/g5IPZZDrDwWAQPS9hXlf6QmPRbgYGBpbHtZtK/eGKSqLdH6CmBQtF435ROFMI4HXqBOyyMK/8wEVgFPAAuAdaq6Kzol/r5vlUV0fD1wYFkNLh0/Ab4ARGk1OZD6LIeAAv8QkelRKiwo0v9IIuNYnPKjqioiddW3XEQOAO4HrlfVDfGkp/VUHmpjwY4Tkb7AA8C4ZC0qPyJyIbBKVaeLSGPC5lQKp6tqs4gMBJ4QkVfjB/flf6RWPZZcqWHqiZUichBAtFwV7a/58hGR/TFRuVtV/xLtrtvyAFDVdcAkLOTTV0TCD8v4+75VFtHxPsCb5bW0JLwdeJ+ILALuwcJhP6X+yuEtVLU5Wq7CfnCcTJH+R2pVWDwFjPEQcGW0fiXW1hD2fzzq6XEqsD7m/lY9Yq7JHcBcVf2f2KG6Kw8RaYg8FUSkO9bWNBcTmIuj09LLIpTRxcBTGgXVqxlV/aKqDlXVEVh98JSqfow6K4eAiPQUkV5hHXgXlgm+OP8jSTcglbBh6t3APCye/KWk7SnD+/4RaAF2YvHPa7CY8JPA68BEoH90rmC95hYArwDjk7a/yGVxOhY/fhmYGX3eXY/lARwDvBiVxSzgq9H+kVgevvnAn4Cu0f5u0fb86PjIpN+hBGXSCPy9nssheu+Xos/sUEcW63/EU7o4juM4RaVWQ2GO4zhOQriwOI7jOEXFhcVxHMcpKi4sjuM4TlFxYXEcx3GKiguLUxeIyO4oi2v4jEjapmIgIleJSKuI3B5tN4bMvbFz7hKRizPfAUTkZhFZISKfK7W9Tn3gKV2cemGrqh6X6UA0oFJUtS3T8SrgXlX9dEcvVtXPi8jmYhrk1DfusTh1iYiMEJuv53fYwMFhIvJ5EZkazTdxU+zcL4nIPBH5p4j8MfyyF5EmERkfrQ+I0oWEpI83x+7179H+xuiaP4vIqyJydyRqiMhJIvIvsXlTpohILxF5RkSOi9nxTxE5dh/eeXzMY3ulXnKlOeXHPRanXugeZfgFeAP4f9jcEleq6mQReVe0fTI2yvghEXkHsBlLAXIc9v8yA5i+l2ddg6W8OElEugLPicg/omPHA0cCy4HngLeLyBTgXuAjqjpVRHoDW7G0NFcB14vIGKCbqr6Ux7ueEXtXgEOwkebTovdARG4GHsvjXo5TMC4sTr3QLhQWtbEsVtXJ0a53RZ8Xo+0DMKHpBTygqlui6/LJOfcu4JhYu0af6F47gCmquiy610xsDp31QIuqTgVQ1Q3R8T8BXxGRzwOfwCZzy4dnVfXC2Lu2u05EPgKcENnpOEXHhcWpZ+LtCgJ8V1V/HT9BRK7Pcf0uUuHkbmn3+k9VfTztXo3YjI6B3eT4H1TVLSLyBHARcAlwYg5b8kJEjgK+DrxDLZ2+4xQdb2NxHONx4BNic7ggIgdH81Q8A7xfRLpH2WDfG7tmEanK/uK0e10bpe5HRMZEGWSz8RpwkIicFJ3fK5bK/XbgZ8BUVV27Ly8YZTn+I/BxVW3dl3s5Ti7cY3EcQFX/ISKHA89H7embgMtVdYaI3ItlgV2FTckQ+CFwn9jsew/H9t+OhbhmRI3zrcD7czx7RxSe+nmU2n4rcC6wSW1iqg3Ab4rwmhcBw4HbonckW085x9kXPLux4xSAiHwdq/B/WKbnDQGagHGZukOLyFVYCvMOdzeO7vN1yvheTm3joTDHqVBE5OPAC9hcGdnG2GwFLggDJDv4nJuBy2nf5uQ4HcY9FsdxHKeouMfiOI7jFBUXFsdxHKeouLA4juM4RcWFxXEcxykqLiyO4zhOUfn/NQOv8Pa1q/UAAAAASUVORK5CYII=\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# Band-stop ass Filter using Rectangular window method"],"metadata":{"id":"6cLZV0tsBst9"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","band = [200, 400]  # Desired band-stop range, Hz\n","trans_width = 100  # Width of transition from stop band to pass band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, band, window='rectangular', pass_zero=True, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"jvduXjuDCobn","outputId":"e8de4f9b-e2b4-413e-e367-bed0487c409c"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":["# Band-stop ass Filter using Blackman window method"],"metadata":{"id":"RT1EOHosBvNG"}},{"cell_type":"code","source":["import numpy as np\n","from scipy.signal import firwin, freqz\n","import matplotlib.pyplot as plt\n","\n","# Filter requirements\n","fs = 1000  # Sample rate, Hz\n","band = [200, 400]  # Desired band-stop range, Hz\n","trans_width = 100  # Width of transition from stop band to pass band, Hz\n","numtaps = 101  # Size of the FIR filter\n","\n","# Compute the filter coefficients using the firwin function\n","taps = firwin(numtaps, band, window='blackman', pass_zero=True, fs=fs)\n","\n","# Compute the frequency response of the filter\n","w, h = freqz(taps, 1, worN=2000)\n","\n","# Plot the frequency response\n","fig, ax1 = plt.subplots()\n","ax1.set_title('Digital filter frequency response')\n","ax1.plot(0.5*fs*w/np.pi, 20*np.log10(np.abs(h)), 'b')\n","ax1.set_ylabel('Amplitude [dB]', color='b')\n","ax1.set_xlabel('Frequency [Hz]')\n","ax1.set_ylim([-100, 10])\n","ax1.set_xlim([0, 0.5*fs])\n","ax1.grid()\n","\n","plt.show()\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":295},"id":"h9YOq_gECrfO","outputId":"68d07157-7abb-4c3c-dd0c-1fe77a4a2e9a"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}]}]}