Created
November 28, 2022 11:06
-
-
Save alisterburt/07b2f8bdd6e56963ba2e5f44a9651511 to your computer and use it in GitHub Desktop.
phase shift dft
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 36, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%%\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "- each component of a fourier transform is a complex number\n", | |
| "- each component describes a sine wave with a particular frequency, in a particular direction\n", | |
| "- complex number is fully described by magnitude and phase\n", | |
| "- changing phase (angle) of complex number changes the phase of a particular sine wave in the DFT" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%% md\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "# Changing angle (phase of sine wave) by complex multiplication" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%% md\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 39, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": "array([ 0., 30., 60., 90.])" | |
| }, | |
| "execution_count": 39, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": "<Figure size 400x400 with 1 Axes>", | |
| "image/png": "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lU6Kdjxr164977txuVwKBoNRbbdNBMDZV0/PmDEjqn6jRo3SwYMHI9Orr77qUIXRacp4HnvsMT3zzDNatGiRysrKdNlllyk3N1enTp1ysNLvN2HCBG3fvl0rV67U22+/rXXr1mn69Onf22/atGl1vpvHHnssBtXW9dprryk/P1/z5s3Tpk2bNGDAAOXm5urQoUP1tv/www81fvx4TZ06VZs3b1ZeXp7y8vK0bdu2GFdev2jHI515iva738O+fftiWHHDTpw4oQEDBmjhwoWNal9eXq6bb75ZN954owKBgGbOnKk77rhD7733nsOVNk604zlr165ddb6fLl26RLdh04a8+OKLxuv1NqrtpEmTzJgxYxyt52I1djy1tbXG7/ebP/7xj5FlVVVVxu12m1dffdXBCi/sk08+MZLMxx9/HFn2r3/9y7hcLnPgwIEG+w0bNszcfffdMajwwoYOHWp+85vfROZrampMamqqKSwsrLf9L3/5S3PzzTfXWZaZmWl+/etfO1pnY0U7nmh+n1qSJLNs2bILtrnvvvvMddddV2fZ2LFjTW5uroOVNU1jxrNmzRojyXz55ZcXta02cQTQVGdfPd27d2/NmDFDR44caemSmqS8vFzBYFA5OTmRZV6vV5mZmSotLW2xukpLS5WUlKQhQ4ZEluXk5CguLk5lZWUX7Pvyyy+rc+fO6tu3rwoKCnTy5Emny63j9OnT2rhxY52faVxcnHJychr8mZaWltZpL0m5ubkt+h2c1ZTxSGee0O/WrZvS0tI0ZswYbd++PRblNrvW/N1cjIyMDKWkpOinP/2pPvjgg6j7t6rXQcdSU1493VqdPe/n8/nqLPf5fFGfE2xOwWDwvEPSdu3aqVOnThes67bbblO3bt2UmpqqLVu2aPbs2dq1a5eWLl3qdMkRX3zxhWpqaur9me7cubPePsFgsNV9B2c1ZTy9e/fWCy+8oP79+ysUCunxxx9Xdna2tm/frquuuioWZTebhr6bcDisr776Sh07dmyhypomJSVFixYt0pAhQ1RdXa3Fixdr+PDhKisr06BBgxq9nlYbAE159XQ0xo0bF/n/fv36qX///urZs6fWrl3b4JtHL4bT44mlxo6lqb57jaBfv35KSUnRiBEjtGfPHvXs2bPJ60V0srKylJWVFZnPzs7Wtddeq+eee04PPfRQC1aG3r17q3fv3pH57Oxs7dmzR0899ZReeumlRq+n1QZAa3z19MVwcjxn/wnNysrKOm9OraysVEZGRpPWeSGNHYvf7z/vAuM333yjo0ePRvXPfmZmZkqSdu/eHbMA6Ny5s+Lj41VZWVlneWVlZYO1+/3+qNrHUlPGc6727dtr4MCB2r17txMlOqqh78bj8Vxyf/03ZOjQoXr//fej6tNqA6CtvXrayfF0795dfr9fJSUlkR1+OBxWWVlZ1HdGNUZjx5KVlaWqqipt3LhRgwcPliStXr1atbW1kZ16YwQCAUmK6WvBO3TooMGDB6ukpER5eXmSpNraWpWUlOiuu+6qt09WVpZKSko0c+bMyLKVK1fW+Su6pTRlPOeqqanR1q1bNXr0aAcrdUZWVtZ5t+S2lu+muQQCgeh/Ry7qEnIrsW/fPrN582Yzf/58c/nll5vNmzebzZs3m2PHjkXa9O7d2yxdutQYY8yxY8fMPffcY0pLS015eblZtWqVGTRokLnmmmvMqVOnWmoYEdGOxxhjHn30UZOUlGTefPNNs2XLFjNmzBjTvXt389VXX7XEECJGjRplBg4caMrKysz7779vrrnmGjN+/PjI559//rnp3bu3KSsrM8YYs3v3bvPggw+aDRs2mPLycvPmm2+aHj16mBtuuCHmtf/jH/8wbrfbFBUVmU8++cRMnz7dJCUlmWAwaIwx5vbbbzdz5syJtP/ggw9Mu3btzOOPP2527Nhh5s2bZ9q3b2+2bt0a89rrE+145s+fb9577z2zZ88es3HjRjNu3DiTkJBgtm/f3lJDiDh27Fjk90KSefLJJ83mzZvNvn37jDHGzJkzx9x+++2R9nv37jWJiYnm3nvvNTt27DALFy408fHxpri4uKWGUEe043nqqafM8uXLzaeffmq2bt1q7r77bhMXF2dWrVoV1XbbRABMmjTJSDpvWrNmTaSNJPPiiy8aY4w5efKkGTlypElOTjbt27c33bp1M9OmTYv8IrS0aMdjzJlbQf/whz8Yn89n3G63GTFihNm1a1fsiz/HkSNHzPjx483ll19uPB6PmTJlSp0gKy8vrzO2iooKc8MNN5hOnToZt9ttevXqZe69914TCoVapP5nn33WdO3a1XTo0MEMHTrUfPTRR5HPhg0bZiZNmlSn/euvv25+8IMfmA4dOpjrrrvOvPPOOzGu+MKiGc/MmTMjbX0+nxk9erTZtGlTC1R9vrO3QZ47na1/0qRJZtiwYef1ycjIMB06dDA9evSo8/vT0qIdz4IFC0zPnj1NQkKC6dSpkxk+fLhZvXp11NvlddAAYCmrnwMAAJsRAABgKQIAACxFAACApQgAALAUAQAAliIAAMBSBAAAWIoAAABLEQAAYCkCAAAsRQAAgKX+P1vP/KY1MDxqAAAAAElFTkSuQmCC\n" | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "a = 1 + 0j\n", | |
| "theta = np.deg2rad(30)\n", | |
| "r = np.cos(theta) + np.sin(theta)*1j\n", | |
| "\n", | |
| "fig, ax = plt.subplots(figsize=(4, 4))\n", | |
| "ax.set(xlim=(-1.5, 1.5), ylim=(-1.5, 1.5))\n", | |
| "ax.scatter(np.real(a), np.imag(a))\n", | |
| "ax.scatter(np.real(r*a), np.imag(r*a))\n", | |
| "ax.scatter(np.real(r*r*a), np.imag(r*r*a))\n", | |
| "ax.scatter(np.real(r*r*r*a), np.imag(r*r*r*a))\n", | |
| "\n", | |
| "np.angle([a, r*a, r*r*a, r*r*r*a], deg=True)" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%%\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "# implementing phase shift of a 1d signal" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%% md\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 40, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": "[<matplotlib.lines.Line2D at 0x15ded9fc0>]" | |
| }, | |
| "execution_count": 40, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": "<Figure size 640x480 with 1 Axes>", | |
| "image/png": "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ga677jq99dZbpsvKWdFoVA899JBqa2tVUFCgFStW6JFHHrns/SuYWc6GkUOHDqmxsVG7du3SiRMntHLlSq1fv15nzpwxXVrO+dnPfqYtW7bojTfe0CuvvKKRkRHdcsstCoVCpkvLeW+++ab+7u/+Ttdff73pUnLWuXPndPPNNys/P1//9m//pv/93//Vk08+qdLSUtOl5awnnnhCzzzzjJ566im9++67euKJJ/Stb31L3/72t02XlrFy9mjvunXr9OlPf1pPPfWUpLH7b6qqqvSnf/qn2r59u+HqcltXV5cWLVqkn/3sZ/r1X/910+XkrIGBAd1www16+umn9c1vflOrVq3S3r17TZeVc7Zv367//u//1n/913+ZLgXjfud3fkeVlZV67rnn4o994QtfUEFBgf7hH/7BYGWZKydXRiKRiI4fP66Ghob4Yx6PRw0NDTp69KjByiBJvb29kqSysjLDleS2LVu26Lbbbpvy3wnS7yc/+YnWrl2r3//939eiRYu0evVqHThwwHRZOe2mm25SU1OTPvjgA0nS//zP/+i1117TrbfeariyzJURF+UlW3d3t6LRqCorK6c8XllZqffee89QVZDGVqjuvfde3Xzzzbr22mtNl5OzXnjhBZ04cUJvvvmm6VJyXnNzs5555hk1Njbq/vvv15tvvqk/+7M/k8/n01133WW6vJy0fft29fX16aqrrpLX61U0GtWjjz6qO++803RpGSsnwwjca8uWLXrnnXf02muvmS4lZ7W3t2vbtm165ZVXFAgETJeT82KxmNauXavHHntMkrR69Wq988472r9/P2HEkB/84Af6/ve/r+eff16f+tSndPLkSd17771aunQp35M5yskwUlFRIa/Xq87OzimPd3Z2avHixYaqwtatW/Wv//qvevXVV7V8+XLT5eSs48eP68yZM7rhhhvij0WjUb366qt66qmnFA6H5fV6DVaYW5YsWaJrrrlmymNXX321/umf/slQRfj617+u7du364tf/KIk6brrrtNHH32k3bt3E0bmKCd7Rnw+n9asWaOmpqb4Y7FYTE1NTaqvrzdYWW6ybVtbt27Vj3/8Y/3Hf/yHamtrTZeU037jN35DP//5z3Xy5Mn419q1a3XnnXfq5MmTBJE0u/nmmy866v7BBx/oyiuvNFQRBgcH5fFM/fHp9XoVi8UMVZT5cnJlRJIaGxt11113ae3atbrxxhu1d+9ehUIhbd682XRpOWfLli16/vnn9c///M8qKipSR0eHJKmkpEQFBQWGq8s9RUVFF/XrFBYWqry8nD4eA+677z7ddNNNeuyxx/QHf/AHOnbsmJ599lk9++yzpkvLWRs2bNCjjz6q6upqfepTn9Lbb7+tPXv26I/+6I9Ml5a57Bz27W9/266urrZ9Pp9944032m+88YbpknKSpGm//v7v/950aRj32c9+1t62bZvpMnLWv/zLv9jXXnut7ff77auuusp+9tlnTZeU0/r6+uxt27bZ1dXVdiAQsOvq6uwHHnjADofDpkvLWDk7ZwQAALhDTvaMAAAA9yCMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMOr/B6RpsPqA/F5LAAAAAElFTkSuQmCC\n" | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "y = np.zeros(10)\n", | |
| "y[5] = 1\n", | |
| "\n", | |
| "fig, ax = plt.subplots()\n", | |
| "ax.plot(y)" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%%\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%% md\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 41, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": "(array([0. , 0.1, 0.2, 0.3, 0.4, 0.5]), (6,), (6,))" | |
| }, | |
| "execution_count": 41, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "rfft = np.fft.rfft(y)\n", | |
| "freq = np.fft.rfftfreq(len(y))\n", | |
| "freq, rfft.shape, freq.shape" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%%\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "source": [ | |
| "- frequency is expressed as cycles of sine wave per sample\n", | |
| "- shift is in samples\n", | |
| "- 2pi is number of radians per cycle\n", | |
| "\n", | |
| "units cancel and yield the number of radians required to shift a wave at a specific frequency by a given number of samples" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%% md\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 44, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": "array([ 1. +0.00000000e+00j, 0.80901699-5.87785252e-01j,\n 0.30901699-9.51056516e-01j, -0.30901699-9.51056516e-01j,\n -0.80901699-5.87785252e-01j, -1. -1.22464680e-16j])" | |
| }, | |
| "execution_count": 44, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "dx = 1\n", | |
| "angle = -2 * np.pi * freq * dx\n", | |
| "shift = np.cos(angle) + np.sin(angle)*1j\n", | |
| "shift" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%%\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 45, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": "array([ 1. +0.00000000e+00j, -0.80901699+5.87785252e-01j,\n 0.30901699-9.51056516e-01j, 0.30901699+9.51056516e-01j,\n -0.80901699-5.87785252e-01j, 1. +1.22464680e-16j])" | |
| }, | |
| "execution_count": 45, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "shifted_rfft = shift * rfft\n", | |
| "shifted_rfft" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%%\n" | |
| } | |
| } | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 46, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": "[<matplotlib.lines.Line2D at 0x15de9d6f0>]" | |
| }, | |
| "execution_count": 46, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": "<Figure size 640x480 with 1 Axes>", | |
| "image/png": "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c227tM/OK4w0NTXB7XZjeHh4wfPDw8NobW1d8mtaW1vzej0A+Hw++HzWDyba+YeftvwziIhK5f/dtkF2CSWyRXYBZDN5rVl6vV5s374dvb296ed0XUdvby927dq15Nfs2rVrwesB4MUXX1z29URERLS65L1N09PTg3vuuQc7duzAzTffjMcffxyRSAR79uwBANx9993YsGEDDh8+DADYv38/3ve+9+Gxxx7D7bffjmeffRY//elP8dRTT5X2V0JERERKyjuM3HXXXRgdHcXBgwcxNDSEbdu24YUXXkg3qQ4MDMCV1SR2yy234JlnnsEXvvAFfO5zn8M111yD733ve7j++utL96sgIiIiZWmGYRiyi7iacDiM2tpaTE1NoaamRnY5RERElINcv3+re86NiIiIHIFhhIiIiKRiGCEiIiKpGEaIiIhIKoYRIiIikophhIiIiKRiGCEiIiKpGEaIiIhIKoYRIiIikirvcfAyiCGx4XBYciVERESUK/F9+2rD3pUII9PT0wCAtrY2yZUQERFRvqanp1FbW7vszytxN42u67h8+TKqq6uhaVrJ3jccDqOtrQ2Dg4O888YG+PthP/w9sRf+ftgLfz+uzjAMTE9PY/369Qsu0V1MiZURl8uFjRs3Wvb+NTU1/B+SjfD3w374e2Iv/P2wF/5+rGylFRGBDaxEREQkFcMIERERSbWqw4jP58OhQ4fg8/lkl0Lg74cd8ffEXvj7YS/8/SgdJRpYiYiIyLlW9coIERERyccwQkRERFIxjBAREZFUDCNEREQk1aoOI0ePHkVHRwf8fj927tyJM2fOyC5pVTp8+DDe8573oLq6GmvXrsWdd96J119/XXZZlPKlL30Jmqbhvvvuk13KqnXp0iX88R//MRobG1FZWYkbbrgBP/3pT2WXtWolk0k8+OCD6OzsRGVlJTZv3oyHH374qvev0PJWbRg5efIkenp6cOjQIZw7dw5bt27F7t27MTIyIru0VedHP/oR9u7di1deeQUvvvgi5ufn8cEPfhCRSER2aaveT37yE/z93/893v3ud8suZdWamJjArbfeCo/Hg3//93/H//7v/+Kxxx5DfX297NJWrS9/+cv42te+hieeeAKvvvoqvvzlL+MrX/kKvvrVr8ouTVmr9mjvzp078Z73vAdPPPEEAPP+m7a2Nvz5n/85HnjgAcnVrW6jo6NYu3YtfvSjH+E3fuM3ZJezas3MzOCmm27Ck08+iS9+8YvYtm0bHn/8cdllrToPPPAA/ud//gf//d//LbsUSvnd3/1dtLS04Omnn04/9/u///uorKzEP/7jP0qsTF2rcmUkHo/j7Nmz6O7uTj/ncrnQ3d2N06dPS6yMAGBqagoA0NDQILmS1W3v3r24/fbbF/z/hMrv+9//Pnbs2IE//MM/xNq1a3HjjTfi+PHjssta1W655Rb09vbijTfeAAD8/Oc/x0svvYTbbrtNcmXqUuKivFIbGxtDMplES0vLgudbWlrw2muvSaqKAHOF6r777sOtt96K66+/XnY5q9azzz6Lc+fO4Sc/+YnsUla9YDCIr33ta+jp6cHnPvc5/OQnP8Ff/MVfwOv14p577pFd3qr0wAMPIBwOY8uWLXC73Ugmk3jkkUfw0Y9+VHZpylqVYYTsa+/evfjlL3+Jl156SXYpq9bg4CD279+PF198EX6/X3Y5q56u69ixYwceffRRAMCNN96IX/7ylzh27BjDiCTf/va38a1vfQvPPPMM3vWud+H8+fO47777sH79ev6eFGhVhpGmpia43W4MDw8veH54eBitra2SqqJ9+/bh3/7t3/DjH/8YGzdulF3OqnX27FmMjIzgpptuSj+XTCbx4x//GE888QRisRjcbrfECleXdevW4brrrlvw3LXXXot//ud/llQRfeYzn8EDDzyAD33oQwCAG264ARcvXsThw4cZRgq0KntGvF4vtm/fjt7e3vRzuq6jt7cXu3btkljZ6mQYBvbt24fvfve7+M///E90dnbKLmlV+83f/E384he/wPnz59M/duzYgY9+9KM4f/48g0iZ3XrrrVccdX/jjTewadMmSRVRNBqFy7Xw26fb7Yau65IqUt+qXBkBgJ6eHtxzzz3YsWMHbr75Zjz++OOIRCLYs2eP7NJWnb179+KZZ57Bv/7rv6K6uhpDQ0MAgNraWlRWVkqubvWprq6+ol+nqqoKjY2N7OOR4P7778ctt9yCRx99FH/0R3+EM2fO4KmnnsJTTz0lu7RV64477sAjjzyC9vZ2vOtd78LPfvYzHDlyBH/yJ38iuzR1GavYV7/6VaO9vd3wer3GzTffbLzyyiuyS1qVACz54x/+4R9kl0Yp73vf+4z9+/fLLmPV+sEPfmBcf/31hs/nM7Zs2WI89dRTskta1cLhsLF//36jvb3d8Pv9RldXl/H5z3/eiMVisktT1qqdM0JERET2sCp7RoiIiMg+GEaIiIhIKoYRIiIikophhIiIiKRiGCEiIiKpGEaIiIhIKoYRIiIikophhIiIiKRiGCEiIiKpGEaIiIhIKoYRIiIikophhIiIiKT6/wG0pCoANoGGGwAAAABJRU5ErkJggg==\n" | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "shifted = np.fft.irfft(shifted_rfft)\n", | |
| "fig, ax = plt.subplots()\n", | |
| "ax.plot(y)\n", | |
| "ax.plot(shifted)" | |
| ], | |
| "metadata": { | |
| "collapsed": false, | |
| "pycharm": { | |
| "name": "#%%\n" | |
| } | |
| } | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "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" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment