{ "cells": [ { "cell_type": "markdown", "source": "# 2D Fourier transform", "metadata": { "pycharm": { "metadata": false, "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 10, "outputs": [], "source": "import numpy as np\nimport matplotlib.pyplot as plt\n\nfrom deconvoluted import fourier_transform\n", "metadata": { "pycharm": { "metadata": false, "name": "#%%\n", "is_executing": false } } }, { "cell_type": "markdown", "source": "Suppose we want to compute the 2D fourier transform $F(p, q)$ of a \nfunction $f(x, y)$. Let us generate some data which has a frequency of $0.2$ Hz \nin the $x$ direction, and $0.1$ Hz in the $y$ direction:", "metadata": { "pycharm": { "metadata": false, "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true, "pycharm": { "is_executing": false } }, "outputs": [ { "data": { "text/plain": "\u003cFigure size 432x288 with 1 Axes\u003e", "image/png": "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\u003d\u003d\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": "x \u003d np.linspace(-20, 20, 41)\ny \u003d np.linspace(-10, 10, 21)\nX, Y \u003d np.meshgrid(x, y)\nf_xy \u003d np.sin(0.2 * 2 * np.pi * X + 0.1 * 2 * np.pi * Y)\n\nplt.imshow(f_xy, extent\u003d(x.min(), x.max(), y.min(), y.max()))\nplt.show()\n" }, { "cell_type": "markdown", "source": "Taking the transform is now simply a matter of calling `fourier_transform`: ", "metadata": { "pycharm": { "metadata": false, "name": "#%% md\n" } } }, { "cell_type": "code", "execution_count": 12, "outputs": [], "source": "F_pq, p, q \u003d fourier_transform(f_xy, x, y)", "metadata": { "pycharm": { "metadata": false, "name": "#%%\n", "is_executing": false } } }, { "cell_type": "code", "execution_count": 13, "outputs": [ { "data": { "text/plain": "\u003cFigure size 432x288 with 1 Axes\u003e", "image/png": "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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": "plt.imshow(F_pq.real, extent\u003d(p.min(), p.max(), q.min(), q.max()))\nplt.show()", "metadata": { "pycharm": { "metadata": false, "name": "#%%\n", "is_executing": false } } }, { "cell_type": "markdown", "source": "We see two resonances, exactly where we would expect them!", "metadata": { "pycharm": { "metadata": false, "name": "#%% md\n" } } } ], "metadata": { "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" }, "kernelspec": { "name": "python3", "language": "python", "display_name": "Python 3" }, "stem_cell": { "cell_type": "raw", "source": "", "metadata": { "pycharm": { "metadata": false } } } }, "nbformat": 4, "nbformat_minor": 0 }