{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using the Fourier Series and the DFT\n",
    "\n",
    "This is a homework. Do the calculations by hand or using your calculator, but not a computer program.  I suggest you include it in your notebook, but you don't have to.  I just need to be able to look it over to make sure you figured it out okay.  Dr. Roth says you have a light homework load with only the notebooks.  This is due Friday. \n",
    "1. Find the complex Fourier series for a triangle wave with peak value $A = 10$ and frequency $1/T_0$ that starts ascending from zero at $t=-T_0/8$ and peaks at $3T_0/8$, then goes back down to zero at $7T_0/8$, and then begins a new period.  See the picture below. ![Triangle Wave](Triangle_Wave.png)  \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we find the Fourier series coefficients, $$c_n = 1/T_0 \\int_{T_0} x(t) e^{-j2\\pi nt/T_0} dt$$  We use the python sympy package for symbolic mathematics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\frac{\\begin{cases} - \\frac{A T_{0} e^{- \\frac{7 i \\pi n}{4}}}{2 \\pi^{2} n^{2}} - \\frac{\\left(4 i \\pi^{2} A T_{0} n^{2} - 4 \\pi A T_{0} n\\right) e^{- \\frac{3 i \\pi n}{4}}}{8 \\pi^{3} n^{3}} & \\text{for}\\: n > -\\infty \\wedge n < \\infty \\wedge n \\neq 0 \\\\\\frac{A T_{0}}{4} & \\text{otherwise} \\end{cases} + \\begin{cases} - \\frac{A T_{0} e^{\\frac{i \\pi n}{4}}}{2 \\pi^{2} n^{2}} + \\frac{\\left(4 i \\pi^{2} A T_{0} n^{2} + 4 \\pi A T_{0} n\\right) e^{- \\frac{3 i \\pi n}{4}}}{8 \\pi^{3} n^{3}} & \\text{for}\\: n > -\\infty \\wedge n < \\infty \\wedge n \\neq 0 \\\\\\frac{A T_{0}}{4} & \\text{otherwise} \\end{cases}}{T_{0}}$"
      ],
      "text/plain": [
       "⎛⎧        -7⋅ⅈ⋅π⋅n                                   -3⋅ⅈ⋅π⋅n                 \n",
       "⎜⎪        ─────────                                  ─────────                \n",
       "⎜⎪            4       ⎛     2       2             ⎞      4                    \n",
       "⎜⎪  A⋅T₀⋅ℯ            ⎝4⋅ⅈ⋅π ⋅A⋅T₀⋅n  - 4⋅π⋅A⋅T₀⋅n⎠⋅ℯ                         \n",
       "⎜⎪- ─────────────── - ────────────────────────────────────────  for n > -∞ ∧ n\n",
       "⎜⎨         2  2                          3  3                                 \n",
       "⎜⎪      2⋅π ⋅n                        8⋅π ⋅n                                  \n",
       "⎜⎪                                                                            \n",
       "⎜⎪                            A⋅T₀                                            \n",
       "⎜⎪                            ────                                      otherw\n",
       "⎝⎩                             4                                              \n",
       "──────────────────────────────────────────────────────────────────────────────\n",
       "                                                                              \n",
       "\n",
       "            ⎞   ⎛⎧        ⅈ⋅π⋅n                                  -3⋅ⅈ⋅π⋅n     \n",
       "            ⎟   ⎜⎪        ─────                                  ─────────    \n",
       "            ⎟   ⎜⎪          4     ⎛     2       2             ⎞      4        \n",
       "            ⎟   ⎜⎪  A⋅T₀⋅ℯ        ⎝4⋅ⅈ⋅π ⋅A⋅T₀⋅n  + 4⋅π⋅A⋅T₀⋅n⎠⋅ℯ             \n",
       " < ∞ ∧ n ≠ 0⎟   ⎜⎪- ─────────── + ────────────────────────────────────────  fo\n",
       "            ⎟ + ⎜⎨       2  2                        3  3                     \n",
       "            ⎟   ⎜⎪    2⋅π ⋅n                      8⋅π ⋅n                      \n",
       "            ⎟   ⎜⎪                                                            \n",
       "            ⎟   ⎜⎪                          A⋅T₀                              \n",
       "ise         ⎟   ⎜⎪                          ────                              \n",
       "            ⎠   ⎝⎩                           4                                \n",
       "──────────────────────────────────────────────────────────────────────────────\n",
       "            T₀                                                                \n",
       "\n",
       "                        ⎞\n",
       "                        ⎟\n",
       "                        ⎟\n",
       "                        ⎟\n",
       "r n > -∞ ∧ n < ∞ ∧ n ≠ 0⎟\n",
       "                        ⎟\n",
       "                        ⎟\n",
       "                        ⎟\n",
       "                        ⎟\n",
       "      otherwise         ⎟\n",
       "                        ⎠\n",
       "─────────────────────────\n",
       "                         "
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sympy as sp\n",
    "sp.init_printing()\n",
    "t,n,T_0, A = sp.symbols(('t', 'n', 'T_0','A'))\n",
    "c_n  = 1/T_0*(sp.integrate(A*(t+T_0/8)/(T_0/2)*sp.exp(-sp.I*2*sp.pi*n*t/T_0),\\\n",
    "                           (t,-T_0/8,3*T_0/8)) + \\\n",
    "           sp.integrate(-A*(t-7*T_0/8)/(T_0/2)*sp.exp(-sp.I*2*sp.pi*n*t/T_0),\\\n",
    "                        (t,3*T_0/8,7*T_0/8)))\n",
    "c_n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.00000000000000\n",
      "-1.43289792062689 - 1.43289792062689*I\n",
      "0.e-125 + 0.e-126*I\n",
      "0.159210880069655 - 0.159210880069655*I\n",
      "-0.e-127 + 0.e-125*I\n"
     ]
    }
   ],
   "source": [
    "c_0 = c_n.subs({n:0, T_0:1, A:10})\n",
    "c_1 = c_n.subs({n:1, T_0:1, A:10})\n",
    "c_2 = c_n.subs({n:2, T_0:1, A:10})\n",
    "c_3 = c_n.subs({n:3, T_0:1, A:10})\n",
    "c_4 = c_n.subs({n:4, T_0:1, A:10})\n",
    "print(c_0.evalf())\n",
    "print(c_1.evalf())\n",
    "print(c_2.evalf())\n",
    "print(c_3.evalf())\n",
    "print(c_4.evalf())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Fourier series is then:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\sum_{n=-\\infty}^{\\infty} \\begin{cases} \\frac{\\left(- \\frac{A T_{0} e^{\\frac{i \\pi n}{4}}}{2 \\pi^{2} n^{2}} - \\frac{A T_{0} e^{- \\frac{7 i \\pi n}{4}}}{2 \\pi^{2} n^{2}} - \\frac{\\left(4 i \\pi^{2} A T_{0} n^{2} - 4 \\pi A T_{0} n\\right) e^{- \\frac{3 i \\pi n}{4}}}{8 \\pi^{3} n^{3}} + \\frac{\\left(4 i \\pi^{2} A T_{0} n^{2} + 4 \\pi A T_{0} n\\right) e^{- \\frac{3 i \\pi n}{4}}}{8 \\pi^{3} n^{3}}\\right) e^{\\frac{2 i \\pi n t}{T_{0}}}}{T_{0}} & \\text{for}\\: n > -\\infty \\wedge n < \\infty \\wedge n \\neq 0 \\\\\\frac{A e^{\\frac{2 i \\pi n t}{T_{0}}}}{2} & \\text{otherwise} \\end{cases}$"
      ],
      "text/plain": [
       "     ∞                                                                        \n",
       "___________                                                                   \n",
       "╲                                                                             \n",
       " ╲          ⎧⎛        ⅈ⋅π⋅n         -7⋅ⅈ⋅π⋅n                                  \n",
       "  ╲         ⎪⎜        ─────         ─────────                                 \n",
       "   ╲        ⎪⎜          4               4       ⎛     2       2             ⎞ \n",
       "    ╲       ⎪⎜  A⋅T₀⋅ℯ        A⋅T₀⋅ℯ            ⎝4⋅ⅈ⋅π ⋅A⋅T₀⋅n  - 4⋅π⋅A⋅T₀⋅n⎠⋅\n",
       "     ╲      ⎪⎜- ─────────── - ─────────────── - ──────────────────────────────\n",
       "      ╲     ⎪⎜       2  2            2  2                          3  3       \n",
       "       ╲    ⎪⎝    2⋅π ⋅n          2⋅π ⋅n                        8⋅π ⋅n        \n",
       "        ╲   ⎪─────────────────────────────────────────────────────────────────\n",
       "         ╲  ⎨                                                                T\n",
       "         ╱  ⎪                                                                 \n",
       "        ╱   ⎪                                                              2⋅ⅈ\n",
       "       ╱    ⎪                                                              ───\n",
       "      ╱     ⎪                                                                 \n",
       "     ╱      ⎪                                                           A⋅ℯ   \n",
       "    ╱       ⎪                                                           ──────\n",
       "   ╱        ⎪                                                                2\n",
       "  ╱         ⎩                                                                 \n",
       " ╱                                                                            \n",
       "╱                                                                             \n",
       "‾‾‾‾‾‾‾‾‾‾‾                                                                   \n",
       "   n = -∞                                                                     \n",
       "\n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       " -3⋅ⅈ⋅π⋅n                                   -3⋅ⅈ⋅π⋅n ⎞                        \n",
       " ─────────                                  ─────────⎟  2⋅ⅈ⋅π⋅n⋅t             \n",
       "     4       ⎛     2       2             ⎞      4    ⎟  ─────────             \n",
       "ℯ            ⎝4⋅ⅈ⋅π ⋅A⋅T₀⋅n  + 4⋅π⋅A⋅T₀⋅n⎠⋅ℯ         ⎟      T₀                \n",
       "────────── + ────────────────────────────────────────⎟⋅ℯ                      \n",
       "                                3  3                 ⎟                        \n",
       "                             8⋅π ⋅n                  ⎠                        \n",
       "─────────────────────────────────────────────────────────────────  for n > -∞ \n",
       "₀                                                                             \n",
       "                                                                              \n",
       "⋅π⋅n⋅t                                                                        \n",
       "──────                                                                        \n",
       " T₀                                                                           \n",
       "                                                                              \n",
       "──────                                                                     oth\n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "\n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "∧ n < ∞ ∧ n ≠ 0\n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "erwise         \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               \n",
       "               "
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = sp.Sum(c_n*sp.exp(sp.I*2*sp.pi*n*t/T_0),(n, -sp.oo, sp.oo))\n",
    "x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. Convert this to a Fourier series using only sine and cosines (real coefficients, not complex ones).  How do the $c_n$ compare to the coefficients, $a_n$ and $b_n$ in the ordinary Fourier series?\n",
    "\n",
    "First note that $c_n = c_{-n}^*$ if $x(t) \\in \\mathscr R$.  Then break the Fourier series into the sums for $n < 0$, for $n = 0$, and for $n > 0$.   $$x(t) = x(t+T_0) = \\sum_{n=-\\infty}^{\\infty}c_n e^{j2\\pi nt/T_0} = c_0 + \\sum_{n=-\\infty}^{-1} c_n e^{j2\\pi nt/T_0} + \\sum_{n=1}^{\\infty} c_n e^{j2\\pi nt/T_0}$$  Then make the substitution $m = -n$ in the sum for negatave $n$.  Note: $c_{-m} = c_m^*$ because $x(t)$ is real. $$x(t) = x(t+T_0) = c_0 + \\sum_{m=1}^{\\infty}c_m^* e^{-j2\\pi mt/T_0} + \\sum_{n=1}^{\\infty}c_n e^{j2\\pi nt/T_0}$$ Then substitute $m = n$ in the sum over $m$, and combine the two sums.  Note that m is just a dummy index.  $$x(t) = c_0 + \\sum_{n=1}^{\\infty} \\left[c_n e^{j2\\pi nt/T_0} + c_n^* e^{-j2\\pi nt/T_0}\\right]$$  Now define $a_n \\equiv 2 \\mathscr {Re}[c_n]$ and $b_n \\equiv -2\\mathscr {Im} [c_n]$ so $c_n =  1/2(a_n - jb_n)$ into the Fourier series and use Euler's identity for the complex exponential.\n",
    "\n",
    "$$x(t) = a_0/2 + \\sum_{n=1}^{\\infty} \\left[1/2(a_n - jb_n)(cos(2\\pi nt/T_0) + j sin(2\\pi nt/T_0) + 1/2(a_n + jb_n)(cos(2\\pi nt/T_0) - j sin(2\\pi nt/T_0)\\right]$$ $$=  a_0/2 + \\sum_{n=1}^{\\infty} [a_n cos(2\\pi nt/T_0) +b_n sin(2\\pi nt/T_0)]$$  From this we can see the $c_0$, the DC component is the same as $a_0/2$ and $a_n = \\mathscr {Re}(2c_n)$ is the amplitude of the cosine components of the signal $x(t)$.  The coefficients of the sine components of $x(t)$ are $b_n = -\\mathscr {Im}(2c_n)$.  Note that this shows that the real part of $c_n$ corresponds to the even part of the function $x(t)$ and the imagaginary part of $c_n$ corresponds to the odd part of $x(t)$, because cosines are even functions and sines are odd functions.\n",
    "\n",
    "3. Sample the triangle wave starting at zero.  Make your samples $T$ seconds apart.  Take samples over exactly one period of the wave, and use $N = 8$ samples.  Write the vector of those numbers.  Call it $x(kT)$ where $k \\in \\{0, 1, 2, 3, 4, 5, 6, 7\\}$.\n",
    "4. Find the DFT of the sequence in the previous problem, and call it $X(n)$ where $n \\in \\{0, 1, 2, 3, 4, 5, 6, 7\\}$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4 5 6 7]\n",
      "[0.    0.125 0.25  0.375 0.5   0.625 0.75  0.875]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(5+0j)\n",
      "(-1.5088834764831844-1.5088834764831844j)\n",
      "0j\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "A = 10\n",
    "N = 8\n",
    "T_0 = 1\n",
    "T = T_0/N\n",
    "k = np.arange(0,N)\n",
    "print(k)\n",
    "t = k*T\n",
    "print(t)\n",
    "x = np.piecewise(t,[(t<3*T_0/8) & (t>=0), (t>=3*T_0/8) & (t<7*T_0/8), t>= (7*T_0/8)],\\\n",
    "                 [lambda t: 2*A/T_0*(t+T_0/8), lambda t: -2*A/T_0*(t-7/8*T_0),\\\n",
    "                 lambda t: 2*A/T_0*(t-7*T_0/8)])\n",
    "plt.plot(t,x,\"*\")\n",
    "plt.title('$x(t)$')\n",
    "plt.xlabel('$t$ (s)')\n",
    "plt.show()\n",
    "X = 1/N*np.fft.fft(x)  # Notice this is 1/N * what we were asked.\n",
    "print(X[0])\n",
    "print(X[1])\n",
    "print(X[2])\n",
    "f = np.arange(-1/2/T, 1/2/T,1/T_0) # np.fft.fftfreq(N,T)\n",
    "plt.plot(k, np.real(X), '.', k, np.imag(X), '.')\n",
    "plt.show()\n",
    "\n",
    "X = np.fft.fftshift(X)\n",
    "\n",
    "plt.plot(f,np.real(X),'o',f,np.imag(X),'*')\n",
    "plt.title('$X(f)$')\n",
    "plt.legend(['Real', 'Imaginary'])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "5. Approximate the formula for the complex Fourier series coefficients, $c_n$ with the DFT.  (You did this in class a while back).  Compare the numerical results You got above with this approximation?\n",
    "6. When you compared the $c_n$ to the $a_n$ and $b_n$ you should have noted that negative $n$ terms paired with positive $n$ terms to make the sinusoidal waves you learned about in high school.  In previous work, you showed that if $x(t) \\in \\mathscr R$ then $c_{-n} = c_n^*$, and $X(-n) = X(n)^*$.  You also learned that $X(n+N) = X(n)$.  Use that to figure out from the $X(n)$ what an approximation for $c_{-1}$ is. What valid negative frequency components can you find using the DFT approximation, and what values of $n$ goes with them?\n",
    "7.  What is the highest frequency component you can resolve using the eight samples you took in $T_0$ seconds using the DFT?  What would this be in general in terms of $T$?\n",
    "8. The triangle wave has higher frequency components than you could resolve in the problem above.  What if the wave we sampled only contained those frequency components that we could resolve above?  To figure out how this would work, sample $sin(2\\pi t/T_0)$ using eight samples over one period as you did above.  Take the DFT of that, and compare it to the complex Fourier series coefficients for this wave.  What do you notice?\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.5*I\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "import sympy as sp\n",
    "sp.init_printing()\n",
    "t,n,T_0, A = sp.symbols(('t', 'n', 'T_0','A'))\n",
    "c_n  = 1/T_0*(sp.integrate(sp.sin(2*sp.pi*t/T_0)*sp.exp(-sp.I*2*sp.pi*n*t/T_0),\\\n",
    "                           (t, 0, T_0)))\n",
    "c_n\n",
    "c_1 = c_n.subs({n:1, T_0:1})\n",
    "c_2 = c_n.subs({n:2, T_0:1})\n",
    "print(c_1.evalf())\n",
    "print(c_2.evalf())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(-5.456039645643629e-17-0.5j)\n",
      "(1.5308084989341915e-17-1.3877787807814457e-17j)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "A = 10\n",
    "N = 8\n",
    "T_0 = 1\n",
    "T = T_0/N\n",
    "t = np.arange(0,T_0,T)\n",
    "x = np.sin(2*np.pi*t/T_0)\n",
    "plt.plot(t,x,\"*\")\n",
    "plt.title('$x(t)$')\n",
    "plt.xlabel('$t$ (s)')\n",
    "plt.show()\n",
    "X = 1/N*np.fft.fft(x)\n",
    "print(X[1])\n",
    "print(X[2])\n",
    "X = np.fft.fftshift(X)\n",
    "f = np.arange(0, 1/T,1/T_0) # np.fft.fftfreq(N,T)\n",
    "plt.plot(f,np.real(X),'o',f,np.imag(X),'*')\n",
    "plt.title('$X(f)$')\n",
    "plt.legend(['Real', 'Imaginary'])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that this is exact to within machine precision!  This isn't a proof, but it appears the inaccuracies on the triangle wave are caused by aliasing, not the rectangular integration."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "9. Find the output voltage due to the input of the triange wave above in the circuit below.  First do this analytically, in terms of R and C, then with the DFT, and use $T_0 = 1$ second and use the values for R and C. ![Low Pass Filter](Low_Pass.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "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.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
