Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tiagox/33be58fe4ce13d49a9a4fc05ba2185cb to your computer and use it in GitHub Desktop.
Save tiagox/33be58fe4ce13d49a9a4fc05ba2185cb to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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