{ "cells": [ { "cell_type": "markdown", "id": "33a79c4a", "metadata": {}, "source": [ "# FMCW Radar Resolution\n", "\n", "[![](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/matt-chv/mmWrt/blob/main/docs/Resolution.ipynb)" ] }, { "cell_type": "markdown", "id": "916a046d", "metadata": {}, "source": [ "## The problem\n", "\n", "Definition of resolution can vary in industries. For radar systems and most contactless distance measurements systems, resolution refers to the ability to resolve two distincts objects apart from each other.\n", "\n", "\n", "## The solution\n", "\n", "Experimenting with FFT to distinguish two targets apart from each other.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "0a0a3b6f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "running from git folder, using local path (latest) mmWrt code c:\\git\\mmWrt\n", "2026-07-17 18:53:18.951229\n" ] } ], "source": [ "# Install a pip package in the current Jupyter kernel\n", "# Recommended when running from Google Colab or similar environment\n", "%load_ext autoreload\n", "%autoreload 2\n", "import sys\n", "from os.path import abspath, basename, join, pardir\n", "import datetime\n", "\n", "# hack to handle if running from git cloned folder or stand alone (like Google Colab)\n", "cw = basename(abspath(join(\".\")))\n", "dp = abspath(join(\".\",pardir))\n", "if cw==\"docs\" and basename(dp) == \"mmWrt\":\n", " # running from cloned folder\n", " print(\"running from git folder, using local path (latest) mmWrt code\", dp)\n", " sys.path.insert(0, dp)\n", "else:\n", " print(\"running standalone, need to ensure mmWrt is installed\")\n", " !{sys.executable} -m pip install mmWrt\n", "print(datetime.datetime.now())\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "ba882e64-f25a-4cef-b34d-484f93cffa7e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0.14.dev1+g243a05bf3.d20260717\n" ] } ], "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 arange, where, expand_dims\n", "\n", "# uncomment below if the notebook is launched from project's root folder\n", "# dp = abspath(join(\".\",pardir))\n", "# sys.path.insert(0, dp)\n", "from mmWrt import __version__ as mmWrt_ver\n", "print(mmWrt_ver)\n", "\n", "from mmWrt.Raytracing import rt_points # noqa: E402\n", "from mmWrt.Scene import Radar, Transmitter, Receiver, Scatterer # noqa: E402\n", "from mmWrt import RadarSignalProcessing as rsp # noqa: E402\n" ] }, { "cell_type": "markdown", "id": "9c920e38", "metadata": {}, "source": [ "### Two targets which can be separated" ] }, { "cell_type": "code", "execution_count": 3, "id": "50afe306", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "synthetic targets [array([3., 0., 0.]), array([4., 0., 0.])]\n", "found targets [array([3.01339286, 0. , 0. ]), array([4.01785714, 0. , 0. ])]\n", "error is 0.031250000000000444\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGzCAYAAAASZnxRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAelJJREFUeJztnQecE9Xaxt/tjd5BOqKACAICUlQUFFFRxIq9XP3sIlbuVbGjXgvXXq71KtgBQcWCCBaQJk0FpKj0JuzCLrtsme/3nNmTnWSTTU9mkuevQ8rOTE7OTOY887aTYhiGIYQQQgghcSA1Hh9KCCGEEAIoRAghhBASNyhECCGEEBI3KEQIIYQQEjcoRAghhBASNyhECCGEEBI3KEQIIYQQEjcoRAghhBASNyhECCGEEBI3KEQIIUnFH3/8ISkpKfLGG2/UuN63336r1sMj8c29996r+mnnzp1+u6lt27Zy6aWXsjuJGxQipEZwgQlkifXF+uGHH5YpU6aIU3Bae+3A888/71csEEKcT3q8G0Dszf/+9z+312+99ZZ89dVX1d7v3LlzzAf2s846S0aMGCFOwGnttYsQadSoUdzuoI855hjZv3+/ZGZmxuXzE5FVq1ZJairvf4k7FCKkRi688EK31/PmzVNCxPP9RKCwsFDy8vLi3YyEBHNrFhcXS05OjjgFDJjZ2dlR/YyKigo5cOBA1D/HLmRlZcW7CcSGUJqSsBg5cqT07NnT7b3hw4crd80nn3zieu+nn35S733++eeu99atWydnn322NGjQQHJzc+Woo46STz/91O9nYj8QDW+++abLNaTvmv/880+59tpr5dBDD1WDXsOGDdVnIC7ACkz+2G727Nlq/SZNmkjLli1df3/uueekffv2ah99+vSR7777TgYNGqQWKyUlJTJu3Dg5+OCD1UW2VatWcvvtt6v3A2nv3r17ZfTo0cp3ju3RjhNOOEEWL15cYx8Euh36/aSTTpK6deuqPj722GPlhx9+8OrjX7lypZxzzjlSp04d1W833XSTEg9WXn/9dTn++OPV5+Fzu3TpIi+88EK19qFdp556qnzxxRdy5JFHqn586aWXAt4Htv/ll1/U8dF9Zu37PXv2qO+P/sY+0P+PPvqoGtitYD30Nb5/vXr15JJLLlHvBYK3GBG0oWvXrvLrr7/Kcccdp/r0oIMOksceeyygfWJ/119/vbzzzjty2GGHqbbPmDFD/e3xxx+X/v37q75Hf/Xq1Us+/PBDn/uAqw9twT6wL70fz++A/ofQ6dChgzoG+nh78vbbb6vPxGfjN3neeefJhg0bJFAQI+Lv/PGMEdG/Q5yTY8aMkcaNG6ubgTPOOEN27Njhtu3ChQtl6NChykqGNrZr104uv/zygNtH7AstIiQsjj76aJk6daoUFBSoCxDufHFRwd0kBu/TTjtNrYfneG/AgAHq9bZt29RFt6ioSG688UZ14cJAjfVx8cWFyBdwC/3jH/9QAuGqq65S7+EiCxYsWCA//vijuohCWECAYJDDAILBAwOHFYgQXPzuueceJRYA1seFHt/t5ptvVvuAS6V+/fpuYgWDHtr7/fffq3bAPbV8+XJ56qmnZPXq1a6YkJrae/XVV6vvi8/DgLxr1y61v99++62awLMSyHbffPONDBs2TA0uEEvofy0CcDzQHisYRDBQjB8/Xlm+nn76adm9e7dyx2nQNxj08L3T09Nl2rRpqg/RF9ddd101M/yoUaPk//7v/+TKK69U4jDQfUyYMEFuuOEGqVWrlvzrX/9S7zVt2lQ94pyBoNq0aZPad+vWrdUxHzt2rGzZskVtC3Aunn766apf0F84PpMnT1ZiJBzQJxB3EOHoMxyHO+64Qw4//HDV3/7AcXn//ffVscOgij4H//nPf1SfXHDBBcpK8u677yoRPX36dDnllFPc9oHv9PHHH6t+q127tjpWZ555pvz111/qtwR+/vln1c7mzZvLfffdJ+Xl5XL//fer892Thx56SO6++271fXCuQgQ888wzyj2F/UDE+SOQ88cXONb4feE8xe8NxxD9895776m/b9++XU488UTV9jvvvFO1B+uhD0gCYBASBNddd51hPW0WLFigXn/22Wfq9bJly9Trs88+2+jbt69rvdNOO83o0aOH6/Xo0aPVet99953rvb179xrt2rUz2rZta5SXl9fYjry8POOSSy6p9n5RUVG19+bOnas+66233nK99/rrr6v3Bg4caJSVlbneLykpMRo2bGj07t3bKC0tdb3/xhtvqPWPPfZY13v/+9//jNTUVLfvAF588UW17g8//OC3vXXr1lV9Giz+tquoqDA6duxoDB06VD239g/6+IQTTnC9N27cONVeHCMr1157rXp/6dKlbtt7gs9o376923tt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "c = 3e8\n", "\n", "debug_ON = False\n", "test = 0\n", "bw = 1e9\n", "chirp_slope0 = 70e8\n", "chirp_end_time0 = bw/chirp_slope0\n", "fs = 1e3\n", "NA = 64\n", "radar = Radar(transmitter=Transmitter(chirp_end_time=chirp_end_time0, \n", " chirp_slope=chirp_slope0, chirp_count=64),\n", " receiver=Receiver(adc_sample_rate=fs, adc_sample_count=NA,\n", " debug=debug_ON), debug=debug_ON)\n", "\n", "target1 = Scatterer(3)\n", "target2 = Scatterer(4) #, 0, 0, xt=lambda t: 2.*t+3.)\n", "\n", "scatterers = [target1, target2]\n", "\n", "bb = rt_points([radar], scatterers, \n", " radar, debug=debug_ON)\n", "\n", "Distances, range_profile = rsp.range_fft(bb[\"adc_cube\"][0, 0, 0, :], bb)\n", "mag_r = abs(range_profile)\n", "ca_cfar = rsp.cfar_ca(mag_r, train_cell_count=10,\n", " guard_cell_count=1, pfa=1e-1)\n", "mag_c = abs(ca_cfar)\n", "# little hack to remove small FFT ripples : mag_r> 5\n", "target_filter = ((mag_r > mag_c) & (mag_r > 5))\n", "\n", "index_peaks = where(target_filter)[0]\n", "grouped_peaks = rsp.peak_grouping_1d(index_peaks, mag_r)\n", "\n", "found_scatterer = [Scatterer(Distances[i]) for i in grouped_peaks]\n", "error = rsp.error([target1, target2], found_scatterer)\n", "print(\"synthetic targets\", [t.pos_t(t=0) for t in scatterers])\n", "print(\"found targets\", [t.pos_t(t=0) for t in found_scatterer])\n", "print(\"error is\", error)\n", "\n", "# 2D representation of the FFT and CFAR\n", "# plot on X,Y axis the FFT and CFAR\n", "figure, axes = plt.subplots()\n", "plt.plot(Distances, mag_r, '-o')\n", "plt.plot(Distances, mag_c, '-r')\n", "plt.title(\"Two targets separated in range bins\")\n", "\n", "# Add illustration of target separation\n", "circle1_xy = (target1.x, mag_r[grouped_peaks[0]])\n", "circle_1 = plt.Circle( circle1_xy, 1, fill=False)\n", "circle2_xy = (target2.x, mag_r[grouped_peaks[1]])\n", "circle_2 = plt.Circle( circle2_xy, 1, fill=False)\n", "\n", "axes.add_artist(circle_1)\n", "axes.add_artist(circle_2)\n", "plt.annotate(\"two targets which *CAN* be resolved\", xy=circle1_xy, xytext=(8,0.9*NA//2),\n", " horizontalalignment=\"center\",\n", " # Custom arrow\n", " arrowprops=dict(arrowstyle='->',lw=1)\n", " )\n", "\n", "plt.annotate(\"\", xy=circle2_xy,xytext=(8,0.9*NA//2),\n", " horizontalalignment=\"center\",\n", " # Custom arrow\n", " arrowprops=dict(arrowstyle='->',lw=1)\n", " )\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "8769a4e9", "metadata": {}, "source": [ "### Two targets which cannot be separated" ] }, { "cell_type": "code", "execution_count": 4, "id": "597f94a1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "radar.range_resolution 0.33482142857142855\n", "(2,)\n", "synthetic targets [array([3., 0., 0.]), array([3.4, 0. , 0. ])]\n", "found targets [array([3.01339286, 0. , 0. ]), array([4.01785714, 0. , 0. ])]\n", "error2 is 0.6312500000000005\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "c = 3e8\n", "\n", "target3 = Scatterer(3)\n", "target4 = Scatterer(3.4) #, 0, 0, vx=lambda t: 2*t+0)\n", "print(\"radar.range_resolution\", radar.range_resolution)\n", "scatterers2 = [target3, target4]\n", "\n", "bb2 = rt_points([radar], scatterers2, \n", " radar, debug=debug_ON)\n", "\n", "Distances, range_profile = rsp.range_fft(bb2[\"adc_cube\"][0, 0, 0, :], bb)\n", "mag_r = abs(range_profile)\n", "ca_cfar = rsp.cfar_ca(mag_r, train_cell_count=10,\n", " guard_cell_count=1, pfa=1e-1)\n", "mag_c = abs(ca_cfar)\n", "# little hack to remove small FFT ripples : mag_r> 5\n", "# target_filter = ((mag_r > mag_c) & (mag_r > 5))\n", "\n", "index_peak = where(target_filter)[0]\n", "print(index_peaks.shape)\n", "grouping = False\n", "if grouping:\n", " grouped_peaks = rsp.peak_grouping_1d(index_peaks)\n", " found_targets = [Scatterer(Distances[i]) for i in grouped_peaks]\n", "else:\n", " found_targets = [Scatterer(Distances[i]) for i in index_peaks]\n", "error2 = rsp.error([target3, target4], found_targets)\n", "print(\"synthetic targets\", [t.pos_t(t=0) for t in scatterers2])\n", "print(\"found targets\", [t.pos_t(t=0) for t in found_targets])\n", "print(\"error2 is\", error2)\n", "\n", "# 2D representation of the FFT and CFAR\n", "# plot on X,Y axis the FFT and CFAR\n", "\n", "figure, axes = plt.subplots()\n", "m, M = 100000-20000, 100000+20000\n", "m, M = 0, -1\n", "R = range(len(mag_r))\n", "plt.plot(R[m:M], mag_r[m:M], 'o-')\n", "plt.plot(R[m:M], mag_c[m:M], 'r-')\n", "plt.title(\"Two targets in adjacent range bins\")\n", "\n", "# Add illustration of spectral leakage\n", "circle1_xy = (index_peak[0], mag_r[index_peak[0]]-0.5)\n", "circle_1 = plt.Circle( circle1_xy, 2, fill=False)\n", "circle2_xy = (index_peak[0]+1, mag_r[index_peak[0]]-1.5)\n", "circle_2 = plt.Circle( circle2_xy, 2, fill=False)\n", "\n", "axes.add_artist(circle_1)\n", "axes.add_artist(circle_2)\n", "plt.annotate(\"Targets which *CAN-NOT* be resolved\", xy=circle1_xy,\n", " xytext=(16,0.8*NA//2),\n", " horizontalalignment=\"center\",\n", " # Custom arrow\n", " arrowprops=dict(arrowstyle='->',lw=1)\n", " )\n", "\n", "plt.annotate(\" \", xy=circle2_xy,\n", " xytext=(16,0.8*NA//2),\n", " horizontalalignment=\"center\",\n", " # Custom arrow\n", " arrowprops=dict(arrowstyle='->',lw=1)\n", " )\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "id": "2e892d39-3f60-4cdf-8b4b-91f78055c206", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0.14.dev1+g243a05bf3.d20260717\n" ] } ], "source": [ "print(mmWrt_ver)\n", "assert error==0.031250000000000444\n", "assert error2 == 0.6312500000000005" ] } ], "metadata": { "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": 5 }