{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# FMCW Radar 105 - Vibration" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ugxnvdnUR0mk", "outputId": "fb3e58da-31cd-4427-ce7a-89b8cd31312f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting mmWrt\n", " Downloading mmWrt-0.0.4-py3-none-any.whl (11 kB)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from mmWrt) (1.22.4)\n", "Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from mmWrt) (1.10.1)\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from mmWrt) (3.7.1)\n", "Collecting semver (from mmWrt)\n", " Downloading semver-3.0.0-py3-none-any.whl (17 kB)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->mmWrt) (1.0.7)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->mmWrt) (0.11.0)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->mmWrt) (4.39.3)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->mmWrt) (1.4.4)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->mmWrt) (23.1)\n", "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->mmWrt) (8.4.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->mmWrt) (3.0.9)\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib->mmWrt) (2.8.2)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib->mmWrt) (1.16.0)\n", "Installing collected packages: semver, mmWrt\n", "Successfully installed mmWrt-0.0.4 semver-3.0.0\n" ] } ], "source": [ "# Install a pip package in the current Jupyter kernel\n", "import sys\n", "!{sys.executable} -m pip install mmWrt" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "yVJbQgLJSdrT" }, "outputs": [], "source": [ "from os.path import abspath, join, pardir\n", "import sys\n", "import matplotlib.pyplot as plt\n", "import matplotlib.cm as cm\n", "from matplotlib import colors\n", "from numpy import where, expand_dims\n", "\n", "\n", "from mmWrt.Raytracing import rt_points # noqa: E402\n", "from mmWrt.Scene import Radar, Transmitter, Receiver, Target # noqa: E402\n", "from mmWrt import RadarSignalProcessing as rsp # noqa: E402" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 527 }, "id": "ft8_YZM-SkFL", "outputId": "5bb8d459-6a16-4974-d6c2-6b7a2a201b6e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "32\n", "(32, 42)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAHHCAYAAAB+wBhMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA81klEQVR4nO3deXyNZ/7/8ffJvkiCxJaRSCxFVVVtY+mgYsmopTWUbyxVqtPaaSnfKl2VmSmlGdVOLW0tRYtON4Paqaq0SrW2BilCUQkhEcn1+2N+ztdpFjmRk3NHXs/H4348eq77uq/zuXOf0/N239d9js0YYwQAAGBRHu4uAAAAID+EFQAAYGmEFQAAYGmEFQAAYGmEFQAAYGmEFQAAYGmEFQAAYGmEFQAAYGmEFQAAYGmEFcBCbDabpkyZ4pKxjx49KpvNpgULFrhkfABwFcIKUAhdu3ZVQECALl68mGefuLg4+fj46Ny5c8VYmXM+++wzl4SjKVOmyGaz2Rdvb29FRUVpxIgRunDhQpE/n7t89NFHevjhh1W9enUFBASodu3aGjt2bK77eOPfw8vLS+XLl1ejRo00cuRI7d+/v8DPGRUV5TDWjUt6erokacGCBXn2eeaZZ9SmTZs819+4uCo4A87ycncBQEkUFxenf//731q5cqX69++fY/3ly5e1evVqderUSaGhoW6oMKdq1arpypUr8vb2trd99tlnio+Pd9mH0pw5c1SmTBmlpaVp/fr1mj17thISErR161aXPF9xGzJkiMLDw9W3b19FRkZq7969euONN/TZZ58pISFB/v7+Dv3bt2+v/v37yxijlJQU7dmzRwsXLtQ///lPTZs2TWPGjCnQ895zzz0aO3ZsjnYfHx+Hxy+88IKio6Md2u666y61a9dOgwcPtrft2rVLs2bN0sSJE1W3bl17+913312gegCXMwCcdvnyZRMUFGQ6duyY6/rFixcbSWbp0qVOjSvJTJ48uQgqLJihQ4caV/xvYPLkyUaS+fXXXx3aH374YSPJ7Ny5s8if0x02bNiQo23hwoVGknn77bcd2iWZoUOH5uh/9uxZ07x5cyPJfPrppzd9zmrVqpnOnTvn22f+/PlGktm1a9dNxzPGmOXLlxtJue4PYAVcBgIKwd/fXw899JDWr1+vM2fO5Fi/ePFiBQUFqWvXrpKkCxcuaNSoUYqIiJCvr69q1qypadOmKTs7+6bP9e233yo2NlbBwcEqU6aM2rVrp6+++ipHvwsXLmj06NGKioqSr6+vqlatqv79++vs2bOScs5ZeeSRRxQfHy/J8RKFMUZRUVHq1q1bjudIT09XSEiIHn/88QL/rW503333SZKOHDlibzt//ryeeuop1a9fX2XKlFFwcLBiY2O1Z88eh203btwom82mZcuW6eWXX1bVqlXl5+endu3a6fDhwzmeKz4+XtWrV5e/v7+aNm2qLVu2qE2bNmrTpo1Dv4yMDE2ePFk1a9aUr6+vIiIiNG7cOGVkZNx0f34/liQ9+OCDkqQff/zxpttLUmhoqJYuXSovLy+9/PLLBdoGKG24DAQUUlxcnBYuXKhly5Zp2LBh9vbz589rzZo16tOnj/z9/XX58mW1bt1aJ06c0OOPP67IyEht375dEyZM0KlTpzRz5sw8n+OHH37Qfffdp+DgYI0bN07e3t6aO3eu2rRpo02bNqlZs2aSpEuXLum+++7Tjz/+qEcffVT33nuvzp49q48//li//PKLwsLCcoz9+OOP6+TJk1q7dq3ee+89e7vNZlPfvn01ffp0nT9/XuXLl7ev+/e//63U1FT17du3UH+zo0ePSpLKlStnb/v555+1atUq9ezZU9HR0Tp9+rTmzp2r1q1ba//+/QoPD3cY49VXX5WHh4eeeuoppaSkaPr06YqLi9POnTvtfebMmaNhw4bpvvvu0+jRo3X06FF1795d5cqVU9WqVe39srOz1bVrV23dulVDhgxR3bp1tXfvXs2YMUMHDx7UqlWrnN7H5ORkScr1b56XyMhItW7dWhs2bFBqaqqCg4Pz7Z+ZmWkPodcFBAQoICDAoS0lJSVHP2fqAizD3ad2gJLq2rVrpkqVKqZ58+YO7W+++aaRZNasWWOMMebFF180gYGB5uDBgw79nnnmGePp6WmOHz9ub9PvLgN1797d+Pj4mCNHjtjbTp48aYKCgsyf/vQne9tzzz1nJJmPPvooR53Z2dnGGGMSExONJDN//nz7urwuAx04cMBIMnPmzHFo79q1q4mKirKPmZfrl4EOHDhgfv31V3P06FEzb9484+/vbypUqGDS0tLsfdPT001WVpbD9omJicbX19e88MIL9rYNGzYYSaZu3bomIyPD3v76668bSWbv3r3GGGMyMjJMaGioadKkicnMzLT3W7BggZFkWrdubW977733jIeHh9myZYvD818/htu2bct3P3MzaNAg4+npmeN4K4/LQNeNHDnSSDJ79uzJd/xq1aoZSTmWG1831y8D5bbkhstAsDouAwGF5Onpqd69e2vHjh32MwbSfy8BVapUSe3atZMkLV++XPfdd5/KlSuns2fP2peYmBhlZWVp8+bNuY6flZWl//znP+revbuqV69ub69SpYr+53/+R1u3blVqaqok6cMPP1SDBg3slyBuZLPZnN63O+64Q82aNdOiRYvsbefPn9fnn3+uuLi4Ao9Zu3ZtVahQQVFRUXr00UdVs2ZNff755w5nAHx9feXh4WHf53PnzqlMmTKqXbu2EhIScow5cOBAh4mk1y8t/fzzz5Kkb775RufOndNjjz0mL6//O3kcFxfncEZH+u+xqVu3rurUqeNwbO6//35J0oYNGwq0n9ctXrxY77zzjsaOHatatWo5tW2ZMmUkKd87zK5r1qyZ1q5d67DkNtE7Pj4+Rz+gJOIyEHAL4uLiNGPGDC1evFgTJ07UL7/8oi1btmjEiBHy9PSUJB06dEjff/+9KlSokOsYuc15kaRff/1Vly9fVu3atXOsq1u3rrKzs5WUlKR69erpyJEj6tGjR9HtmKT+/ftr2LBhOnbsmKpVq6bly5crMzNT/fr1kyRdvXpV58+fd9imQoUK9v2W/huigoOD9euvv2rWrFlKTEzMcYdMdna2Xn/9df3zn/9UYmKisrKy7Otyu5MqMjLS4fH1APLbb79Jko4dOyZJqlmzpkM/Ly8vRUVFObQdOnRIP/74o9PHJjdbtmzRoEGD1LFjx0LNPbl06ZIkKSgo6KZ9w8LCFBMTc9N+TZs2VePGjZ2uBbAawgpwCxo1aqQ6depoyZIlmjhxopYsWSJjjOLi4ux9srOz1b59e40bNy7XMe64447iKtcpvXv31ujRo7Vo0SJNnDhR77//vho3bmwPT9u3b1fbtm0dtklMTHQIBH/605/scyS6dOmi+vXrKy4uTrt377afTXnllVc0adIkPfroo3rxxRdVvnx5eXh4aNSoUblOQL4xDN3IGOP0PmZnZ6t+/fp67bXXcl0fERFRoHH27Nmjrl276q677tKKFSsczugU1L59++Tp6ZnjVmMAhBXglsXFxWnSpEn6/vvvtXjxYtWqVUtNmjSxr69Ro4YuXbpUoH8J36hChQoKCAjQgQMHcqz76aef5OHhYf8wrVGjhvbt2+d07fldzilfvrw6d+6sRYsWKS4uTtu2bXOYDNygQYMclxUqV66c53hlypTR5MmTNXDgQC1btky9e/eWJK1YsUJt27bVO++849D/woULhZoMWq1aNUnS4cOHHcLUtWvXdPToUYfvDqlRo4b27Nmjdu3aFepymfTfO5s6deqkihUr6rPPPrNfznHG8ePHtWnTJjVv3rxAZ1aA0oY5K8Atun4W5bnnntN3333ncFZFknr16qUdO3ZozZo1Oba9cOGCrl27luu4np6e6tChg1avXu0wJ+b06dNavHixWrVqZb9rpEePHtqzZ49WrlyZY5z8zjgEBgba68hNv379tH//fj399NP2OTrXlStXTjExMQ6Ln59fns8l/fdvVbVqVU2bNs1hP39f4/Lly3XixIl8x8pL48aNFRoaqrffftvhb7to0SL7paLrevXqpRMnTujtt9/OMc6VK1eUlpaW73MlJyerQ4cO8vDw0Jo1a/K8nJSf8+fPq0+fPsrKytL//u//Or09UBpwZgW4RdHR0WrRooVWr14tSTnCytNPP62PP/5YDzzwgB555BE1atRIaWlp2rt3r1asWKGjR4/meQbhpZde0tq1a9WqVSs9+eST8vLy0ty5c5WRkaHp06c7PMeKFSvUs2dPPfroo2rUqJHOnz+vjz/+WG+++aYaNGiQ6/iNGjWSJI0YMUIdO3bMEUg6d+6s0NBQLV++XLGxsapYseIt/a28vb01cuRIPf300/riiy/UqVMnPfDAA3rhhRc0cOBAtWjRQnv37tWiRYscJhU7w8fHR1OmTNHw4cN1//33q1evXjp69KgWLFigGjVqOJxB6devn5YtW6a//vWv2rBhg1q2bKmsrCz99NNPWrZsmdasWZPvnI9OnTrp559/1rhx47R161aHb+atVKmS2rdv79D/4MGDev/992WMUWpqqvbs2aPly5fr0qVLeu2119SpU6dC7TNw23PrvUjAbSI+Pt5IMk2bNs11/cWLF82ECRNMzZo1jY+PjwkLCzMtWrQwf//7383Vq1ft/ZTLN9gmJCSYjh07mjJlypiAgADTtm1bs3379hzPce7cOTNs2DDzhz/8wfj4+JiqVauaAQMGmLNnzxpjcr91+dq1a2b48OGmQoUKxmaz5Xpr65NPPmkkmcWL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AAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsjbACAAAsrUSFlVdffVU2m02jRo1ydykAAKCYlJiwsmvXLs2dO1d33323u0sBAADFqESElUuXLikuLk5vv/22ypUr5+5yAABAMSoRYWXo0KHq3LmzYmJibto3IyNDqampDgsAACi5vNxdwM0sXbpUCQkJ2rVrV4H6T506Vc8//7yLqwIAAMXF0mdWkpKSNHLkSC1atEh+fn4F2mbChAlKSUmxL0lJSS6uEgAAuJKlz6zs3r1bZ86c0b333mtvy8rK0ubNm/XGG28oIyNDnp6eDtv4+vrK19e3uEsFAAAuYumw0q5dO+3du9ehbeDAgapTp47Gjx+fI6gAAIDbj6XDSlBQkO666y6HtsDAQIWGhuZoBwAAtydLz1kBAACw9JmV3GzcuNHdJQAAgGLEmRUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBphBUAAGBpXs50vnDhglauXKktW7bo2LFjunz5sipUqKCGDRuqY8eOatGihavqBAAApVSBzqycPHlSgwcPVpUqVfTSSy/pypUruueee9SuXTtVrVpVGzZsUPv27XXnnXfqgw8+cHXNAACgFCnQmZWGDRtqwIAB2r17t+68885c+1y5ckWrVq3SzJkzlZSUpKeeeqpICwUAAKWTzRhjbtbp3LlzCg0NLfCgzvZ3pdTUVIWEhKiNusnL5u3ucgAAKLWumUxt1GqlpKQoODi4wNsV6DKQs8HDKkEFAACUfE7fDbRw4UJ9+umn9sfjxo1T2bJl1aJFCx07dqxIiwMAAHA6rLzyyivy9/eXJO3YsUPx8fGaPn26wsLCNHr06CIv8MSJE+rbt69CQ0Pl7++v+vXr65tvviny5wEAANbk1K3LkpSUlKSaNWtKklatWqUePXpoyJAhatmypdq0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RFgBAAAWR1gBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACWRlgBAACW5tawsnnzZnXp0kXh4eGy2WxatWqVfV1mZqbGjx+v+vXrKzAwUOHh4erfv79OnjzpvoIBAECxc2tYSUtLU4MGDRQfH59j3eXLl5WQkKBJkyYpISFBH330kQ4cOKCuXbu6oVIAAOAuXu588tjYWMXGxua6LiQkRGvXrnVoe+ONN9S0aVMdP35ckZGRxVEiAABwM7eGFWelpKTIZrOpbNmyefbJyMhQRkaG/XFqamoxVAYAAFylxEywTU9P1/jx49WnTx8FBwfn2W/q1KkKCQmxLxEREcVYJQAAKGolIqxkZmaqV69eMsZozpw5+fadMGGCUlJS7EtSUlIxVQkAAFzB8peBrgeVY8eO6csvv8z3rIok+fr6ytfXt5iqAwAArmbpsHI9qBw6dEgbNmxQaGiou0sCAADFzK1h5dKlSzp8+LD9cWJior777juVL19eVapU0V/+8hclJCTok08+UVZWlpKTkyVJ5cuXl4+Pj7vKBgAAxchmjDHuevKNGzeqbdu2OdoHDBigKVOmKDo6OtftNmzYoDZt2hToOVJTUxUSEqI26iYvm/etlAsAAG7BNZOpjVqtlJSUm07ruJFbz6y0adNG+WUlN+YoAABgESXibiAAAFB6EVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAIClEVYAAICluTWsbN68WV26dFF4eLhsNptWrVqVZ9+//vWvstlsmjlzZrHVBwAA3M+tYSUtLU0NGjRQfHx8vv1Wrlypr776SuHh4cVUGQAAsAovdz55bGysYmNj8+1z4sQJDR8+XGvWrFHnzp2LqTIAAGAVbg0rN5Odna1+/frp6aefVr169Qq0TUZGhjIyMuyPU1NTXVUeAAAoBpaeYDtt2jR5eXlpxIgRBd5m6tSpCgkJsS8REREurBAAALiaZcPK7t279frrr2vBggWy2WwF3m7ChAlKSUmxL0lJSS6sEgAAuJplw8qWLVt05swZRUZGysvLS15eXjp27JjGjh2rqKioPLfz9fVVcHCwwwIAAEouy85Z6devn2JiYhzaOnbsqH79+mngwIFuqgoAABQ3t4aVS5cu6fDhw/bHiYmJ+u6771S+fHlFRkYqNDTUob+3t7cqV66s2rVrF3epAADATdwaVr755hu1bdvW/njMmDGSpAEDBmjBggVuqgoAAFiJW8NKmzZtZIwpcP+jR4+6rhgAAGBJlp1gCwAAIBFWAACAxRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApRFWAACApXm5uwBXM8ZIkq4pUzJuLgYAgFLsmjIl/d9nc0Hd9mHl4sWLkqSt+szNlQAAAOm/n80hISEF7m8zzsabEiY7O1snT55UUFCQbDZbvn1TU1MVERGhpKQkBQcHF1OFxY/9vL2Uhv0sDfsosZ+3m9Kwn87uozFGFy9eVHh4uDw8Cj4T5bY/s+Lh4aGqVas6tU1wcPBt+8K6Eft5eykN+1ka9lFiP283pWE/ndlHZ86oXMcEWwAAYGmEFQAAYGmElRv4+vpq8uTJ8vX1dXcpLsV+3l5Kw36Whn2U2M/bTWnYz+Lax9t+gi0AACjZOLMCAAAsjbACAAAsjbACAAAsjbACAAAsrdSFlfj4eEVFRcnPz0/NmjXT119/nW//5cuXq06dOvLz81P9+vX12WfW/tr+qVOnqkmTJgoKClLFihXVvXt3HThwIN9tFixYIJvN5rD4+fkVU8WFM2XKlBw116lTJ99tStqx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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.fft import fft, fft2\n", "from numpy import sin, pi\n", "c = 3e8\n", "\n", "debug_ON = True\n", "test = 0\n", "NC=32\n", "NA=64\n", "radar = Radar(transmitter=Transmitter(bw=0.3e9, slope=70e8,\n", " t_interchirp=1.2e-6,\n", " chirps_count=NC),\n", " receiver=Receiver(fs=1e3, max_adc_buffer_size=256,\n", " debug=debug_ON), debug=debug_ON)\n", "\n", "target1 = Target(2)\n", "\"\"\"\n", "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4035586/\n", "This movement ranges from 4–12 mm17 with a frequency range of 0.2–0.34 Hz (12–20 breaths per minute)18.\n", "In addition to respiratory motion, the chest surface motion also includes comparatively faster but weaker vibrations (precordial motion41)\n", "due to the beating of the heart. The chest surface motion due to the beating of the heart has an amplitude range of 0.2–0.5 mm19 and frequency range of 1–1.34 Hz\n", "(60–80 beats per minute)18.\n", "\"\"\"\n", "fb = 0.2 #Hz\n", "ab = 8e-3\n", "fh = 1.15 #Hz\n", "ah = 0.3e-3\n", "target2 = Target(5, 0, 0, vx=lambda t: ab*sin(2*pi*fb*t)+ah*sin(2*pi*fh*t))\n", "\n", "targets = [target2]\n", "\n", "bb = rt_points(radar, targets, debug=debug_ON)\n", "print(bb[\"chirps_count\"])\n", "cube = bb[\"adc_cube\"][0,:,0,0,:]\n", "print(cube.shape)\n", "Z_fft2 = abs(fft2(cube))\n", "Data_fft2 = Z_fft2 # [0:n_chirps//2,0:n_samples//2]\n", "\n", "plt.xlabel(\"Range (m)\")\n", "plt.ylabel(\"Velocity (m/s)\")\n", "plt.title('Velocity-Range 2D FFT')\n", "plt.imshow(Data_fft2[0:NC//2,0:42//2])" ] }, { "cell_type": "markdown", "metadata": { "id": "YNrx1t9YAJ3u" }, "source": [ "$$ y_{IF}(t) \\approx cos(2 \\pi \\cdot [f_{0min} \\cdot \\delta + s \\cdot \\delta \\cdot t ])$$\n", "\n", "Where:\n", "\n", "* $ f_{0min} $ the starting frequency of the chirp\n", "* s is the slope of the chirp\n", "* $\\delta $ is the total time of flight between antennas and target\n", "\n", "$$ \\delta(t) = 2 \\cdot \\frac{R0 + m \\cdot sin(\\omega_m \\cdot t)}{c} $$\n", "\n", "Where:\n", "\n", "* R0: main distance of target\n", "* m: amplitude of vibration\n", "* $\\omega_m$: frequency of vibration\n", "\n", "$$ \\forall l \\in \\mathbb{N} , l \\in [ \\,0, L] \\, $$\n", "\n", "Where:\n", "* L is the number of chirps\n", "* l the index of a given chirp\n", "* $T_c$ the total time between the start of two chirps\n", "* $t_c$ the time starting at 0 at the begining of the chirp\n", "\n", "$$ \\delta = \\frac{2[R0 + m \\cdot sin(\\omega_m \\cdot [l \\cdot T_c + t_c])]}{c} $$\n", "\n", "considering that\n", "$$ sin(\\omega_m \\cdot [l \\cdot T_c + t_c]) = sin( \\omega_m \\cdot l \\cdot T_c)cos(\\omega_m \\cdot t_c) + cos(\\omega_m \\cdot l \\cdot T_c)sin(\\omega_m \\cdot t_c) $$\n", "\n", "considering that $$ \\omega_m \\cdot t_c \\approx 0 $$\n", "$$ sin(\\omega_m \\cdot [l \\cdot T_c + t_c]) \\approx sin( \\omega_m \\cdot l \\cdot T_c) $$\n", "\n", "Thus\n", "$$ \\delta \\approx \\frac{2[R0 + m \\cdot sin( \\omega_m \\cdot l \\cdot T_c)]}{c} $$\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "dBbg0vH92pfy", "outputId": "22783ee6-e2e9-4814-bfc7-d1133dcf2c45" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.2 0.09765625\n", "(64, 64, 1, 1, 1024)\n" ] } ], "source": [ "from numpy import arange, zeros\n", "\n", "n_adc = 1024\n", "n_chirps = 64\n", "n_frames = 64\n", "\n", "ts = 1e-2\n", "fs = 1/ts\n", "\n", "\n", "T = arange(0, n_adc*ts, ts)\n", "assert fs > 2* fh\n", "assert fs > 2* fb\n", "t_interchirp=1.2e-6\n", "fc = 1/t_interchirp\n", "t_interframe = 1e-1\n", "ff = 1/(t_interframe)\n", "print(fb, fs/n_adc)\n", "assert fb > fs/n_adc\n", "assert fb > ff/n_frames\n", "assert fh > ff/n_frames\n", "assert int(ff/fb) != int(fh/fb)\n", "n_tx = 1\n", "n_rx = 1\n", "adc_cube_2 = zeros((n_frames, n_chirps, n_tx, n_rx, n_adc))\n", "tx_i=0\n", "rx_i=0\n", "\n", "for frame_i in range(n_frames):\n", " T[:] += t_interframe\n", " for chirp_i in range(n_chirps):\n", " T[:] += t_interchirp\n", " chest = lambda t: ab*sin(2*pi*fb*t)+ah*sin(2*pi*fh*t)\n", " YIF = chest(T)\n", " adc_cube_2[frame_i, chirp_i, tx_i, rx_i, :] = YIF\n", "print(adc_cube_2.shape)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 467 }, "id": "d8GlMHm6w-yl", "outputId": "1431b12c-3dd5-4045-c7b4-90491dc5bbf3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1024,)\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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lCKMAACAlCKMAACAlCKMAACAlCKMAACAlOqWu/a2FlqXrba2NsUtAQAAdoX+3U60vuoFEUbOnDkjScrNzU1xSwAAgKkzZ84oKysr5ucXxHLwwWBQn3zyifr27SuXy9Vh31tbW6vc3FxVVFSwzHw7eD6x8Wzi4/nEx/OJjWcT34X2fCzL0pkzZzR48OCofetauyB6Rtxut4YOHdpp35+ZmXlB/KGmCs8nNp5NfDyf+Hg+sfFs4ruQnk+8HpEQBrACAICUIowAAICU6tFhxOfz6eGHH5bP50t1U7olnk9sPJv4eD7x8Xxi49nEd7E+nwtiACsAALh49eieEQAAkHqEEQAAkFKEEQAAkFKEEQAAkFI9OoysWrVKV1xxhTIyMjRt2jS98847qW5SSrz11lu69dZbNXjwYLlcLm3ZsiXqc8uy9NBDD2nQoEHq1auXZs2apQ8++CA1je1ixcXFuuaaa9S3b18NHDhQ8+fP15EjR6LOOX/+vAoLC3XppZeqT58++pu/+RtVV1enqMVdZ/Xq1ZowYUJ48aX8/Hy99tpr4c976nNpz7Jly+RyubRkyZLwsZ78fP7pn/5JLpcr6jVmzJjw5z352YScOHFC3/72t3XppZeqV69euuqqq7Rnz57w5xfb38s9Noy88MILWrp0qR5++GHt27dPeXl5mj17tk6ePJnqpnW5uro65eXladWqVe1+/i//8i968skntWbNGu3evVuXXHKJZs+erfPnz3dxS7vejh07VFhYqF27dqmkpER+v1833XST6urqwuf84Ac/0Msvv6xNmzZpx44d+uSTT/TXf/3XKWx11xg6dKiWLVumvXv3as+ePfrmN7+pefPm6fDhw5J67nNp7d1339XatWs1YcKEqOM9/flceeWVqqysDL/efvvt8Gc9/dmcOnVK1113ndLT0/Xaa6/p/fff1/Lly9W/f//wORfd38tWDzV16lSrsLAw/D4QCFiDBw+2iouLU9iq1JNkbd68Ofw+GAxaOTk51uOPPx4+dvr0acvn81n//u//noIWptbJkyctSdaOHTssy2p6Funp6damTZvC5/zpT3+yJFllZWWpambK9O/f33r66ad5Ls3OnDljjRo1yiopKbFmzJhhLV682LIs/rt5+OGHrby8vHY/6+nPxrIs60c/+pH1ta99LebnF+Pfyz2yZ6ShoUF79+7VrFmzwsfcbrdmzZqlsrKyFLas+zl27JiqqqqinlVWVpamTZvWI59VTU2NJGnAgAGSpL1798rv90c9nzFjxmjYsGE96vkEAgFt3LhRdXV1ys/P57k0Kyws1Ny5c6Oeg8R/N5L0wQcfaPDgwfrKV76iO+64Q+Xl5ZJ4NpL0H//xH7r66qu1YMECDRw4UJMmTdKvfvWr8OcX49/LPTKMfPbZZwoEAsrOzo46np2draqqqhS1qnsKPQ+eVdPu0UuWLNF1112n8ePHS2p6Pl6vV/369Ys6t6c8n4MHD6pPnz7y+Xy69957tXnzZo0bN67HPxdJ2rhxo/bt26fi4uI2n/X05zNt2jStX79er7/+ulavXq1jx47p61//us6cOdPjn40kffTRR1q9erVGjRqlbdu26b777tM//uM/6te//rWki/Pv5Qti116gOygsLNShQ4eiats93ejRo3XgwAHV1NTopZde0sKFC7Vjx45UNyvlKioqtHjxYpWUlCgjIyPVzel25syZE/79hAkTNG3aNA0fPlwvvviievXqlcKWdQ/BYFBXX321/vmf/1mSNGnSJB06dEhr1qzRwoULU9y6ztEje0Yuu+wypaWltRmdXV1drZycnBS1qnsKPY+e/qwWLVqkV155RW+++aaGDh0aPp6Tk6OGhgadPn066vye8ny8Xq9GjhypKVOmqLi4WHl5eVq5cmWPfy579+7VyZMnNXnyZHk8Hnk8Hu3YsUNPPvmkPB6PsrOze/Tzaa1fv3766le/qqNHj/b4/3YkadCgQRo3blzUsbFjx4ZLWRfj38s9Mox4vV5NmTJF27dvDx8LBoPavn278vPzU9iy7mfEiBHKycmJela1tbXavXt3j3hWlmVp0aJF2rx5s9544w2NGDEi6vMpU6YoPT096vkcOXJE5eXlPeL5tBYMBlVfX9/jn8sNN9yggwcP6sCBA+HX1VdfrTvuuCP8+578fFo7e/asPvzwQw0aNKjH/7cjSdddd12bJQT+53/+R8OHD5d0kf69nOoRtKmyceNGy+fzWevXr7fef/9963vf+57Vr18/q6qqKtVN63Jnzpyx9u/fb+3fv9+SZP3iF7+w9u/fbx0/ftyyLMtatmyZ1a9fP2vr1q3We++9Z82bN88aMWKEde7cuRS3vPPdd999VlZWllVaWmpVVlaGX19++WX4nHvvvdcaNmyY9cYbb1h79uyx8vPzrfz8/BS2ums8+OCD1o4dO6xjx45Z7733nvXggw9aLpfL+sMf/mBZVs99LrFEzqaxrJ79fH74wx9apaWl1rFjx6w//vGP1qxZs6zLLrvMOnnypGVZPfvZWJZlvfPOO5bH47Eee+wx64MPPrB++9vfWr1797aef/758DkX29/LPTaMWJZl/fKXv7SGDRtmeb1ea+rUqdauXbtS3aSUePPNNy1JbV4LFy60LKtpGtlPf/pTKzs72/L5fNYNN9xgHTlyJLWN7iLtPRdJ1nPPPRc+59y5c9Y//MM/WP3797d69+5t/dVf/ZVVWVmZukZ3ke9+97vW8OHDLa/Xa11++eXWDTfcEA4iltVzn0ssrcNIT34+t912mzVo0CDL6/VaQ4YMsW677Tbr6NGj4c978rMJefnll63x48dbPp/PGjNmjLVu3bqozy+2v5ddlmVZqemTAQAA6KFjRgAAQPdBGAEAAClFGAEAAClFGAEAAClFGAEAAClFGAEAAClFGAEAAClFGAEAAClFGAEAAClFGAEAAClFGAEAAClFGAEAACn1/wG0wjOamCRCKQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cube = adc_cube_2[0,0,0,0,:]\n", "print(cube.shape)\n", "Z_fft = abs(fft(cube))\n", "plt.plot(Z_fft[0:64])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 509 }, "id": "oasS_Gch4Xl7", "outputId": "7edf1962-c72b-43ed-db7e-9e05e2ba48d7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(64, 64)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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o0e1FrB06dKl2iUsd3f3Wsezs7PDggULMHHiRGzZsgVjxowBAGzduhUDBw7EunXrtPoXFhbWawGDt7c3AODChQtagVtRUYHLly9rvbeqVatWOHXqFAYPHlyvS7PA7ys2hw4dimbNmuHrr7/WXDrUR3Z2NlJSUhAUFKTTGRo93ngPjRrN/bOx119/HT/++KPW2RkAPPPMM0hNTcXevXurPbewsBAVFRU1jmtubo4hQ4Zgx44dWvfo8vPzkZCQgL59+2pWw0VERODUqVPYtm1btXHqOnOxtbXV1FGT5557DhkZGXj11Vc19wzva9q0KYKDg7W2Jk2a1Hos4PefVYsWLbB06VKtef6xxqSkJFy9erXOsWrTvXt3ODs7Y+3atVo/202bNmkuS973zDPP4OrVq1i7dm21ce7du4fi4uI6j5WXl4chQ4bAzMwMe/furfXSZV0KCgowduxYVFZW4l//+pfez6fHD8/QqNH4+vqid+/e2LFjBwBUC7RXX30VO3fuxN/+9jdMmDABAQEBKC4uxunTp7F161Zcvny51jORt956C/v27UPfvn3x8ssvw8LCAmvWrEFpaSmWLVumdYytW7di9OjRmDRpEgICAlBQUICdO3di9erV6NKlS43jBwQEAACmT5+O0NDQaqE1bNgwODs7IykpCWFhYWjWrFmDflaWlpaYMWMGXn31VezZswdDhw7F3/72N7z55puYOHEievfujdOnT2PTpk1aC2H0YWVlhYULF2LatGkYNGgQnnnmGVy+fBkbNmxAq1attM7EnnvuOWzZsgUvvvgiDhw4gD59+qCyshJnz57Fli1bsHfv3jrvQQ0dOhSXLl3CnDlzcOTIEa1PQHFzc0NISIhW/3PnzuGzzz6DEAJFRUU4deoUkpKScOfOHbz33nsYOnRoveZMjxmjrrEk6cXHxwsAomfPnjXuv337toiNjRV+fn7CyspKuLi4iN69e4v/+7//E2VlZZp+qOGTQtLT00VoaKiws7MTNjY2YuDAgeK7776rdoxbt26JqVOnir/85S/CyspKtGjRQkRFRYmbN28KIWpetl9RUSGmTZsmXF1dhUKhqHFZ98svvywAiISEBJ1/HrV9UogQQqjVaqFSqTTL50tKSsTs2bOFh4eHsLa2Fn369BGpqamif//+Wkvs7y/bT0pK0hqvpnkJIURcXJzw9vYWSqVS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SYGBRkREUmCgERGRFBhoREQkBQYaERFJgYFGRERSYKAREZEUGGhERCQFBhoREUmBgUZERFJgoBERkRQYaEREJAUGGhERSYGBRkREUmCgERGRFBhoREQkBQYaERFJgYFGRERSYKAREZEUGGhERCQFBhoREUmBgUZERFJgoBERkRQYaEREJAUGGhERSYGBRkREUmCgERGRFBhoREQkBQYaERFJgYFGRERSYKAREZEUGGhERCQFBhoREUmBgUZERFIweqBdvXoV48aNg7OzM6ytrdGpUyecPHlSs18Igddffx0eHh6wtrZGcHAwzp8/b8SKiYjIFBk10H777Tf06dMHlpaW2L17NzIyMvDuu++iadOmmj7Lli1DXFwcVq9ejePHj8PW1hahoaEoKSkxYuVERGRqLIx58KVLl8LT0xPr16/XtPn6+mr+LITAihUrMG/ePIwcORIA8Mknn8DNzQ3bt2/HmDFjHnrNRERkmox6hrZz5050794do0ePRrNmzdC1a1esXbtWsz8rKwt5eXkIDg7WtKlUKgQGBiI1NdUYJRMRkYkyaqBdunQJq1atQuvWrbF371689NJLmD59OjZu3AgAyMvLAwC4ublpPc/NzU2z749KS0tRVFSktRERkfyMesmxqqoK3bt3x6JFiwAAXbt2xZkzZ7B69WpERUXVa8zFixfjjTfeMGSZRET0CDDqGZqHhwfat2+v1ebv74/s7GwAgLu7OwAgPz9fq09+fr5m3x/FxsZCrVZrtpycnEaonIiITI1RA61Pnz7IzMzUajt37hy8vb0B/L5AxN3dHcnJyZr9RUVFOH78OIKCgmocU6lUwsHBQWsjIiL5GfWSY0xMDHr37o1FixbhmWeewffff48PP/wQH374IQBAoVBg5syZeOutt9C6dWv4+vpi/vz5aN68OcLDw41ZOhERmRijBlqPHj2wbds2xMbG4s0334Svry9WrFiByMhITZ85c+aguLgYU6ZMQWFhIfr27Ys9e/agSZMmRqyciIhMjUIIIYxdRGMqKiqCSqXCAIyEhcLS2OUQEZGeKkQ5DmIH1Gp1nbeRjP7RV0RERIbAQCMiIikw0IiISAoMNCIikgIDjYiIpMBAIyIiKTDQiIhICgw0IiKSAgONiIikwEAjIiIpMNCIiEgKDDQiIpICA42IiKRg1K+PeRjuf5lABcoBqb9XgIhI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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cube = adc_cube_2[0,:,0,0,:]\n", "print(cube.shape)\n", "Z_fft2 = abs(fft2(cube))\n", "Data_fft2 = Z_fft2 # [0:n_chirps//2,0:n_samples//2]\n", "\n", "plt.xlabel(\"Range (m)\")\n", "plt.ylabel(\"Velocity (m/s)\")\n", "plt.title('Velocity-Range 2D FFT')\n", "plt.imshow(Data_fft2)" ] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.9" } }, "nbformat": 4, "nbformat_minor": 4 }