{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "TdC_PF_2021_bodeScript.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "I_b5TS1Hj_-Q" }, "source": [ "# Teoría de Circuitos 2021 - Proyecto final\n", "## Script de procesamiento de señales\n", "\n", "En este archivo se podrán generar, leer y procesar las señales sinusoidales adquiridas por la Arduino y también podrán realizar el diagrama de Bode correspondiente." ] }, { "cell_type": "markdown", "metadata": { "id": "nqMfnq-1kpof" }, "source": [ "Importación de librerías:" ] }, { "cell_type": "code", "metadata": { "id": "o8kUyPSV9JGY" }, "source": [ "# -*- coding: utf-8 -*-\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ], "execution_count": 1, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "I9nioBxJzuLd" }, "source": [ "#Diagrama de Bode\n", "En esta parte se realizan los diagramas de Bode asintótico, teórico y experimental de la transferencia del Proyecto final." ] }, { "cell_type": "markdown", "metadata": { "id": "IbOOwd370VcE" }, "source": [ "Definición de funciones:" ] }, { "cell_type": "code", "metadata": { "id": "nFTjP7ia0Yjz" }, "source": [ "def get_H(jw,G,wc1,wc2):\n", " # Transferencia\n", " return G*((jw/wc1)/((1+jw/wc1)*(1+jw/wc2)))\n", "\n", "def get_Ha(jw,G,wc1,wc2):\n", " # Transferencia asintótica\n", " # Condición lógica: 1 sí w< wc, (wc/jw) si no\n", " return (G*(jw/wc1))*(w<=wc1) + G*(w>wc1)*(w<=wc2) + (G/(jw/wc2))*(w>wc2)" ], "execution_count": 6, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "GzoWb_FdtohI" }, "source": [ "# Variables" ] }, { "cell_type": "code", "metadata": { "id": "ooT9ct2G1Ac7" }, "source": [ "# Constantes\n", "pi = np.pi\n", "j = 1j \n", "\n", "# Variables\n", "fc1 = 1 # frec. de corte inferior (Hz) <-- MODIFICAR SI TOCARON R1 !!!!!!!!!!!!!!!!!!!!!!\n", "fc2 = 30 # frec. de corte superior (Hz) <-- MODIFICAR SI TOCARON R2 !!!!!!!!!!!!!!!!!!!!!!\n", "G = 50 # Ganancia <-- MODIFICAR en función de sus resistencias !!!!!!!!!!!!!!!!!!!!!!\n", "print(\"G = %.3f\"%G)\n", "fmin = 0.01\n", "fmax = 1000\n", "logf = np.arange(np.log10(fmin),np.log10(fmax),0.01)\n", "f = 10**logf # Vector de frecuencias, escala logarítmica.\n", "\n", "wc1 = 2*pi*fc1 # Frecuencia angular de corte inferior\n", "wc2 = 2*pi*fc2 # Frecuencia angular de corte superior\n", "w = 2*pi*f\n", "\n", "# Transferencia\n", "H = get_H(j*w,G,wc1,wc2)\n", "\n", "# Transferencia asintótica\n", "Ha = get_Ha(j*w,G,wc1,wc2)\n", "\n", "# Cálculo de módulo y fase\n", "# Real:\n", "modH_db = 20*np.log10(np.abs(H))\n", "angleH = 180*np.angle(H)/pi\n", "\n", "# Asintótico\n", "modHa_db = 20*np.log10(np.abs(Ha))\n", "angleHa = 180*np.angle(Ha)/pi\n", "\n", "#Experimental: (Utilizar los valores a partir de la pestaña \"Measurements\" en el WaveForms)\n", "f_exp = np.array([0.01,0.032,0.1,0.32,1,3.2,10,32,100,320,1000]) # Agregar valores (los que aparecen acá son sólo de ejemplo)\n", "w_exp = 2*pi*f_exp\n", "modH_exp_db = 20*np.log10(np.array([2.76,6.9,20.5,52.8,80.3,85.8,83.7,65.9,33.7,12.1,4])) # Agregar valores (los que aparecen acá son sólo de ejemplo)\n", "angleH_exp = np.array([85,84.8,76,52.6,20,2.95,-11.3,-35,-61.2,-76.3,-82]) # Agregar valores (los que aparecen acá son sólo de ejemplo)" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "Cp92-MDa4FIk" }, "source": [ "Diagrama de Bode de $H(j\\omega)$" ] }, { "cell_type": "code", "metadata": { "id": "PnJ-3fiF5TPi" }, "source": [ "plt.figure(figsize=[15,12])\n", "plt.subplots_adjust(hspace=0.3)\n", "plt.subplot(211)\n", "plt.plot(f,modH_db,label='$H(j\\omega)$')\n", "plt.plot(f,modHa_db,'r',label='$H_{a}(j\\omega)$')\n", "plt.plot(f_exp,modH_exp_db,'m*',label='$H_{exp}(j\\omega)$')\n", "plt.vlines(fc1,np.min(modH_db),np.max(modH_db),'g',linestyles='dashed',label='$f_{c_1}$')\n", "plt.vlines(fc2,np.min(modH_db),np.max(modH_db),'g',linestyles='dotted',label='$f_{c_2}$')\n", "plt.xlabel('$frec$ (Hz)')\n", "plt.xscale('log')\n", "plt.ylabel('$|H(j\\omega)|_{db}$')\n", "plt.title('módulo')\n", "plt.legend()\n", "plt.grid()\n", "\n", "plt.subplot(212)\n", "plt.plot(f,angleH,label='$H(j\\omega)$')\n", "plt.plot(f,angleHa,'r',label='$H_{a}(j\\omega)$')\n", "plt.plot(f_exp,angleH_exp,'m*',label='$H_{exp}(j\\omega)$')\n", "plt.xlabel('$frec$ (Hz)')\n", "plt.xscale('log')\n", "plt.ylabel('$