Skip to content

Instantly share code, notes, and snippets.

@ingle
Created December 5, 2016 23:24
Show Gist options
  • Save ingle/7c369a5538452bf94a7c5883b9df72f6 to your computer and use it in GitHub Desktop.
Save ingle/7c369a5538452bf94a7c5883b9df72f6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Make a 10 second long segment of a sine wave at 10Hz, 100Hz sampling rate"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"plt.close('all')\n",
"fs = 100.\n",
"f0 = 10.\n",
"T = 10.\n",
"t = np.arange(0, T, 1./fs)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = np.sin(2*np.pi*f0*t)\n",
"X = np.fft.fft(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Choose a \"shift frequency\". For example, here we shift down by 5Hz"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"frequency_shift = int( -len(x)/fs*5. ) # shift by 5Hz"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Wrong method, circular shift operation on the spectrum"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Method 1: roll indices\n",
"Xroll = np.roll(X, frequency_shift)\n",
"xroll = np.fft.ifft(Xroll)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Right method - shift each half of the spectrum in the right direction and maintain symmetry"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Method 2: \"split roll\"\n",
"N = len(x)\n",
"right_half_roll = np.roll( X[ int(np.ceil((N-1)/2.)): ], -frequency_shift )\n",
"left_half_roll = np.roll( X[0:(int(np.floor((N-1)/2.))+1)], frequency_shift )\n",
"Xsplitroll = np.array(X)\n",
"Xsplitroll[ int(np.ceil((N-1)/2.)): ] = np.array(right_half_roll)\n",
"Xsplitroll[0:(int(np.floor((N-1)/2.))+1)] = np.array(left_half_roll)\n",
"\n",
"x_splitroll = np.fft.ifft(Xsplitroll)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Spectrum of the signal from first method\n",
"Note that the red peaks are shifted in the same direction and the spectrum is not symmetrical about 0 frequency any more. This means it's IFFT will be complex valued at not at the intended frequency of 10-5 = 5Hz in this example."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x10ebdf490>]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10ebc8ed0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plots\n",
"plt.figure(1)\n",
"plt.plot( np.abs(X) )\n",
"plt.plot( np.abs(Xroll), 'r' )\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Spectrum using the right method of shifting\n",
"Symmetry is maintained. Spectrum now corresponds to a sine wave at frequency 10-5 = 5Hz."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x10ebc8c10>]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAFkCAYAAAB8RXKEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAHw9JREFUeJzt3X+UZGV95/H3BydgJGFwg8PIihsTg05YY5wWHDaKMZNA\nVGLW9ZyEVk9U1hw16HHnmMi6R44IJxuWnDAEQZc17hpBO4u42YRAGANmSUQEnTFI5MduNigGMmNG\nxx52EAaYZ/+490pNTffcqu5bXd0179c5dXrq3qduPfV0zdOf+t4flVIKkiRJXThs3B2QJEmTw2Ah\nSZI6Y7CQJEmdMVhIkqTOGCwkSVJnDBaSJKkzBgtJktQZg4UkSeqMwUKSJHXGYCFJkjozdLBIclyS\nK5PsTPJwkjuSrO9rc36SB+v1f5HkuX3rn57kk0lmk+xK8gdJjlzsi5EkSeM1VLBIcjRwC/AocDqw\nDngPsKunzTnAO4G3AScDe4AtSQ7v2dSn6sduBF4NnApcseBXIUmSloUM8yVkSS4ETimlvPwgbR4E\nfreUsrm+fxSwA3hTKeXqJOuArwFTpZSv1G1OB64DnlVK2b7gVyNJksZq2F0hvwR8OcnVSXYk2Zbk\nrc3KJM8B1gI3NctKKbuB24BT6kUbgF1NqKjdCBTgJQt4DZIkaZlYNWT7HwPeAfwe8NtUQeDSJI+U\nUq6iChWFqkLRa0e9jvrnt3pXllKeSPKdnjb7SfIjVLtevg48MmSfJUk6lD0V+FFgSynl26N+smGD\nxWHA7aWUc+v7dyQ5kSpsXHWQx4UqcBzMwdqcDnxymI5KkqT9vIHqGMeRGjZY/CNwd9+yu4F/U/97\nO1VAOJb9qxZrgK/0tFnTu4EkTwGezoGVjsbXAa666irWrVs3ZJe1UJs2bWLz5s3j7sYhxTFfeo75\n0nPMl9bdd9/NG9/4Rqj/lo7asMHiFuB5fcueB3wDoJRyX5LtVGd7fBW+f/DmS4DL6/a3AkcneVHP\ncRYbqQLJbfM87yMA69atY/369fM0UddWr17teC8xx3zpOeZLzzEfmyU5lGDYYLEZuCXJ+4CrqQLD\nW4Ff72lzCfD+JH9HlY4uAP4B+BOAUso9SbYAH03yDuBw4EPAjGeESJK0sg0VLEopX07yWuBC4Fzg\nPuDdpZQ/6mlzUZKnUV2X4mjgr4FXllL29mzq9cBlVGeD7AOuAd69mBciSZLGb9iKBaWU64HrW9qc\nB5x3kPXfBd447HNLkqTlze8K0bymp6fH3YVDjmO+9BzzpeeYT7ahrrw5LvV3kWzdunWrB/xIkjSE\nbdu2MTU1BdUVr7eN+vmsWEiSpM4YLCRJUmcMFpIkqTMGC0mS1BmDhSRJ6ozBQpIkdcZgIUmSOmOw\nkCRJnTFYSJKkzhgsJElSZwwWkiSpMwYLSZLUGYOFJEnqjMFCkiR1xmAhSZI6Y7CQJEmdMVhIkqTO\nGCwkSVJnDBaSJKkzBgtJktQZg4UkSeqMwUKSJHXGYCFJkjpjsJAkSZ0xWEiSpM4YLCRJUmcMFpIk\nqTMGC0mS1BmDhSRJ6ozBQpIkdcZgIUmSOmOwkCRJnTFYSJKkzhgsJElSZwwWkiSpMwYLSZLUGYOF\nJEnqjMFCkiR1xmAhSZI6M1SwSPKBJPv6bnf1rD8iyeVJdiZ5KMk1Sdb0beP4JNcl2ZNke5KLkhhw\nJEmaAKsW8Ji/BTYCqe8/3rPuEuCVwOuA3cDlwGeAlwHUAeJ64EFgA3AccCWwF3j/AvoiSZKWkYUE\ni8dLKf/UvzDJUcBZwJmllJvrZW8B7k5ycinlduB04PnAK0opO4E7k5wLXJjkvFLK4/3blSRJK8dC\ndkH8RJIHkvzfJFclOb5ePkUVVG5qGpZS7gXuB06pF20A7qxDRWMLsBo4cQF9kSRJy8iwweKLwJup\nKg9vB54D/FWSI4G1wN5Syu6+x+yo11H/3DHHenraLK177oFPf3okm374Ybj4YihlJJuXJC2Rkc/n\nV1wB3/rWiDa+tIbaFVJK2dJz92+T3A58A/gV4JF5HhZgkF9Fa5tNmzaxevXq/ZZNT08zPT09wObn\n8cIXwt69I3m3XHQRfPCDcPLJ8NKXdr55SdISGel8/sgj8Pa3w7XXwp/92aI2NTMzw8zMzH7LZmdn\nF7XNYS3kGIvvK6XMJvnfwHOBG4HDkxzVV7VYw5NVie3ASX2bObb+2V/JOMDmzZtZv379Yrp8oL17\nu91ej+99r/r5xBMjewpJ0hIY6XzefLDds2fRm5rrw/a2bduYmppa9LYHtajTPJP8EPDjVGd5bKU6\nQ2Rjz/oTgGcDX6gX3Qq8IMkxPZs5DZgF7kKSJK1oQ1UskvwucC3V7o9/DnyQKkz8USlld5KPARcn\n2QU8BFwK3FJK+VK9ic9SBYgrk5wDPBO4ALislPJYFy9IkiSNz7C7Qp4FfAr4EeCfgM8DG0op367X\nbwKeAK4BjgBuAM5uHlxK2ZfkDOAjVFWMPcDHgQ8s/CVIkqTlYtiDNw96lGQp5VHgXfVtvjbfBM4Y\n5nklSdLK4KW0JUlSZwwWkiSpMwYLSZLUGYOFJEnqjMFCkiR1xmAhSdI4TdgXShksJElSZwwWkiSN\nkxULSZKkuRksJEkaJysWkiRJczNYSJI0TlYsJEmS5mawkCRpnKxYSJIkzc1gIUnSOFmxkCRJmpvB\nQpIkdcZgIUnSOLkrRJIkaW4GC0mSxsmKhSRJ0twMFpIkjZMVC0mSpLkZLCRJGicrFpIkSXMzWEiS\nNE5WLCRJkuZmsJAkSZ0xWEiSNE7uCpEkSZqbwUKSpHGyYiFJkjQ3g4UkSeNkxUKSJGluBgtJksbJ\nioUkSdLcDBaSJI2TFQtJkqS5GSwkSRonKxZPSvK+JPuSXNyz7IgklyfZmeShJNckWdP3uOOTXJdk\nT5LtSS5KYsiRJGmFW/Af8yQnAb8O3NG36hLg1cDrgFOB44DP9DzuMOB6YBWwAXgT8Gbg/IX2RZIk\nLQ8LChZJfgi4Cngr8N2e5UcBZwGbSik3l1K+ArwF+JkkJ9fNTgeeD7yhlHJnKWULcC5wdpJVC38p\nkiStQO4KAeBy4NpSyuf6lr+YqhJxU7OglHIvcD9wSr1oA3BnKWVnz+O2AKuBExfYH0mStAwMXSFI\ncibw01Qhot+xwN5Syu6+5TuAtfW/19b3+9c36/p3rUiSNLkmrGIxVLBI8iyqYyh+oZTy2DAPBQYZ\nuckaXUmSDjHDViymgGcAW5OkXvYU4NQk7wR+ETgiyVF9VYs1PFmV2A6c1LfdY+uf/ZWM/WzatInV\nq1fvt2x6eprp6ekhX4YkSctEhxWLmZkZZmZm9ls2Ozvb2fYHMWywuBF4Qd+yjwN3AxcCDwCPARuB\nPwZIcgLwbOALdftbgf+Q5Jie4yxOA2aBuw725Js3b2b9+vVDdlmSpEPDXB+2t23bxtTU1JL1Yahg\nUUrZQ98f/yR7gG+XUu6u738MuDjJLuAh4FLgllLKl+qHfLbexpVJzgGeCVwAXDbk7hVJkla+Q/kY\ni3n0j8gm4AngGuAI4Abg7O83LmVfkjOAj1BVMfZQVT0+0EFfJEnSGC06WJRSfq7v/qPAu+rbfI/5\nJnDGYp9bkqQVb8IqFl5GW5IkdcZgIUmSOmOwkCRpnNwVIkmSNDeDhSRJ42TFQpIkaW4GC0mSxsmK\nhSRJ0twMFpIkjZMVC0mSpLkZLCRJGicrFpIkSXMzWCyBCQujknTIGsl8PmF/JAwWkiSpMwaLxggT\n44SFUUk6ZDmftzNYSJI0ThOWVgwWDSsWkqQWzuftDBaSJI3ThKUVg0XDioUkqYXzeTuDhSRJ4zRh\nacVgIUmSOmOwaLgrRJLUwgtktTNYSJKkzhgsGlYsJEktrFi0M1hIkqTOGCwaViwkSS2cz9sZLCRJ\nGqcJSysGi4YVC0lSC+fzdgYLSZLGacLSisGiYcVCktTC+bydwUKSpHGasLRisGhYsZAktXA+b2ew\nkCRpnCYsrRgsJElSZwwWDXeFSJJaeEnvdgYLSZLUGYNFw4qFJKmFFYt2BgtJktQZg0XDioUkqYXz\neTuDhSRJ4zRhacVg0bBiIUlq4XzebqhgkeTtSe5IMlvfvpDkF3vWH5Hk8iQ7kzyU5Joka/q2cXyS\n65LsSbI9yUVJDDiSpEPThKWVYf+gfxM4B5iqb58D/iTJunr9JcCrgdcBpwLHAZ9pHlwHiOuBVcAG\n4E3Am4HzF/wKumLFQpLUwvm83aphGpdSrutb9P4k7wA2JHkAOAs4s5RyM0CStwB3Jzm5lHI7cDrw\nfOAVpZSdwJ1JzgUuTHJeKeXxxb4gSZJWlAlLKwveBZHksCRnAk8DbqWqYKwCbmralFLuBe4HTqkX\nbQDurENFYwuwGjhxoX3phBULSVIL5/N2QweLJP8yyUPAo8CHgdeWUu4B1gJ7Sym7+x6yo15H/XPH\nHOvpaSNJ0qFjwtLKULtCavcALwSOpjqW4hNJTj1I+wCDjFprm02bNrF69er9lk1PTzM9PT3A5iVJ\nmmwzMzPMzMzst2x2dnZJ+zB0sKiPg/j7+u62JCcD7wauBg5PclRf1WINT1YltgMn9W3y2PpnfyXj\nAJs3b2b9+vXDdnkw7gqRJLVY7pf0nuvD9rZt25iamursOdp0cZrnYcARwFbgcWBjsyLJCcCzgS/U\ni24FXpDkmJ7HnwbMAnd10BdJkjRGQ1Uskvw28OdUp53+MPAG4OXAaaWU3Uk+BlycZBfwEHApcEsp\n5Uv1Jj5LFSCuTHIO8EzgAuCyUspjXbygBbNiIUlq4XzebthdIccCn6AKBLPAV6lCxefq9ZuAJ4Br\nqKoYNwBnNw8upexLcgbwEaoqxh7g48AHFv4SJElawSYsrQx7HYu3tqx/FHhXfZuvzTeBM4Z53iVh\nxUKS1ML5vJ2X0pYkaZwmLK0YLBpWLCRJLZzP2xksJEkapwlLKwaLhhULSVIL5/N2BgtJksZpwtKK\nwaJhxUKS1ML5vJ3BQpKkcZqwtGKwkCRJnTFYNNwVIklq4XzezmAhSdI4TVhaMVg0rFhIklo4n7cz\nWEiSNE4TllYMFg0rFpKkFs7n7QwWkiSN04SlFYNFw4qFJKmF83k7g4UkSeM0YWnFYNGwYiFJauF8\n3s5gIUnSOE1YWjFYNKxYSJJaOJ+3M1hIkjROE5ZWDBaSJKkzBouGu0IkSS2cz9sZLCRJGqcJSysG\ni4YVC0lSC+fzdgYLSZLGacLSisGiYcVCktTC+bydwUKSpHGasLRisGhYsZAktXA+b2ewkCRpnCYs\nrRgsGlYsJEktnM/bGSwkSRqnCUsrBouGFQtJUgvn83YGixFKxt0DSVIXnM8HZ7AYIZOtJE2Gkc7n\nE/bHwmDRcFeIJKmF83k7g4UkSeM0YWnFYNGwYiFJauF83s5gIUnSOE1YWjFYNKxYSJJaOJ+3M1hI\nkjROE5ZWDBYNKxaSpBbO5+2GChZJ3pfk9iS7k+xI8sdJTuhrc0SSy5PsTPJQkmuSrOlrc3yS65Ls\nSbI9yUVJJi7k+AaUpMngdSwGN+wf85cBHwJeAvw88APAZ5P8YE+bS4BXA68DTgWOAz7TrKwDxPXA\nKmAD8CbgzcD5C3oFXbFiIUlq4XzebtUwjUspr+q9n+TNwLeAKeDzSY4CzgLOLKXcXLd5C3B3kpNL\nKbcDpwPPB15RStkJ3JnkXODCJOeVUh5f7ItaLnwDStJksGIxuMXufjgaKMB36vtTVGHlpqZBKeVe\n4H7glHrRBuDOOlQ0tgCrgRMX2Z+Fs2IhSWrhfN5uwcEiSah2e3y+lHJXvXgtsLeUsruv+Y56XdNm\nxxzr6WkjSZJWoKF2hfT5MPCTwEsHaBuqykabg7bZtGkTq1ev3m/Z9PQ009PTA2y67Zm7j6HNJk24\nkrSyjXQ+73DjMzMzzMzM7LdsdnZ20dsdxoKCRZLLgFcBLyulPNizajtweJKj+qoWa3iyKrEdOKlv\nk8fWP/srGfvZvHkz69evX0iXJUmaeHN92N62bRtTU1NL1oehd4XUoeKXqQ6+vL9v9VbgcWBjT/sT\ngGcDX6gX3Qq8IMkxPY87DZgF7mKCWKmQpMmwJAdvJiN8kqUzVMUiyYeBaeA1wJ4kTaVhtpTySCll\nd5KPARcn2QU8BFwK3FJK+VLd9rNUAeLKJOcAzwQuAC4rpTy2+Je0QB68KUlq4XzebthdIW+nOg7i\nf/Utfwvwifrfm4AngGuAI4AbgLObhqWUfUnOAD5CVcXYA3wc+MCQfVn2fANK0mTwdNPBDXsdi9Zd\nJ6WUR4F31bf52nwTOGOY5x45KxaSpBbO5+0m7jLay4lvQEmaDFYsBmewaFixkCS1cD5vZ7AYId+A\nkjQZrFgMzmDRsGIhSWrhfN7OYCFJkjpjsGh4SW9J0jyW5JLeE8JgIUmSOmOwaFixkCTNY6V8Cdly\nYLCQJEmdMViM0ISET0k65PklZIMzWDQ83VSS1ML5vJ3BYoR8A0rSZPACWYMzWDSsWEiSWjiftzNY\njJBvQEmaDFYsBmewaFixkCS1cD5vZ7AYId+AkjQZrFgMzmDRsGIhSWrhfN7OYCFJkjpjsGh4SW9J\n0jz8ErLBGSwkSVJnDBYNKxaSpHn4JWSDM1hIkqTOGCxGaELCpyQd8vwSssEZLBqebipJauF83s5g\nMUK+ASVpMniBrMEZLBpWLCRJLZzP2xksRsg3oCRNBisWgzNYNKxYSJJaOJ+3M1hIkqTOGCwaXiBL\nkjQPL+k9OIOFJEnqjMGiYcVCkjQPKxaDM1hIkqTOGCwaViwkSfPwS8gGZ7CQJEmdMViM0ISET0k6\n5PklZIMzWDS8QJYkqYXzeTuDxQj5BpSkyeAlvQdnsGhYsZAktXA+b2ewGCHfgJI0GaxYDG7oYJHk\nZUn+NMkDSfYlec0cbc5P8mCSh5P8RZLn9q1/epJPJplNsivJHyQ5cjEvZNGsWEiSWjift1tIxeJI\n4G+As4EDhjjJOcA7gbcBJwN7gC1JDu9p9ilgHbAReDVwKnDFAvoiSZKWkVXDPqCUcgNwA0Ay57kx\n7wYuKKVcW7f5NWAH8K+Bq5OsA04HpkopX6nbvAu4LslvllK2L+iVLJYXyJIkzcNLeg+u02MskjwH\nWAvc1CwrpewGbgNOqRdtAHY1oaJ2I1X14yVd9keSJC2trg/eXEsVEHb0Ld9Rr2vafKt3ZSnlCeA7\nPW2WnhULSdI8rFgMbqnOCglzHI+xgDaSJGkZG/oYixbbqQLCsexftVgDfKWnzZreByV5CvB0Dqx0\n7GfTpk2sXr16v2XT09NMT08vrtdgxUKSNK+V8iVkMzMzzMzM7LdsdnZ20dsdRqfBopRyX5LtVGd7\nfBUgyVFUx05cXje7FTg6yYt6jrPYSBVIbjvY9jdv3sz69eu77LIkSRNjrg/b27ZtY2pqasn6MHSw\nqK838VyqIADwY0leCHynlPJN4BLg/Un+Dvg6cAHwD8CfAJRS7kmyBfhokncAhwMfAmbGdkbIiFip\nkKTJ4AWyBreQisWLgb+kOh6iAL9XL/9D4KxSykVJnkZ1XYqjgb8GXllK2duzjdcDl1GdDbIPuIbq\nNNXx8QJZkqQWBox2C7mOxc20HPRZSjkPOO8g678LvHHY515pJuQ9IkmHPAPF4PyukIYVC0lSCwNG\nO4OFJEnqjMGi4emmkqR5rJTTTZcDg4UkSeqMwaJhxUKSNA8rFoMzWEiSpM4YLBpWLCRJ87BiMTiD\nhSRJ6ozBomHFQpI0DysWgzNYSJKkzhgsRmhCwqckHfK84ubgDBYNL+ktSWphwGhnsBihCXmPSNIh\nz0AxOINFw4qFJKmFAaOdwUKSJHXGYNHwdFNJ0jw83XRwBgtJktQZg0XDioUkaR5WLAZnsJAkSZ0x\nWDSsWEiS5mHFYnAGC0mS1BmDRcOKhSRpHlYsBmewkCRJnTFYjNCEhE9JOuR5xc3BGSwaXtJbktTC\ngNHOYCFJkjpjsGh48KYkaR4evDk4g4UkSeqMwaJhxUKSNA8rFoMzWEiSpM4YLBpWLCRJ87BiMTiD\nhSRJ6ozBomHFQpI0DysWgzNYSJKkzhgsGlYsJEnzsGIxOIOFJEnqjMFCkiR1xmDRcFeIJGke7goZ\nnMFCkiR1xmDRsGIhSZqHFYvBGSw0r5mZmXF34ZDjmC89x3zpOeaTbazBIsnZSe5L8r0kX0xy0tg6\nY8XiAP7nX3qO+dJzzJfeShxzKxaDG1uwSPKrwO8BHwBeBNwBbElyzLj6JEmSFmecFYtNwBWllE+U\nUu4B3g48DJw1lt5YsZAkzcOKxeDGEiyS/AAwBdzULCulFOBG4JRx9EmSJC3eqjE97zHAU4Adfct3\nAM+bo/1TAW64+H9w77Ff7rQjzZM9+Ikbeei273a67R++F9YDj94CM+/pdNNL4oGvfYOZ9/yXcXfj\nkOKYLz3HfOmtxDEf5Xz+z267nWcAj+7YxddHMC737bi/+edTO9/4HFLGUHpJ8kzgAeCUUsptPcsv\nAl5aSvlXfe1fD3xyaXspSdJEeUMp5VOjfpJxVSx2Ak8Ax/YtX8OBVQyALcAbgK8Dj4y0Z5IkTZan\nAj9K9bd05MZSsQBI8kXgtlLKu+v7Ae4HLi2l/O5YOiVJkhZlXBULgIuBP0yyFbid6iyRpwEfH2Of\nJEnSIowtWJRSrq6vWXE+1S6RvwFOL6X807j6JEmSFmdsu0IkSdLk8btCJElSZwwWkiSpM8s+WCyr\nLypb4ZK8L8ntSXYn2ZHkj5Oc0NfmiCSXJ9mZ5KEk1yRZ09fm+CTXJdmTZHuSi5Is+/fSuNXjvy/J\nxT3LHO8RSHJckivrcX04yR1J1ve1OT/Jg/X6v0jy3L71T0/yySSzSXYl+YMkRy7tK1kZkhyW5IIk\nf1+P598lef8c7RzzBUrysiR/muSBeh55zRxtFj2+SX4qyV/Vf3O/keS3hu3rsp6c/KKyzr0M+BDw\nEuDngR8APpvkB3vaXAK8GngdcCpwHPCZZmX9B+16qgN/NwBvAt5MdRCu5lEH4l+neg/3crw7luRo\n4BbgUeB0YB3wHmBXT5tzgHcCbwNOBvZQzS2H92zqU/VjN1L9jk4FrliCl7AS/XuqsfwN4PnAe4H3\nJnln08AxX7QjqU5yOBs44ODILsY3yQ9TXeviPqoLjf4WcF6Stw7V01LKsr0BXwR+v+d+gH8A3jvu\nvk3CjerS6vuornYKcBTVZPzanjbPq9ucXN9/JfAYcExPm7dRTdqrxv2aluMN+CHgXuDngL8ELna8\nRzreFwI3t7R5ENjUc/8o4HvAr9T319W/hxf1tDkdeBxYO+7XuNxuwLXAR/uWXQN8wjEfyXjvA17T\nt2zR4wu8g+oClqt62vwOcNcw/Vu2FQu/qGxJHE2VfL9T35+i+mTcO+b3Ul24rBnzDcCdpZSdPdvZ\nAqwGThx1h1eoy4FrSymf61v+YhzvUfgl4MtJrq53+W3r/cSV5DnAWvYf993Abew/7rtKKV/p2e6N\nVP9fXjLqF7ACfQHYmOQnAJK8EPgZqmqbYz5iHY7vBuCvSimP97TZAjwvyepB+7NsgwUH/6KytUvf\nnclSX+n0EuDzpZS76sVrgb31G7JX75ivZe7fCfh7OUCSM4GfBt43x+pjcbxH4ceoPnndC5wG/Gfg\n0iRvrNevpZpMDza3rAW+1buylPIEVQh33A90IfDfgXuS7AW2ApeUUv6oXu+Yj1ZX49vJfDPOK28u\nVJhj/5KG9mHgJ4GXDtB20DH399IjybOowtsvlFIeG+ahON6LcRhweynl3Pr+HUlOpAobVx3kcYOM\nu/PP3H4VeD1wJnAXVZj+/SQPllKuPMjjHPPR6mJ8U/8c+HewnCsWw35RmQaU5DLgVcDPllIe7Fm1\nHTg8yVF9D+kd8+0c+Dtp7vt72d8U8Axga5LHkjwGvBx4d/2pbgdwhOPduX8E7u5bdjfw7Prf26km\ny4PNLdvr+9+X5CnA03Hc53IR8DullE+XUr5WSvkksJknK3WO+Wgtdny397SZaxswxO9g2QaL+hPe\nVqqjV4Hvl+83Uu3P0wLUoeKXgVeUUu7vW72V6kCe3jE/gWpCbsb8VuAFfWfmnAbMUn1S0ZNuBF5A\n9enthfXty1Sfmpt/P4bj3bVbqA6C7fU84BsApZT7qCbQ3nE/imo/c++4H53kRT3b2Eg1ed82mm6v\naE/jwE+0+6j/xjjmo9XB+N7e0+bUOnA0TgPuLaXMDtOhZXsDfoXqqNZfozqF6Qrg28Azxt23lXij\n2v2xi+q002N7bk/ta3Mf8LNUn7hvAf66Z/1hVKdM/jnwU1RHFe8ALhj361sJN3rOCnG8RzbGL6Y6\n2+Z9wI9TlegfAs7safPeei75Jarw9z+B/wMc3tPmeqrwdxLVgYj3AleO+/Utxxvw36gOOn4V8C+A\n11Ltz/+PjnlnY3wk1QeSn6YKbf+uvn98V+NLdSbJg8AfUu0q/1Xg/wH/dqi+jnuwBhjM3wC+ThUw\nbgVePO4+rdRb/WZ8Yo7br/W0OYLqWhc768n408Cavu0cD/xZ/YbbAfwn4LBxv76VcAM+1xcsHO/R\njPOrgK8CDwNfA86ao8159ST6MNWR78/tW380VXVpliqQfxR42rhf23K81X/0LqYKyXvqP2gfpO+U\naMd8UWP88nnm8P/a5fhShZKb623cD/zmsH31S8gkSVJnlu0xFpIkaeUxWEiSpM4YLCRJUmcMFpIk\nqTMGC0mS1BmDhSRJ6ozBQpIkdcZgIUmSOmOwkCRJnTFYSJKkzhgsJElSZ/4/TGYwE3l+NLYAAAAA\nSUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10ecf8890>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(2)\n",
"plt.plot( np.abs(X) )\n",
"plt.plot( np.abs(Xsplitroll), 'r' )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Look at time domain signal\n",
"Real and imag parts after inverse FFT are plotted here in blue and red line. Note that the wrong method resulted in a complex signal."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d863610>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"f, ax = plt.subplots(3, 1, sharex=True)\n",
"ax[0].plot( t[0:50], x[0:50] )\n",
"\n",
"ax[1].plot( t[0:50], np.real(xroll[0:50]), 'b' )\n",
"ax[1].plot( t[0:50], np.imag(xroll[0:50]), 'r' )\n",
"\n",
"ax[2].plot( t[0:50], np.real(x_splitroll[0:50]), 'b' )\n",
"ax[2].plot( t[0:50], np.imag(x_splitroll[0:50]), 'r' )\n",
"\n",
"plt.show(block=False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment