Created
April 17, 2021 05:10
-
-
Save tiagox/33be58fe4ce13d49a9a4fc05ba2185cb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "Procesamiento de Señales - Practica 3 - Convolución.ipynb", | |
"provenance": [], | |
"collapsed_sections": [] | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "IbsxCneeFg4w" | |
}, | |
"source": [ | |
"# Convolución" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "9APx_KjBFx0Z" | |
}, | |
"source": [ | |
"import numpy as np\n", | |
"from matplotlib import pyplot\n", | |
"import time" | |
], | |
"execution_count": 36, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "jicAWOxwFlKY" | |
}, | |
"source": [ | |
"def convolucion(x, h):\n", | |
" x_l = len(x) \n", | |
" h_l = len(h)\n", | |
" h_inv = h[::-1]\n", | |
" y = []\n", | |
"\n", | |
" for n in range(0, x_l + h_l - 1):\n", | |
" y_n = 0\n", | |
"\n", | |
" '''\n", | |
" Por cada n donde las señales se solapen, tomo solo el intervalo en el \n", | |
" cual se superponen y calculo \n", | |
" '''\n", | |
" for N in range(max(0, n-x_l+1), min(n+1, h_l)):\n", | |
" y_n += x[n-N] * h_inv[-N-1]\n", | |
"\n", | |
" y.append(y_n)\n", | |
"\n", | |
" return y" | |
], | |
"execution_count": 37, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 316 | |
}, | |
"id": "jx3Cp-wzGDBA", | |
"outputId": "392d60c5-2069-4b6a-ef6e-ea84a8c9d529" | |
}, | |
"source": [ | |
"x = [1, 2]\n", | |
"h = [2, 1, 1, 1]\n", | |
"\n", | |
"print('convolucion(x, h)\\t', convolucion(x, h))\n", | |
"print('convolucion(h, x)\\t', convolucion(h, x))\n", | |
"print('np.convolve(x, h)\\t', list(np.convolve(x, h)))\n", | |
"\n", | |
"y = convolucion(x, h)\n", | |
"x = list(range(0, len(y)))\n", | |
"\n", | |
"pyplot.stem(x, y, use_line_collection = True)\n", | |
"pyplot.show()" | |
], | |
"execution_count": 38, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"convolucion(x, h)\t [2, 5, 3, 3, 2]\n", | |
"convolucion(h, x)\t [2, 5, 3, 3, 2]\n", | |
"np.convolve(x, h)\t [2, 5, 3, 3, 2]\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [], | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "0TCgjL7hKNCs" | |
}, | |
"source": [ | |
"## Performance" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "8NbqS54HKJZU", | |
"outputId": "6dc111f0-9839-49d0-f8fb-33e6424e972d" | |
}, | |
"source": [ | |
"x = [1] * 10000\n", | |
"h = [1] * 10000\n", | |
"\n", | |
"start = time.perf_counter()\n", | |
"y = convolucion(x, h)\n", | |
"end = time.perf_counter() - start\n", | |
"print('convolucion(x, h)\\tTime:', end)" | |
], | |
"execution_count": 39, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"convolucion(x, h)\tTime: 20.790104681999765\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "C5jRVex7KH8l", | |
"outputId": "c7e5938f-70d6-47a0-c133-5799f393256e" | |
}, | |
"source": [ | |
"x = [1] * 10000\n", | |
"h = [1] * 10000\n", | |
"\n", | |
"start = time.perf_counter()\n", | |
"y = np.convolve(x, h)\n", | |
"end = time.perf_counter() - start\n", | |
"print('np.convolve(x, h)\\tTime:', end)" | |
], | |
"execution_count": 40, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"np.convolve(x, h)\tTime: 0.10284412100008922\n" | |
], | |
"name": "stdout" | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment