{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Ten Coefficient FIR Filter to Notch Out 100Hz to 200Hz\n",
    "The sample rate is $1 kHz$.  The number of filter points was to be ten.  Find the FIR filter coefficients."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "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"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "T = 1/1000\n",
    "X = [1,0,0,1,1,1,1,1,0,0] # as worked out in class....\n",
    "x = np.fft.ifft(X)\n",
    "plt.plot(np.real(x), '.')\n",
    "plt.plot(np.imag(x), '.')\n",
    "plt.legend(['Real', 'Imaginary'])\n",
    "plt.title('FIR Filter Coefficients');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that this in not dying off in time.  This is because this is a noncausal filter.  The response before $t=0$ corresponds to the last half of the coefficients, so you need to time shift the filter response by $NT/2$ to make it a causal filter.  This can be done with the np.fft.fftshift function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEICAYAAABcVE8dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAafElEQVR4nO3df3xV9Z3n8dc7CYiKVQx01gJDwKLWggIGjPUXa7XSrUU6tghDW9sRtT/Q7tbZrjqz1TrrTEfbmWrLbrVW61hGatmZllpcrT+wtjVCUmiVHxXMEIm2GmPA2oIk5LN/3BsaYhJI7g0n5Pt+Ph48cu853/v9fs4hed9zvuf+UERgZmaDX0nWBZiZ2YHhwDczS4QD38wsEQ58M7NEOPDNzBLhwDczS4QD3w4qkh6UdEn+9ick/SzrmvpK0umSNkl6Q9IcSX8m6aeSfi/pq5Kuk3TnfvTzTUn/80DUbAc3B771maQtknbkA6v93zskVUgKSWX5dt+RtCu//jVJP5F0Qg/93iCppVO/XwCIiPdHxD3dPC4kvbPI2yhJV0l6VtIfJDVI+r6kyUXo/kbgGxExPCJ+AFwOvAq8LSKujoi/j4iF++okIj4VEX9XaDGSZkpqKLQfG7gc+FaoD+YDq/3fS920uzkihgOjgReBb++j3+916vfmolbdSfuTUxduBT4HXAUcDRwH/AD4QBGGHQes63R/ffjdkNZPHPh2QEXEDuB+YEpfHi9ppaS3HPVK+mn+5q/yZwQX55dfIGmtpG2SfiHppA6P2SLpf0j6NfCHzqEvaSLwWWB+RDwWEW9GxB8jYklEfDnf5khJ/yKpUVK9pL+VVNKhj7+StEFSs6SHJI3LL38emAD8KF/vfcAlwBfy98/Nn+l8t0NfZ+S3YZukrZI+kV/+HUn/q0O7fW3zX0v6taTtkr4naZikw4EHgXd0OlubIalG0uuSXpb0T335f7OBwYFvB1Q+WOYDm4vZb0Sclb95cv6M4HuSpgF3AVcA5cDtwHJJh3R46HxyR+tHRURrp27fCzRExKoehv46cCS58D4b+DjwSQBJc4DrgL8ARgFPAvfl6z0WeIE/nSHNB5aQPxOKiEc6DiLpz8kF8tfzfU0B1nYuZj+3eS4wCxgPnAR8IiL+ALwfeKnT2dqtwK0R8TbgWHJP1naQcuBboX6QP5LcJukHPbT7a0nbgN8DZwAf20e/czv0u03SO/pQ22XA7RHxdETszs/9vwlUdWhzW0RszZ95dFYO/La7ziWVAhcD10bE7yNiC/BV/rRtVwD/EBEb8k8mfw9MaT/K76UFwCMRcV9EtEREU0S8JfDZ/21+KSJeA35Ez2dbLcA7JY2MiDcioroPtdsA4cC3Qs2JiKPy/+b00O4rEXEUUAHsAI7fR7/3d+j3qB6uDfRkHHB1xycOYCzQ8cljaw+PbwKO6WH9SGAoUN9hWT256xTt49/aYezXAHVY3xtjgef3o93+bPPvOtz+IzC8h/4uJXfdYqOk1ZIu6GXdNoA48O2AiogXyF0EvVXSof083Fbgpk5PHIdFxH0dS+rh8Y8CYyRVdrP+VXJHwB2P2P+c3EXp9vGv6DT+oRHxiz5uy7H72W5f29ydt+yLiNiUn256O/CPwLL8tJwdhBz4dsBFxE+Al8i9DLGYXiY3l97uW8CnJJ2af3nl4ZI+IOmI/axzE/C/gfvyL1kcmr/AOU/SNRGxm9yc9k2SjshP1XweaL/Q+k3gWknvhj0XeD/Sx21bApwraa6kMknlkrqaiilkm18GyiUd2b5A0kcljYqINmBbfvHuPm6DZcyBb1m5hdwrUg7ZZ8v9dwNwT34qY25E1JCb0/4G0EzuQvEnetnnVfnHLyYXeM8DHyI39w1wJfAHoA74GfCv5C6aEhH/Tu6oeKmk14FnyV0Y7bX8mdF/Aa4mNzW0Fji5i3Z93uaI2EjuonJdh+sms4B1kt4gdwF3XkTs7Ms2WPbkl/yamaXBR/hmZolw4JuZJcKBb2aWCAe+mVkiuvvAqMyNHDkyKioqsi7DzOygUltb+2pEjOpq3YAN/IqKCmpqarIuw8zsoCKpvrt1ntIxM0uEA9/MLBEOfDOzRAzYOXwzGzxaWlpoaGhg505/KkOxDBs2jDFjxjBkyJD9fowD38z6XUNDA0cccQQVFRVIyrqcg15E0NTURENDA+PHj9/vxxVlSkfSLEm/kbRZ0jXdtJkrab2kdZL+tRjjmtnBYefOnZSXlzvsi0QS5eXlvT5jKvgIP/+tP4uB84AGYLWk5RGxvkObicC1wOkR0Szp7YWOa3Ywq61vprquiaoJ5ZwybkTW5RwQDvvi6sv+LMaUzgxgc0TU5YtYClwIrO/Q5jJgcUQ0A0TEK0UY1+ygVFvfzII7q9nV2sbQshKWLKxKJvQtW8WY0hnN3l8T18Bbv8LtOOA4ST+XVC1pVlcdSbpcUo2kmsbGxiKUZjbwVNc1sau1jbaAltY2quuasi4pCaWlpUyZMoVJkybxwQ9+kG3btu37Qd2oqKjg1VdfLWJ1B0YxAr+r84rOH7JfBkwEZgLzgTslHfWWB0XcERGVEVE5alSX7ww2O+hVTShnaFkJpYIhZSVUTSjPuqQkHHrooaxdu5Znn32Wo48+msWLF2dd0gFXjMBvIPclye3GkPv6us5tfhgRLRHxH8BvyD0BmCXnlHEjWLKwis+/73hP5/Sgtr6ZxY9vpra+ueh9n3baabz44ot77t9yyy1Mnz6dk046ieuvv37P8jlz5nDKKafw7ne/mzvuuKPodRxoxZjDXw1MlDSe3Jc3zwP+slObH5A7sv+OpJHkpnjqijC22UHplHEjHPQ96M/rHLt37+bRRx/l0ksvBeDhhx9m06ZNrFq1iohg9uzZ/PSnP+Wss87irrvu4uijj2bHjh1Mnz6diy66iPLyg/eMrOAj/IhoBRYBDwEbgPsjYp2kGyXNzjd7CGiStB54HPjvEeGJSzPrUn9c59ixYwdTpkyhvLyc1157jfPOOw/IBf7DDz/M1KlTmTZtGhs3bmTTpk0A3HbbbZx88slUVVWxdevWPcsPVkV541VErABWdFr2xQ63A/h8/p+ZWY/ar3O0tLYV7TpH+xz+9u3bueCCC1i8eDFXXXUVEcG1117LFVdcsVf7lStX8sgjj/DUU09x2GGHMXPmzIP+ncL+LB0zG3D68zrHkUceyW233cZXvvIVWlpaOP/887nrrrt44403AHjxxRd55ZVX2L59OyNGjOCwww5j48aNVFdXF62GrPijFcxsQOrP6xxTp07l5JNPZunSpXzsYx9jw4YNnHbaaQAMHz6c7373u8yaNYtvfvObnHTSSRx//PFUVVX1Sy0HknKzLQNPZWVl+AtQzAaHDRs28K53vSvrMgadrvarpNqIqOyqvad0zMwS4cA3M0uEA9/MLBEOfDOzRDjwzcwS4cA3M0uEA9/MkjB8+PB+H+M973lPv49RCAe+mVmR/OIXvyhKP62trUXppzMHvpkNTFtXwZNfzf0sopUrV3L22Wczd+5cjjvuOK655hqWLFnCjBkzmDx5Ms8//zwAP/rRjzj11FOZOnUq5557Li+//DIAjY2NnHfeeUybNo0rrriCcePG7fkylPaziJUrVzJz5kw+/OEPc8IJJ7BgwQLa3+R64403Mn36dCZNmsTll1++Z/nMmTO57rrrOPvss7npppsYP348LS0tALz++utUVFTsud9XDnwzG3i2roJ7ZsNjN+V+Fjn0f/WrX3HrrbfyzDPPcO+99/Lcc8+xatUqFi5cyNe//nUAzjjjDKqrq1mzZg3z5s3j5ptvBuBLX/oS55xzDr/85S/50Ic+xAsvvNDlGGvWrOFrX/sa69evp66ujp///OcALFq0iNWrV/Pss8+yY8cOHnjggT2P2bZtG0888QTXX389M2fO5Mc//jEAS5cu5aKLLmLIkCEFbbcD38wGni1Pwu5dELtzP7c8WdTup0+fzjHHHMMhhxzCsccey/ve9z4AJk+ezJYtWwBoaGjg/PPPZ/Lkydxyyy2sW7cOgJ/97GfMmzcPgFmzZjFiRNef9zNjxgzGjBlDSUkJU6ZM2dPv448/zqmnnsrkyZN57LHH9vQLcPHFF++5vXDhQu6++24A7r77bj75yU8WvN0OfDMbeCrOhNKhoNLcz4ozi9r9IYccsud2SUnJnvslJSV75s+vvPJKFi1axDPPPMPtt9++56OR9/fzxzqOUVpaSmtrKzt37uQzn/kMy5Yt45lnnuGyyy7b6yOXDz/88D23Tz/9dLZs2cITTzzB7t27mTRpUt83uH1bC+7BzKzYxs6AS5bDOX+T+zl2xgEvYfv27YwePRqAe+65Z8/yM844g/vvvx/IfXlKc/P+fwVje7iPHDmSN954g2XLlvXY/uMf/zjz588vytE9OPDNbKAaOwPOvDqTsAe44YYb+MhHPsKZZ57JyJEj9yy//vrrefjhh5k2bRoPPvggxxxzDEccccR+9XnUUUdx2WWXMXnyZObMmcP06dN7bL9gwQKam5uZP39+QdvSzh+PbGb9bjB9PPKbb75JaWkpZWVlPPXUU3z6059m7dq1/TLWsmXL+OEPf8i9997b5frefjyyvwDFzKwXXnjhBebOnUtbWxtDhw7lW9/6Vr+Mc+WVV/Lggw+yYsWKfTfeTw58M7NemDhxImvWrOn3cdpfHlpMnsM3swNioE4fH6z6sj8d+GbW74YNG0ZTU5NDv0gigqamJoYNG9arx3lKx8z63ZgxY2hoaKCxsTHrUgaNYcOGMWbMmF49xoFvZv1uyJAhjB8/PusykucpHTOzRDjwzcwS4cA3M0uEA9/MLBEOfDOzRDjwzcwS4cA3M0uEA9/MLBEOfDOzRDjwzcwS4cA3M0uEA9/MLBEOfDOzRDjwzcwS4cA3M0tEUQJf0ixJv5G0WdI1PbT7sKSQ1OU3qpuZWf8pOPAllQKLgfcDJwLzJZ3YRbsjgKuApwsd08zMeq8YR/gzgM0RURcRu4ClwIVdtPs74GZgZxHGNDOzXipG4I8Gtna435BftoekqcDYiHigp44kXS6pRlKNv/vSzKy4ihH46mLZnq+ml1QC/DNw9b46iog7IqIyIipHjRpVhNLMzKxdMQK/ARjb4f4Y4KUO948AJgErJW0BqoDlvnBrZnZgFSPwVwMTJY2XNBSYByxvXxkR2yNiZERUREQFUA3MjoiaIoxtZmb7qeDAj4hWYBHwELABuD8i1km6UdLsQvs3M7PiKCtGJxGxAljRadkXu2k7sxhjmplZ7/idtmZmiXDgm5klwoFvZpYIB76ZWSIc+GZmiXDgm5klwoFvZpYIB76ZWSIc+GZmiXDgm5klwoFvZpYIB76ZWSIc+GZmiXDgm5klwoFvZpYIB76ZWSIc+GZmiXDgm5klwoFvZpYIB76ZWSIc+GZmiXDgm5klwoFvZpYIB76ZWSIc+GZmiXDgm5klwoFvZpYIB76ZWSIc+GZmiXDgm5klwoFvZpYIB76ZWSIc+GZmiXDgm5klwoFvZpYIB/4gV1vfzOLHN1Nb35x1KWYDWgp/K2VZF2D9p7a+mQV3VrOrtY2hZSUsWVjFKeNGZF2W2YCTyt+Kj/AHseq6Jna1ttEW0NLaRnVdU9YlmQ1IqfytOPAHsaoJ5QwtK6FUMKSshKoJ5VmXZDYgpfK3oogovBNpFnArUArcGRFf7rT+88BCoBVoBP4qIup76rOysjJqamoKri11tfXNVNc1UTWhfFCeopoVy2D5W5FUGxGVXa4rNPAllQLPAecBDcBqYH5ErO/Q5j8DT0fEHyV9GpgZERf31K8D38ys93oK/GJM6cwANkdEXUTsApYCF3ZsEBGPR8Qf83ergTFFGNfMzHqhGIE/Gtja4X5Dfll3LgUe7GqFpMsl1UiqaWxsLEJpZmbWrhiBry6WdTlPJOmjQCVwS1frI+KOiKiMiMpRo0YVoTQzM2tXjNfhNwBjO9wfA7zUuZGkc4G/Ac6OiDeLMK6ZmfVCMY7wVwMTJY2XNBSYByzv2EDSVOB2YHZEvFKEMc3MrJcKDvyIaAUWAQ8BG4D7I2KdpBslzc43uwUYDnxf0lpJy7vpzszM+klRPlohIlYAKzot+2KH2+cWYxwzM+s7v9PWzCwRDnwzs0Q48M3MEuHANzNLhAPfzCwRDnwzs0Q48M3MEuHANzNLhAPfzCwRDnwzs0Q48M3MEuHANzNLhAPfzCwRDnwzs0Q48M3MEuHANzNLhAO/n9TWN7P48c3U1jdnXcqA4P1h3fHvxt76c38U5RuvbG+19c0suLOaXa1tDC0rYcnCKk4ZNyLrsjLj/WHd8e/G3vp7f/gIvx9U1zWxq7WNtoCW1jaq65qyLilT3h/WHf9u7K2/94cDvx9UTShnaFkJpYIhZSVUTSjPuqRMeX9Yd/y7sbf+3h+KiKJ2WCyVlZVRU1OTdRl9VlvfTHVdE1UTypM+RW3n/WHd8e/G3grdH5JqI6Kyy3UOfDOzwaOnwPeUjplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIooS+JJmSfqNpM2Sruli/SGSvpdf/7SkimKMa2Zm+6/gwJdUCiwG3g+cCMyXdGKnZpcCzRHxTuCfgX8sdNyebFz9CE/dcx0bVz/Sn8P0bOsqePKruZ9Zch2uY6DXMRBqSKSOsiL0MQPYHBF1AJKWAhcC6zu0uRC4IX97GfANSYp++ELdjasfYdwD83knrbTUfYuN3McJ088t9jA927oK7pkNu3dB6VC4ZDmMnXFga3AdruNgqGMg1JBQHcWY0hkNbO1wvyG/rMs2EdEKbAfKO3ck6XJJNZJqGhsb+1RM8/rHGEIrZWpjCK00r3+sT/0UZMuTuf+w2J37ueXJA1+D63AdB0MdA6GGhOooRuCri2Wdj9z3pw0RcUdEVEZE5ahRo/pUzIgTz6GFMlqjhBbKGHHiOX3qpyAVZ+aenVWa+1lx5oGvwXW4joOhjoFQQ0J1qNBZFUmnATdExPn5+9cCRMQ/dGjzUL7NU5LKgN8Bo3qa0qmsrIyampo+1bRx9SM0r3+MESeec+Cnc9ptXZV7dq44M5tTQ9fhOg6WOgZCDYOoDkm1EVHZ5boiBH4Z8BzwXuBFYDXwlxGxrkObzwKTI+JTkuYBfxERc3vqt5DANzNLVU+BX/BF24holbQIeAgoBe6KiHWSbgRqImI58G3gXkmbgdeAeYWOa2ZmvVOMV+kQESuAFZ2WfbHD7Z3AR4oxlpmZ9Y3faWtmlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJcOCbmSXCgW9mlggHvplZIhz4ZmaJKCjwJR0t6SeSNuV/juiizRRJT0laJ+nXki4uZEwzM+ubQo/wrwEejYiJwKP5+539Efh4RLwbmAV8TdJRBY5rZma9VGjgXwjck799DzCnc4OIeC4iNuVvvwS8AowqcFwzM+ulQgP/zyLitwD5n2/vqbGkGcBQ4Plu1l8uqUZSTWNjY4GlmZlZR2X7aiDpEeA/dbHqb3ozkKRjgHuBSyKiras2EXEHcAdAZWVl9KZ/MzPr2T4DPyLO7W6dpJclHRMRv80H+ivdtHsb8GPgbyOius/VmplZnxU6pbMcuCR/+xLgh50bSBoK/DvwLxHx/QLHMzOzPio08L8MnCdpE3Be/j6SKiXdmW8zFzgL+ISktfl/Uwoc16xPauubWfz4Zmrrm7MuZUDw/kiLIgbmVHllZWXU1NRkXYYNIrX1zSy4s5pdrW0MLSthycIqThn3lreOJMP7Y3CSVBsRlV2t8zttLRnVdU3sam2jLaCltY3quqasS8qU90d6HPiWjKoJ5QwtK6FUMKSshKoJ5VmXlCnvj/R4SseSUlvfTHVdE1UTyj19gffHYNTTlM4+X5ZpNpicMm6Eg60D74+0eErHzCwRDnwzs0Q48M3MEuHANzNLhAPfzCwRDnwzs0QM2NfhS2oE6gvoYiTwapHKOdh5X+zN+2Nv3h9/Mhj2xbiI6PJLpgZs4BdKUk13bz5IjffF3rw/9ub98SeDfV94SsfMLBEOfDOzRAzmwL8j6wIGEO+LvXl/7M37408G9b4YtHP4Zma2t8F8hG9mZh048M3MEjHoAl/SLEm/kbRZ0jVZ15MlSWMlPS5pg6R1kj6XdU1Zk1QqaY2kB7KuJWuSjpK0TNLG/O/IaVnXlCVJ/y3/d/KspPskDcu6pmIbVIEvqRRYDLwfOBGYL+nEbKvKVCtwdUS8C6gCPpv4/gD4HLAh6yIGiFuB/xcRJwAnk/B+kTQauAqojIhJQCkwL9uqim9QBT4wA9gcEXURsQtYClyYcU2ZiYjfRsQv87d/T+4PenS2VWVH0hjgA8CdWdeSNUlvA84Cvg0QEbsiYlu2VWWuDDhUUhlwGPBSxvUU3WAL/NHA1g73G0g44DqSVAFMBZ7OtpJMfQ34AtCWdSEDwASgEbg7P8V1p6TDsy4qKxHxIvAV4AXgt8D2iHg426qKb7AFvrpYlvzrTiUNB/4v8F8j4vWs68mCpAuAVyKiNutaBogyYBrwfyJiKvAHINlrXpJGkJsNGA+8Azhc0kezrar4BlvgNwBjO9wfwyA8LesNSUPIhf2SiPi3rOvJ0OnAbElbyE31nSPpu9mWlKkGoCEi2s/4lpF7AkjVucB/RERjRLQA/wa8J+Oaim6wBf5qYKKk8ZKGkrvosjzjmjIjSeTmaDdExD9lXU+WIuLaiBgTERXkfi8ei4hBdwS3vyLid8BWScfnF70XWJ9hSVl7AaiSdFj+7+a9DMKL2GVZF1BMEdEqaRHwELmr7HdFxLqMy8rS6cDHgGckrc0vuy4iVmRYkw0cVwJL8gdHdcAnM64nMxHxtKRlwC/JvbptDYPwYxb80QpmZokYbFM6ZmbWDQe+mVkiHPhmZolw4JuZJcKBb2aWCAe+mVkiHPhmZon4/18a7/E0UefaAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_delay = np.fft.fftshift(x)\n",
    "plt.plot(np.real(x_delay), '.')\n",
    "plt.plot(np.imag(x_delay), '.')\n",
    "plt.legend(['Real', 'Imaginary'])\n",
    "plt.title('FIR Filter Coefficients');\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It would be nice to see what the frequency response would look like if you didn't do this time shift, vs if you did.  To do that we zero fill after the FIR coefficients so we get a better look in the frequency domain of what the real frequency response is."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_zf = np.concatenate((x, np.zeros(100)),0)\n",
    "x_delay_zf = np.concatenate((x_delay, np.zeros(100)),0)\n",
    "X_zf = np.fft.fft(x_zf)\n",
    "X_delay_zf = np.fft.fft(x_delay_zf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we need to flip the negative frequencies back where they belong for plots in frequency."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "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"
    }
   ],
   "source": [
    "X_flip_zf = np.fft.fftshift(X_zf)\n",
    "X_flip_delay_zf = np.fft.fftshift(X_delay_zf)\n",
    "N = X_flip_zf.size\n",
    "n = np.arange(-N/2, N/2)\n",
    "f = n/N/T\n",
    "plt.ylim(-10, 0)\n",
    "plt.grid()\n",
    "plt.plot(f, 20*np.log10(np.abs(X_flip_zf)))\n",
    "plt.ylabel('dB')\n",
    "plt.title('Frequency Response of Undelayed Impulse Response');\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "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"
    }
   ],
   "source": [
    "plt.ylim(-10, 0)\n",
    "plt.plot(f, 20*np.log10(np.abs(X_flip_delay_zf)))\n",
    "plt.ylabel('dB')\n",
    "plt.grid()\n",
    "plt.title('Frequency Response of Delayed Impulse Response');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice the improved frequency response in the delayed signal."
   ]
  },
  {
   "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
}
