Skip to content

Instantly share code, notes, and snippets.

@pseudo-usama
Last active December 15, 2021 10:27
Show Gist options
  • Save pseudo-usama/fe7448973c34078e55cc3824c695c12d to your computer and use it in GitHub Desktop.
Save pseudo-usama/fe7448973c34078e55cc3824c695c12d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "d5408208-732c-4b22-832c-d3ab36aacefd",
"metadata": {},
"source": [
"<h1>This visualization is inspired by video from 3Blue1Brown youtube channel</h1>\n",
"<h2>\n",
" <a href=\"https://www.youtube.com/watch?v=spUNpyF58BY\">But what is the Fourier Transform? A visual introduction</a>\n",
"</h2>\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"id": "2ed8e5cc-96de-4ea6-b2e3-b5a4535d9691",
"metadata": {},
"source": [
"# Imports"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "1ae8d6ed-ae34-4654-b5cf-8a9bbf31fab1",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"import matplotlib\n",
"\n",
"from ipywidgets import interact, interactive, fixed, interact_manual, IntSlider, FloatSlider, Layout\n",
"import ipywidgets as widgets"
]
},
{
"cell_type": "markdown",
"id": "986ba997-7a6e-48fa-aabd-20b605bdb37d",
"metadata": {},
"source": [
"# Some constants"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "8d91c5b9-ab37-4998-a13d-f59c38ba2524",
"metadata": {},
"outputs": [],
"source": [
"f_min, f_max = 0.0, 20\n",
"f_step = 0.05\n",
"\n",
"f_range = np.arange(f_min, f_max, f_step)"
]
},
{
"cell_type": "markdown",
"id": "6105ddde-932b-4a10-bc0d-000063071b78",
"metadata": {},
"source": [
"# Functions"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "c3f018e2-b106-45c1-bec5-3047f110ca46",
"metadata": {},
"outputs": [],
"source": [
"rotating_arrow = lambda f, t: np.exp(-2*np.pi*1j*f*t)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "668d3e9d-913c-485c-ac0c-e9602a75889d",
"metadata": {},
"outputs": [],
"source": [
"original_fn = lambda t: np.sin(18.8495559*t)+1\n",
"# original_fn = lambda t: np.sin(t)+np.cos(2*t)-np.sin(t/3)+3"
]
},
{
"cell_type": "markdown",
"id": "54197d3f-3532-4b27-84d7-ea946116d91b",
"metadata": {},
"source": [
"# Calculations"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "e4255885-ea35-41b1-a2e6-7aeab7a9d163",
"metadata": {},
"outputs": [],
"source": [
"t = np.arange(0, 4.5, 0.001)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "74318eaa-d93e-4216-bee0-5ca1362bc64c",
"metadata": {},
"outputs": [],
"source": [
"# I'm doing these calculation before hand so that the visualization will run smooth.\n",
"\n",
"# Calculating g\n",
"g = np.array(\n",
" [original_fn(t)*rotating_arrow(t, f)\n",
" for f in f_range]\n",
")\n",
"\n",
"# Calculating center_of_mass\n",
"center_of_mass = np.mean(g, axis=1)"
]
},
{
"cell_type": "markdown",
"id": "34b7ce44-9be6-4ee1-bbf0-38990ba9e489",
"metadata": {},
"source": [
"# Visualization"
]
},
{
"cell_type": "markdown",
"id": "486178fa-b8a4-4352-9e68-d2a6732e565a",
"metadata": {},
"source": [
"## Winding graph"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ed351439-cc97-40a9-ab24-d62b318ffaef",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "ed718c43f5e04af9bcac08ae0425ae20",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"interactive(children=(FloatSlider(value=2.9, description='f', layout=Layout(width='800px'), max=19.95, step=0.…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"@interact(f=widgets.FloatSlider(min=f_min, max=f_max-f_step, step=f_step, value=2.9, layout=Layout(width='800px')))\n",
"def callback(f):\n",
" fig, ax = plt.subplots(1, 1)\n",
" fig.set_size_inches(14, 14)\n",
"\n",
" ax.set_xlim(-2.3, 2.3)\n",
" ax.set_ylim(-2.3, 2.3)\n",
"\n",
" # Moving axis in center\n",
" ax.spines['left'].set_position('zero')\n",
" ax.spines['bottom'].set_position('zero')\n",
" ax.spines['right'].set_color('none')\n",
" ax.spines['top'].set_color('none')\n",
" \n",
" # Axis tick labels\n",
" ax.get_xaxis().set_ticklabels([])\n",
" ax.get_yaxis().set_ticklabels([])\n",
"\n",
" ith_f = int(f*(1/f_step))\n",
"\n",
" # Winding graph & center of mass\n",
" ax.plot(g[ith_f].real, g[ith_f].imag)\n",
" ax.scatter(center_of_mass[ith_f].real, center_of_mass[ith_f].imag, c='r', s=100)"
]
},
{
"cell_type": "markdown",
"id": "5298e4d5-ac8a-47b3-8b5d-2f04073a316c",
"metadata": {},
"source": [
"## Center of mass"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "9ac54b2b-2e7e-4865-a96c-f7c54c3a8ac2",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1296x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def com_graph():\n",
" fig, ax = plt.subplots(1, 1)\n",
" fig.set_size_inches(18, 8)\n",
"\n",
" ax.plot(f_range, center_of_mass.real)\n",
" # ax.plot(f_range, center_of_mass.imag)\n",
" ax.legend(['Real', 'Imaginary'])\n",
"\n",
" # Moving axis in center\n",
" ax.spines['left'].set_position('zero')\n",
" ax.spines['bottom'].set_position('zero')\n",
" ax.spines['right'].set_color('none')\n",
" ax.spines['top'].set_color('none')\n",
"\n",
" # Axis tick labels\n",
" ax.get_xaxis().set_ticklabels([])\n",
" ax.get_yaxis().set_ticklabels([])\n",
"com_graph()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment