Skip to content

Instantly share code, notes, and snippets.

@joaoantoniocardoso
Created October 29, 2021 00:55
Show Gist options
  • Save joaoantoniocardoso/4b8bad0191040ed24cd4473b0e4d48e8 to your computer and use it in GitHub Desktop.
Save joaoantoniocardoso/4b8bad0191040ed24cd4473b0e4d48e8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2019-08-23T19:38:05.639903Z",
"start_time": "2019-08-23T19:37:50.053812Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.69687412 99.62712426]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOydd3hUZfbHP+/MpIeahCSQQCih914EQVBBFBTR1XUtWLGXXZVdXdvyW1nbrqIudlaXFduquICCgIJSpPcWIiWkE0ghdea+vz+mZCYzyUySmUwm836eJ09m7n3n3jPJne+ce97zniOklCgUCoUi8NH52wCFQqFQeAcl6AqFQtFCUIKuUCgULQQl6AqFQtFCUIKuUCgULQSDv04cGxsrU1JS/HV6hUKhCEi2b9+eL6WMc7XPb4KekpLCtm3b/HV6hUKhCEiEECdq2+c25CKESBZCrBNCHBRC7BdCPOhijBBCvCaESBNC7BFCDG2s0QqFQqGoH5546Ebg91LKHUKIVsB2IcRqKeUBuzHTgFTLzyjgn5bfCoVCoWgi3HroUsosKeUOy+Ni4CDQqcawmcCH0sxmoK0QItHr1ioUCoWiVuoVQxdCpABDgC01dnUCTtk9z7Bsy6rP8auqqsjIyKC8vLw+L1Mo/E54eDhJSUmEhIT42xRFEOOxoAshooEvgIeklEU1d7t4iVORGCHEncCdAJ07d3Z6QUZGBq1atSIlJQUhXB1SoWh+SCk5c+YMGRkZdO3a1d/mKIIYj/LQhRAhmMV8iZTyvy6GZADJds+TgMyag6SUb0sph0sph8fFOWfdlJeXExMTo8RcEVAIIYiJiVF3lgq/40mWiwDeAw5KKV+pZdgy4CZLtstooFBKWa9wi935GvIyhcKvqOtW0RzwJOQyDrgR2CuE2GXZ9iegM4CUchGwArgMSANKgTneN1URCBhNGucrjLSJDPW3KQpF0OFW0KWUP+E6Rm4/RgL3essoReBy/EwppZVG+oYZMOhVZQlFy0BKiUmTzf6abt7WBQi33HILn3/+eZ1jFi9eTGam07RCi6PSqAEuZsQVigDmya/20eOJlf42wy1K0JuIYBF0haIlsmTLSX+b4BF+q+Xijme/2c+BzJrZkY2jb8fWPH1Fv1r3//nPfyY2NpYHHzRXN3jiiSeIj4/ngQcecBgnpeT+++9n7dq1dO3aFfs2fs899xzffPMNZWVljB07lrfeeosvvviCbdu2ccMNNxAREcGmTZt48cUXncapiTWFQtEYlIdux2233ca//vUvADRNY+nSpdxwww1O47788ksOHz7M3r17eeedd9i4caNt33333cfWrVvZt28fZWVl/O9//2P27NkMHz6cJUuWsGvXLiIiIlyOUygUzZvPt2f424Q6abYeel2etK9ISUkhJiaGnTt3kpOTw5AhQ4iJiXEat379eq6//nr0ej0dO3bkoosusu1bt24dL7zwAqWlpRQUFNCvXz+uuOIKp2N4Oi4QKKkwUmE0ERMV5m9TFAqf8ofPdjN7WJK/zaiVZivo/uL2229n8eLFZGdnc+utt9Y6zlV4pLy8nHvuuYdt27aRnJzMM88843KxiafjAoX0vBIAIkP0GDXNaf/5CiMGnSAsRN/UpilaALnF5cRFh6mQpAeokEsNrrrqKr799lu2bt3KpZde6nLMhAkTWLp0KSaTiaysLNatWwdgE+XY2FhKSkocMl9atWpFcXGx23GBROa5MpuYA6TllrgcdyyvhMM5xU1llqIFkZ5Xwsj/W8O7G361bfs1/zzvbkgH4NOtp3j88z2A+Xo0mpwdCoBluzNJmbeckgqj7432I0rQaxAaGsqkSZO49tpr0etde5RXXXUVqampDBgwgLvvvpsLL7wQgLZt23LHHXcwYMAArrzySkaMGGF7zS233MLcuXMZPHgwYWFhtY4LJPJLKhw+ICpVUeFtTp0tA2D90TzbtmsWbWL+8oOUVhp57Is9fLLtFAXnKxm7YC3zlx90eZw31qYBkHG21Os2mjTJ8Pmr+e8O/8fXVcilBpqmsXnzZj777LNaxwgheP31113umz9/PvPnz3fafvXVV3P11Ve7HRconG/hno6i+WK99g5mVWfBFZZVAfDD4Vyg9vk36QOvo6zKRH5JJX/+ah+zhvo3vq48dDsOHDhAjx49mDx5Mqmpqf42p1lzLM91eMVKet55NM13PntZpZHi8iqPx1eZNPafLqSsyuQzmxTe4+VVh9l3utDlPmm5F7z6n5uqt7lR6mAJvysP3Y6+ffuSnp5ue753715uvPFGhzFhYWFs2VKzHLyiJhVGE+crjRh0vvEZjlri9QOT2no0vqisCpOUnCmpIKldpE9sUngHKSUL16axcG0aAzq1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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import control\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import scipy.optimize as opt\n",
"\n",
"\n",
"## SAMPLE DATA GENERATION\n",
"\n",
"\n",
"# Define a função de custo\n",
"def func(x, zeta, wn):\n",
" sys = control.tf([wn**2],[1, 2 * zeta * wn, wn**2])\n",
" _, yout, xout = control.forced_response(sys, T, x)\n",
" return yout\n",
"\n",
"\n",
"# Cria os dados para o sinal de entrada\n",
"Ts = 2e-5\n",
"pulse_time = 250e-3\n",
"pulse_cycles = 2\n",
"T = np.arange(pulse_time * pulse_cycles / Ts) * Ts\n",
"kmax = T.size\n",
"x_min_value = 0\n",
"x_max_value = 1.5\n",
"xdata = np.array([\n",
" *[\n",
" *np.ones(int(np.ceil(kmax / (2 * pulse_cycles)))) * x_min_value,\n",
" *np.ones(int(np.ceil(kmax / (2 * pulse_cycles)))) * x_max_value\n",
" ] * pulse_cycles\n",
"])\n",
"xdata = xdata[0:kmax]\n",
"\n",
"# Adiciona ruído branco no sinal de entrada\n",
"np.random.seed(1729)\n",
"x_noise_percentage = 0.1\n",
"x_noise = x_noise_percentage * np.random.normal(size=T.size)\n",
"xdata += x_noise\n",
"\n",
"\n",
"# Cria os dados para o sinal de saída\n",
"zeta = 0.7\n",
"wn = 100\n",
"ydata = func(xdata, zeta, wn)\n",
"\n",
"#Adiciona ruído branco no sinal de saída\n",
"np.random.seed(1237)\n",
"y_noise_percentage = 0.1\n",
"y_noise = y_noise_percentage * np.random.normal(size=T.size)\n",
"ydata += y_noise\n",
"\n",
"plt.plot(T, ydata, label='y_data')\n",
"# plt.plot(T, xdata, label='x_data')\n",
"\n",
"\n",
"## CURVE FITTING\n",
"\n",
"# Define limites das constantes\n",
"zeta_min = 0\n",
"zeta_max = 1\n",
"wn_min = 0\n",
"wn_max = 1e6\n",
"bounds = ([zeta_min, wn_min], \n",
" [zeta_max, wn_max])\n",
"\n",
"popt, pcov = opt.curve_fit(func, xdata, ydata, bounds=bounds)\n",
"# popt, pcov = opt.curve_fit(func, xdata, ydata)\n",
"print(popt)\n",
"\n",
"ydata_fit = func(xdata, *popt)\n",
"\n",
"\n",
"plt.plot(T, ydata_fit,\n",
" label='fit: zeta=%5.3f, wn=%5.3f' % tuple(popt))\n",
"\n",
"\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"hide_input": false,
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment