{ "cells": [ { "cell_type": "markdown", "id": "600b88c6-b549-4115-ac69-4b7e5c5be345", "metadata": {}, "source": [ "# TDM MIMO\n", "\n", "## TDM MIMO ULA" ] }, { "cell_type": "markdown", "id": "1d695e52-2bbe-44c9-975b-fa6183e8e8a4", "metadata": {}, "source": [ "## Setup" ] }, { "cell_type": "code", "execution_count": 14, "id": "42af92ac-51a6-480b-9ba1-eee3386cf182", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "running from git folder, using local path (latest) mmWrt code c:\\git\\mmWrt\n", "version: 0.0.7\n", "2024-10-23 14:12:01.437138\n" ] } ], "source": [ "# Install a pip package in the current Jupyter kernel\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", "\n", "from os.path import abspath, join, pardir\n", "import sys\n", "from numpy.fft import fft, fftshift\n", "from scipy.signal import find_peaks\n", "import matplotlib.pyplot as plt\n", "from numpy import arange, cos, sin, pi, zeros\n", "\n", "from mmWrt.Scene import Antenna, Medium, Radar, Receiver, Target, Transmitter\n", "from mmWrt.Raytracing import rt_points\n", "from mmWrt import __version__\n", "print(\"version:\", __version__)\n", "\n", "print(datetime.datetime.now())" ] }, { "cell_type": "code", "execution_count": 15, "id": "e6bcf55c-e454-478a-a662-d2f2100e8059", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "??1 (64, 64)\n", "??2 (64, 64)\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f0 = 62e9\n", "# Number of ADC samples\n", "NA = 64\n", "# Number of TX channels\n", "NT = 8\n", "# Number of RX channels\n", "NR = 8\n", "\n", "void = Medium()\n", "c = void.v\n", "lambda0 = c/f0\n", "_fs = 4e3\n", "_k = 70e8\n", "TXs = [Antenna(x=NR*lambda0/2*i) for i in range(NT)]\n", "RXs = [Antenna(x=lambda0/2*i) for i in range(NR)]\n", "\n", "radar = Radar(transmitter=Transmitter(bw=3.5e9, slope=_k,\n", " antennas=TXs),\n", " receiver=Receiver(fs=_fs, max_adc_buffer_size=2048,\n", " n_adc=NA,\n", " antennas=RXs),\n", " debug=False)\n", "r1, theta1 = 10.1, 0\n", "x1, y1 = r1*cos(theta1), r1*sin(theta1)\n", "r2, theta2 = 20.1, pi/2\n", "x2, y2 = r2*cos(theta2), r2*sin(theta2)\n", "r3, theta3 = 30.1, pi\n", "x3, y3 = r3*cos(theta3), r3*sin(theta3)\n", "\n", "target1 = Target(x1, y1, 0) # 0 degrees on x-axis <=> -pi/2 vs bore sight\n", "target2 = Target(x2, y2, 0) # pi/2 degrees vs x-ax <=> 0 degree vs bore sight\n", "target3 = Target(x3, y3, 0) # 180 degrees on x-axis <=> pi/2 vs boresight\n", "targets = [target1, target2, target3]\n", "\n", "bb = rt_points(radar, targets,\n", " debug=False)\n", "cube = bb[\"adc_cube\"]\n", "# bb[frame_i, chirp_i, tx_i, rx_i, adc_i]\n", "\n", "# generate virtual antennas\n", "virtual_cube = zeros(( NT * NR, NA))\n", "print(\"??1\", virtual_cube.shape)\n", "for tx_idx in range(NT):\n", " for rx_idx in range(NR):\n", " virtual_cube[tx_idx*NT+ rx_idx,:] = cube[:, :, tx_idx, rx_idx, :]\n", "\n", "print(\"??2\", virtual_cube.shape)\n", "\n", "fast_time_axis = 1\n", "RX_antennas_axis = 0\n", "# first compute the range FFT\n", "R_fft = fft(virtual_cube, axis=fast_time_axis)\n", "# then compute the AoA FFT\n", "A_FFT = fft(R_fft, axis=RX_antennas_axis)\n", "\n", "# for Range vs AoA, display magnitude\n", "# and need to fftshift to have the negative frequencies moved around 0\n", "Z_fft = abs(fftshift(A_FFT[:,:], axes=0))\n", "plt.xlabel(\"Range\")\n", "plt.ylabel(\"AoA\")\n", "plt.title('AoA-Range 2D FFT')\n", "plt.imshow(Z_fft[:,:NA//2])" ] }, { "cell_type": "code", "execution_count": 5, "id": "4ab9da16-37f3-489f-83e0-967399189761", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 1, 8, 8, 64)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R_fft.shape" ] } ], "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.11.1" } }, "nbformat": 4, "nbformat_minor": 5 }