{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ZADANIE 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a) Wykonaj poniższy skrypt i przeanalizuj go:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nGunshPvug+HD4etf9zuNiIiIiK9UfItIfrn2Whg6FO69F6JRv9MUttpa7+rz8+ZBebnfaURERER8\npeJbRPLLkCFw001QX+999Jj4o6vLewGkqgquu87vNCIiIiK+U/EtIvln1iw49li45x6IxfxOU5ie\new7eew9uvBGOOcbvNCIiIiK+U/EtIvmnshJmz4ZNm2DZMr/TFJ7ubu+Fj4oKr/gWERERERXfIpKn\n5syBSAQWLADn/E5TWH7+c3j7bbj+eqiu9juNiIiISCCo+BaR/DRsGMycCRs3wi9+4XeawuGc94JH\nWZn38WIiIiIiAmSo+DazIjN7xMzeM7PNZnZDkvWGmtn6XrdNZtZlZtXx5avMbEuv5TdlIp+IFKh5\n87wi8M47vVOhZfAtXw7r1sE118Bxx/mdRkRERCQwMnXkeypwGvApYBIw38xO77uSc26Xc25czw14\nAvilc66512o39VrnexnKJyKF6JOf9E59fuMNeP55v9Pkv+5u+Na3vI8V++Y3/U4jIiIiEiiZKr4v\nB550zsXihfRzwFdT+L0ZwFMZyiAicrhbbvE+fuz223Xl88G2dCm8+SbccAOMGOF3GhEREZFAyVTx\nfQJQ3+vnuvh9SZnZ54Eq4IU+i+41szfN7DkzOylD+USkUA0f7l1x++23YckSv9Pkr64uuOMO7wrn\n//zPfqcRERERCZyUim8ze83MmpLcRvfzb88Aap1zXb3u+5pz7s+AzwD/n8ML896Z5ppZQ8/twIED\n/YwhInnv5pu9z/2+806vSJTMe/ZZ+NOf4KabvIvdiYiIiMghUiq+nXNnOeeGJbltA7YCY3r9Sk38\nvoTMrAK4DFjc5+9si391zrlHgZPMbGiSTA8550b13CoqKlLZFBEpRNXV3sXXNm+G2lq/0+SfaNR7\nYaOyUlc4FxEREUkiU6edLwWuNrNQ/Mrll+O97zuZy4ENzrl3eu4ws2IzO67XzxcDHznndmUoo4gU\nsjlzvCL8rrugo8PvNPnl6adhyxaYP98rwEVERETkMJkqvv8deAd4F1gDPOScexPAzC4ws0V91k90\nobVS4MX4+703ANcDF2Qon4gUumOP9S6+tnUrLFzod5r80doKd9/tnWp+441+pxEREREJrOJMNOKc\niwGzkixbDizvc9/nE6zXAkzIRB4RkYRuuAEeecQrFqdN01HaTHjoIdi+HR5+2LvYmoiIiIgklKkj\n3yIiwReJwIIFsGsX3HOP32ly34cfwr33wtixMHOm32lEREREAk3Ft4gUlqlTYfx4+Nd/9d6nLP13\nx+b0My0AABSFSURBVB3Q0gL33QfhsN9pRERERAJNxbeIFJaiInjgAVxnJ2vu+h5L125jTV0zzjm/\nk+UE5xxr6ppZuvx11vzyVdzZZ8NXvuJ3LBEREZHAy8h7vkVEcknD+M8xbc6/sy1UQfj5jUQxRldH\nqJ0+iVFVEb/jBVbD7lamLV7NtuZWwp0dRC/7NqMry6jd06Z+ExERETkKHfkWkYLinGPa4tXUl1UR\nLQ7TGoNozFG/q5UrFq/WEfAkPu63Xa1EY47WUAnR4jD1rd3qNxEREZEUqPgWkYKytn43Dc1txPrU\nirFux9bmVtbW7/YnWMB93G/dh3ac+k1EREQkNSq+RaSg1DW1UByyhMvCoSLqmlqynCg3qN9ERERE\nBkbFt4gUlJphQ4jGuhMui8a6qRk2JMuJckPNsCFEu9RvIiIiIv2l4ltECsqEMVWMro4QKjr0KG4o\n1sUJQ0JMGFPlU7JgmzCmitHtewjFug65P1RknFAdUb+JiIiIHIWKbxEpKGZG7fRJjBkaIRwyIiUh\nwkVQs+cDalc8TOITq8VWrKD2qTmM6TpwsN9CRs3QCLUzPouZek5ERETkSPRRYyJScEZVRVgx9wus\nrd9NXVMLNcOGMOGBX2IrX4LaWrjiCr8jBktHB8yaxajoAVb801+wlmMP9tuYKhXeIiIiIilQ8S0i\nBcnMmFhTzcSaau+Ob38bli6F+fPhvPNg6FB/AwbJ/ffDpk1wzz1YTQ0T4WC/iYiIiEhKdNq5iAhA\nZSU89BA0NsKNN/qdJjj+8Ae4+2449VSYN8/vNCIiIiI5S8W3iEiPyZPh/PPh2Wfh+ef9TuO/aBSu\nvBJiMXjmGSgp8TuRiIiISM5S8S0i0sMMFi6EqiqYOROamvxO5K/vfhd+/3u45RaYNMnvNCIiIiI5\nTcW3iEhvxx8PjzwCO3fC7Nl+p/HPxo3e6eannw533OF3GhEREZGcp+JbRKSvyZPhwgthyRJYtszv\nNNnXc7p5d7d3unlpqd+JRERERHKeim8Rkb7M4PHHoboarrsOduzwO1F23X03vPEGfOMbMGGC32lE\nRERE8oKKbxGRREaMgCee8K5+PnkydHX5nSg7Xn4ZFiyA8ePhW9/yO42IiIhI3lDxLSKSzMUXw6xZ\n8JvfwF13+Z1m8O3YAVOmwDHHeJ95rtPNRURERDJGxbeIyJE8+CCceaZ3NPi//9vvNIOnq8s7wt/Y\nCE89BSef7HciERERkbyi4ltE5EhKS+EnP/GOBk+dmr/v/77rLu8I/w03wCWX+J1GREREJO+o+BYR\nOZqTT/aOBjc2wuWXQ2en34ky66WXvCP7Z54JDzzgdxoRERGRvKTiW0QkFZdcAnPmwG9/C1dfDc75\nnSgzNmzwXlCorPSO8Ot93iIiIiKDotjvACIiOeP+++Hdd6G2FsaOhdtu8zvRwOzYAeedBx0d8OKL\nep+3iIiIyCDSkW8RkVQVF8OSJTBunPcxXD/+sd+J+q+lBc4/HxoaYPFiOPtsvxOJiIiI5DUV3yIi\n6aiogBdegJEj4corvdPQc00s5l3ZfN06uPNO70JyIiIiIjKoVHyLiKRr5EivAA+HvdO2V6/GOcea\numaWrt3GmrpmXIDeE35ItveacFddBcuXe0X37bf7HU9ERESkIOg93yIi/TFunFfAnnceDf/wVaZd\n9wO2tXUTDhURjXUzujpC7fRJjKqK+BqzYXcr0xavZltzq5eto5PRpZ+n9qIYo556Csx8zSciIiJS\nKHTkW0Skv774RdyLLzLt3Fuo39dBNOZo7YwRjTnqd7VyxeLVvh4Bd84xbfFq6ne1HsxmIeqrR3LF\nWV/HhcO+ZRMREREpNCq+RUQGYO2JZ9AwdCSxokNPJIp1O7Y2t7K2frdPyWBt/W4amtuIdR/6AkDM\niti6u83XbCIiIiKFRsW3iMgA1DW1UBwOJVwWDhVR19SS5UQH1TW1UJzkWd7vbCIiIiKFRsW3iMgA\n1AwbQjTWnXBZNNZNzbAhWU50UM2eD4i2dyZc5nc2ERERkUKj4ltEZAAmjKlidHWEUNGhFy4Lxbo4\noWUXE471KdhPf8qEr/w1o/d+SIhDTzsPFRknVEeYMKbKp3AiIiIihUfFt4jIAJgZtdMnMWZohHDI\niJSECIeMGtdK7eJ52Omnw7JlkK0LrzU2wpQpcOml2DHHUHvZaYz5RMWh2YZGqJ3xWUxXOhcRERHJ\nGn3UmIjIAI2qirBi7hdYW7+buqYWaoYNYcIJldifd8JNN8Ell8CFF8Kjj3qfET4YnIMf/cj7e7t2\nwfnnw+OPM2rkSFb8jTs025gqFd4iIiIiWZaR4tvMzgXuBv4P8Lhzbs4R1h0L/BswDNgLXOmce+to\ny0REgszMmFhTzcSa6oN3XnEF/N3fwZw5sGQJrFwJc+fCrFkwbFjStpxLo1h2DlasgAULYNUqGD4c\nfvITr+CP/07CbCI+82ufn9b88kmmMwa9vVzIWGjt5ULGoLeXCxkLrb0gsEx8Bq2ZfQooBy4FKo5S\nfK8Eap1zz5jZJcAtzrmJR1t2NKNGjXINDQ0D3hYRkUHxwgtw442wZQuUl8P06V4hftJJh6zWsLuV\naYtXs625lXCoiGism9HVEWqnT2JUVeTgil1dsHQp3HcfrF8PRUVw1VXez9UqsoPCzLY750b5nSOI\n+rPPH+i+vmd+1Te1EHMQMhgzbMjh86s/Hh4P+3bAdb+DoScPOGND2wZKRtbSuX0ao8rP6HfGnvaq\n/rieW197mgVnXcXuU8cNuD33YRsX7C9h+TGd2IjyAfVhT5uxbZv48ocv8csRf09o9KcGnHFYUzsL\nXIRbrZWmYWUDbq+z+QO+UPwuv+kaS0n18QNuL+Le4LrPPMHjG6+h1cYPuL0trou2M6op39DMiVac\nkTHJ1FzpaW9k8//ww+IHmdk1j+3Vnx1we0GdJ73bzNRc0TwZ2Dzp7XOvvc2HHVF+PenPODFSOqC2\nIL19fUbe8+2c2+Sc2wB0HSXYcGAC8KP4XcuA0WZ2ypGWZSKjiIivzjsPNm3yjoCfdhr84Adwyikw\ncSLceiu88gqus9P7Z2dXK9GYo7UzRjTmqN/VyhWLV+MaGuDpp+Ef/xFGjIDJk702Z8+GzZth0SIV\n3pIT/NjnO+eYvOh1tjR6xQRAzMGWxhamLHqdfh+MiLZD+z5oaYSudvj1Au/naHu/Mk5dvIr6vTsI\nH/dTsE7Cx/2U+r07+NriVWlndM5xzWOr2L9tB7N//xxlsU5m//459m/bwbWP9a+96U+8TlNjK186\nECYMfOlAmKbGVmY80b8+9Np8hcaPdnLOzpUUuy7O2bmSxo92MuOJV/qV8dpFq2lpbGW+K6MMmO/K\naGlsZeai1f1q78pFr7Jz1x4+F3qfYrr5XOh9du7aw1WLXu1Xe19/ZhV792/na6f+B6WhTr526n+w\nd/92rn6mf2My+ZnVbNnfTttplRAy2k6rZMv+dqY8k/72ftxmBueKc46Zi1bSvmsb3wktJEIH3wkt\npH3XNq5btLJf7QV5nvS0mcm5onkysHnSoz3Wzf6uGE3RLtqd47tbPmB/V4z2JJ9aMxgycuT748bM\n7gQqkx35NrP/CzzrnPt0r/tWA9/AO+Us4TLn3Mqj/W0d+RaRnOEc/PrXsHAhvPwy7N4NwJoTz2DK\nxXfSGQof9ivhWJRnf3wrE7e/7d1x5plw0UUwcyYMHZrN9JIGHflO7Ej/Dxxpnz+Qff2aumYu/eFr\nANzx+mKOb9l1aNtV5ZSXhNJveOc7SRYYDP90kmWJtXXG2NFal3T5JyM1aWVs64xRtLWORCdpOqD7\nhPTba2tK/qJC+bCytPuwrTNG60fbky6PHDcy7Yzh3R1Jl0erStNu78Ce5qTLKyqr026vu/N9kg1K\nUclJabe3LRpNunx0ONyvMWnY3ZZ0ebpzpa0zRvmed5MvrxybdntBnic9bWZyrmie9NKPedJjU8vB\nMdk+7Dhuu34+ACFg+1+PS7u9Huns61N6z7eZvQaMTbJ4vHNuW6rhMsXM5gJze90VM7MPM9R8BXAg\nQ20VEvVb+tRn/ZOX/WYN70SKfjij8uM3ax/Cuc92tOxx0ArAunXe7bbb0vkTedlvg2ygffaJTAUp\nRJnc11u4NFJUOqQSzK4+bKlz3R0te1y0ozXddsNFFFeWWWVJiI/PXeyI0bG33e2Jdm8+4hmBCTOW\nlVZacZtxyEcEGq6r3HW3b0mWMeHj1MKlkbLi0sqKaJsV9WqvG+NAuNy1v5+0vaT5SkoqKsv6vOvS\nAe041/mHA2n3oYVLI+GSssqy7o7D2ywqddE/bko7Y1lpReWxmFmv/9wdjn04196RXkYLl0bCpZHK\nEouZ9epDh9HpQi7a0Zr2mJSWl1YOCbeaWa/2nNESjbiOtvq081l5RSUlocP3G50x59r6NyY9c+Xw\npenPFQuXRspLSyorreWQPuzG2OuGuLaOhrTbC/I86Wkzk3NF8yTeXj/nycdCxcVWcUylhcOl8Cas\n+n+4aLTDHdi/x2JdaT1f95Hyvj7bR76HA5uBaudcl3mPxw+AvwT2JVvmnNucsZApMLMGHalIn/ot\nfeqz/lG/9Y/6LX3qs8FxpP8HsrXPz6ex1bYET75sB+TPtuTLdkD+bEu+bEc6svo53865ncA6YGr8\nrouBBufc5iMty2ZGERERGVza54uISCHKSPFtZn9jZg14p4bNMLMGM7sgvuwCM1vUa/VrgWvNbBPe\ne72vSnGZiIiI5A/t80VEpKBk5HO+nXMrgISnDDjnlgPLe/38J+CsJOsmXZZlD/kdIEep39KnPusf\n9Vv/qN/Spz4bJAHY5+fT2GpbgidftgPyZ1vyZTsgf7YlX7YjZRl9z7eIiIiIiIiIHC6r7/kWERER\nERERKUQqvkVEREREREQGWcEW32Y21sx+Z2abzGyNmZ2eZL0ZZvaumb1nZk+aWTjbWYMklX4zsxoz\nW2Vme81svR85gyTFPvuima02s7fN7C0zu8/MCnZ+Qsr9dpaZrY/f3jKzhWZWmqi9QpHqc1t8XTOz\nlWa2J5sZgybFx9o5ZtbW6/G23szK/cgrqcuXfb2ZlZnZz+PbscHMXjazUxKsV2NmsT6P05P9yHwk\nZlZnZn/qlfHyJOsFdlzMbGifft5kZl1mVt1nvUCOiZk9HB8HZ2bjet2fzj7E9/FJtB2pzpf4uoEZ\nnyOMSUrzJb5uUMckpfkSXzcwYzIonHMFeQNWAlfGv78EWJNgnROBHcAIwPAuHDfL7+w50G/VeJ/d\nfi6w3u/Mft9S7LPxwEnx78uA3/b8TqHeUuy3CBCOf18EPA/c5Hf2oPdbr3XnAk8Ce/zOHfQ+A87R\n81nu3fJlXx/fL/w9B6/VcwOwKsF6Nbkwn4E6YNxR1gn8uPTJezPwi1wZE+BsvIslHzIWqe5DgjI+\nibYj1fkStPE5wpgcdb4EfUwSrJNwvgRtTAbjVpBH1sxsODAB+FH8rmXA6ASvil0CLHfOfei8R8MP\nga9mL2mwpNpvzrlm59xvgZYsRwycNPrsDefc+/Hv24H1eE8+BSmNfmt1zkXjP5YA5UDBXkUyjec2\n4kczLgTuzV7C4EmnzyS35NO+3jnX7px7KZ4P4HXyfx8R+HHpYwbwlN8hUuWce8U519D7vjSfDwMx\nPom2I1fnS6JtSVNgxySBnJovmVSQxTcwGvjAOdcFEH+AbgVO6LPeCUB9r5/rEqxTSFLtNzko7T4z\nsxF4T6AvZCVhMKXcb/HTkzYATcBe4LFsBg2YlPotfhrak3ifsxzLdsiASWeOnmxm6+KnYl6fzZDS\nL/m8r/8n4D+TLBsSf4yuM7PbzSyUzWBpqDWzN83sKTP7RILlOTMuZvZ5oIrk++1cGZN0ng9zZnw4\n8nyB3Bifo80XyJExSWG+QG6MSb8UavEtEkhmdizwC+A+59xav/PkAudcnXPuDLzTrEqBi3yOlAvu\nAH7mnPuj30FyyDpglHPuTOAfgJlmdpnPmaQAmdm/AKcA30yw+ANgpHNuIvC3wF8B87IYL1VnO+c+\nA5yJ98Lpv/mcZ6BmALU9RWsfuTImeeko8wVyY3wKab5AboxJvxVq8b0NON7MisG76BDeK0Nb+6y3\nFRjT6+eaBOsUklT7TQ5Kuc/M7BjgV8B/OuceymrK4En7seacOwAsAaZkJWEwpdpvXwBmm1kd3vUF\njo1fHCXZq+n5LKU+c87tc87tjX/fAPwY7x8CCa6829eb2c14LzB+2TnX2ne5c67DObcz/n0zsJgA\nPk6dc1vjX6PA90mcMSfGxcwqgMvw+vowuTImcensewM/PkebL5Ab45PifIHcGJMjzhfIjTEZiIIs\nvuMDug6YGr/rYqDBObe5z6rLgAvMbET8CWgm3j/3BSmNfpO4VPss/mT0K+BXzrlvZzdl8KTRb6f0\nXMnTzErwjkhuzGbWIEm135xzf+WcG+Ocq8G7OOI+51yNc64xq4EDII3H2vEW/wSC+Atl5wFvZDOr\npCff9vVmNhfv/Ztfcs4l/IQCMxve6zmx50ygQD1OzWyImVX2uuurJM6YE+MCXA5scM69k2hhLoxJ\njzT/zwv0+KQyX+LrBXp80pgvEPAxiTvifIHgj8mAuQxctS0Xb8CngdeATcBa4M/j9y8CLui13tXA\ne/HbU8SvrFyot1T6De8K1A1AI9AZ//47fmcPeJ/dCkTxLrTWc7vV7+w50G/XAH8ANgBvAQ8DZX5n\nD3q/9Vm/hjy+qmim+gzvarlv9Xqs3Un8Srq6BfeWL/t6vCsHu3i+nn3E/8SX3Q3MjH9/UZ/nxEeA\nUr/z99mWk/D+kd4IvIn3XtyaXByXeMbfAVf1uS/wYwIsjP9/1gV8BGyO359wzgR1fBJtx5HmS5DH\nJ8m2JJ0vuTQmvZYdNl+CPCaDceu5BL+IiIiIiIiIDJKCPO1cREREREREJJtUfIuIiIiIiIgMMhXf\nIiIiIiIiIoNMxbeIiIiIiIjIIFPxLSIiIiIiIjLIVHyLiIiIiIiIDDIV3yIiIiIiIiKDTMW3iIiI\niIiIyCBT8S0iIiIiIiIyyP4XKiYRBTl4eVsAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from __future__ import division\n", "from pylab import *\n", "from numpy import *\n", "from scipy import *\n", "from ipywidgets import *\n", "import math as mt\n", "\n", "%matplotlib inline\n", "\n", "A = 1\n", "# Amplituda sygnału\n", "\n", "LP = 1 \n", "# Liczba analizowanych pełnych przebiegów sygnału (okresów)\n", "w = 40 \n", "# czśstotliwość probkowania [Hz] sygnału \n", "#(jak często w ciągu sekundy pobieramy informacje o wartości sygnału)\n", "\n", "f = 2.0 \n", "# Czestotliwosc sygnalu [Hz]\n", "\n", "T = 1.0/f \n", "# Okres sygnalu [s] (jak długo trwa jeden przebieg sinusa)\n", "\n", "TW = 1.0/w \n", "# Okres probkowania [s] (co ile sekund pobieramy próbkę)\n", "\n", "t = np.arange(0, LP*T, TW)\n", "# generujemy momenty, w których pobieramy próbki\n", "\n", "n = len(t)\n", " \n", "FUNC = lambda t : A*sin(2*pi*t*f) \n", "# def. funkcji (tutaj sinus)\n", "\n", "signal = FUNC(t) \n", "# funkcja sprobkowana\n", "\n", "fig = plt.figure(figsize=(15, 6), dpi=80) \n", "ax = fig.add_subplot(121)\n", "## --- POMOCNICZY SYGNAL\n", "base_t = np.arange(0, LP*T, 1.0/200.0)\n", "base_signal = FUNC(base_t)\n", "ax.plot(base_t, base_signal, linestyle='-', color='red')\n", "ax.set_ylim([min(base_signal), max(base_signal)])\n", "## --- \n", "ax.plot(t, signal, 'o')\n", "\n", "signal1 = fft(signal)\n", "# sygnal w dziedzinie czestotliwosci \n", "signal1 = abs(signal1) \n", "# modul sygnalu\n", "\n", "freqs = range(int(n))\n", "\n", "\n", "ax = fig.add_subplot(122)\n", "ymax = max(signal1)\n", "if (ymax > 3.0):\n", " ax.set_ylim([0.0,ymax])\n", "else:\n", " ax.set_ylim([0.0,3.0])\n", "stem(freqs, signal1, '-*')\n", "\n", "show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "UWAGA: do dalszych ćwiczeń warto powyższy skrypt przekształcić na funkcję o wielu argumentach, typu: amplituda, częstotliwość próbkowania, liczba przebiegów. Oczywiście dla wygody, należy nadać wartości domyślne argumentom funkcji." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Zdefiniuj funckję\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "UWAGA DLA CHĘTNYCH: można wykorzystać 'interact', dzięki któremu można zmieniac parametry danej funkcji i na bieżąco obserwować zmiany. Poniższy kod przedstawia sposób wykorzystania interact:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from ipykernel.pylab.backend_inline import flush_figures\n", "\n", "def prosta(a=2, b=0):\n", " x = linspace(-5, 5, 100, endpoint=False) # punkty na osi OX [s]\n", " f = lambda x : a*x + b\n", " y = f(x) \n", " \n", " fig = plt.figure(figsize=(6, 3), dpi=80)\n", " ax = fig.add_subplot(111)\n", " ax.set_xlim(-5, 5)\n", " ax.set_ylim(-5, 5)\n", " ax.plot(x, y)\n", " flush_figures()\n", " \n", "interact(prosta, a=(-5,5,0.5), b=(-5,5,0.5))\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) Zmień częstotliwość próbkowania na 50Hz." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# w=50" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c) Punkty na osi OX spektrum są teraz kolejnymi liczbami naturalnymi, a nie częstotliwościami w Hz. Popraw skrypt (funkcje), tak aby oś OX spektrum była w Hz (podpowiedź: oś OX rozpoczyna się od 0Hz, a kończy się na (prawie!) Hz, gdzie jest częstotliwością próbkowania). Następnie: Upewnij się, że spektrum dla 1Hz-owego sinusa i pięciu (LP=5) analizowanych przebiegów wygląda teraz prawidłowo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# popraw oś OX" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d) Podpisz osie obu wykresów, używając funkcji xlabel() i ylabel(). Pamiętaj o jednostkach." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Podpisz osie wykresów" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "f) Porównaj spektrum funkcji $sin(2*pi*f*t)$, $2*sin(2*pi*f*t)$ i $3*sin(2*pi*f*t)$. Jak zmienia się wartość na osi OY na wykresie spektrum?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=1, A=1, LP=1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=1, A=2, LP=1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "# f=1, A=3, LP=1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "g) Ile punktów jest na wykresach przy częstotliwości próbkowania 50Hz, T=1s? Zwiększ dwukrotnie liczbę próbek poprzez zwiększenie częstotliwości próbkowania. Następnie: dla $sin(2*pi*f*t)$ porównaj wartość na osi OY spektrum uzyskane w tym oraz poprzednim punkcie." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=1, w=50, LP=1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=1, w=100, LP=1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "h) Na podstawie wyników uzyskanych w dwóch poprzednich punktach przeskaluj oś OY spektrum tak, aby wskazywała wartości amplitud badanych sygnałów. Sprawdź wyniki dla kilku wybranych funkcji." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# popraw oś OY" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Zadanie 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a) Wygeneruj spektrum dla funkcji sinus o częstotliwościach 5Hz i 21Hz, dla czestotliwości próbkowania 20Hz i 20 (LP=20) analizowanych przebiegów. Czy rozpoznajesz te funkcje patrząc na ich spróbkowane wykresy? Odczytaj w drugim przypadku uzyskaną częstotliwość z FFT. Dlaczego uzyskano taki wynik?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=5, w=20, LP=20" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=21, w=20, LP=20" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Zwróć uwagę, że spektrum jest symetryczne (poza pierwszym elementem)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) Przy w=100Hz, przeanalizuj widma sygnałów:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "i) $sin(2*pi*t*f)$, $f=10Hz$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=10, w=100, A=1, LP=10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ii) $sin(2*pi*t*f)$, $f=20Hz$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=20, w=100, A=1, LP=10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "iii) $sin(2*pi*t*f)$, $f=30Hz$ (tutaj słupki nie będą wyglądać idealnie; dlaczego?)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=30, w=100, A=1, LP=10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "iv) $sin(2*pi*t*f)$, $f=40Hz$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=40, w=100, A=1, LP=10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c) Przy F=50Hz, w=100Hz, wygeneruj spektrum dla $sin(2*pi*f*t)$. Zwróć uwagę na skalę wykresów." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# f=50, w=100, A=1, LP=10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c) Jak się nazywa twierdzenie, którego konsekwencją jest takie zachowanie się spektrum?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Zadanie 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Poniższe przypadki skłądają się z złożonych sygnałów. Trzeba teraz będzie zmodyfikować trochę FUNC" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a) $sin(2*pi*t*f) + 2*sin(4*pi*t*f)$, T=1s, w=20Hz." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Wyrysuj sygnał" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "c) Wygenerujemy trochę szumu. Wychodząc z funkcji sin(2*pi*t*f), dodamy do niej 100 losowych sinusów. Wygenerujemy dla nich losowo amplitudy (z [0.02, 0.08], częstotliwosci: [5.0, 10.0] oraz modyfikacje fazy[0 + 2*pi]. Inne parametry: w=20Hz, T=1s. Czy dla powyższych paramerów losowania, jesteś w stanie odnaleźć bazowy przebieg (sin(2*pi*t))? Czy jesteś w stanie zlokalizować szum?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d) $0.5 + 2*sin(2*pi*t*f)$, T=1s, w=20Hz. Czy amplituda zerowego prążka jest prawidłowa? Dlaczego? (Podpowiedź: zwróć jeszcze raz uwagę na “symetrię” spektrum)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Wyrysuj sygnał\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "e) $sin(2*pi*t*f)$ oraz $sin(2*pi*t*f + pi/4)$ dla T=1s, w=20Hz. Czy informacja o fazie zniknęła? Poszukaj śladów tej informacji w tablicy, będącej wynikiem operacji fft(signal). (funkcja angle(sygnal, deg=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# faza = 0\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# faza = pi/4\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Zadanie 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Oblicz wynik ifft(fft(x)), gdzie x=random.random(10). Czy jakaś informacja została stracona?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# wygeneruj wektor x\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# oblicz fft z x\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# oblicz ifft" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#porownaj x z ifft(fft(x)), wystarczy print" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "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.8" } }, "nbformat": 4, "nbformat_minor": 2 }