{ "cells": [ { "cell_type": "markdown", "id": "ad3f3ea1-9c10-4d35-bfd8-8206e7a18a82", "metadata": {}, "source": [ "# Polyphase Filter Bank with Sine Functions\n", "\n", "This example shows the result of standard polyphase filter banks on channelizing a set of sine signal." ] }, { "cell_type": "code", "execution_count": 2, "id": "c0fde4f0-ecef-4c92-bc51-bc628b305fe1", "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "import numpy as np\n", "import scipy.signal as sig\n", "from mitarspysigproc import (\n", " pfb_decompose,\n", " pfb_reconstruct,\n", " kaiser_coeffs,\n", " kaiser_syn_coeffs,\n", ")\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 3, "id": "ef6172d6-6006-4cc9-b3c9-c9ea9c8b786a", "metadata": {}, "outputs": [], "source": [ "def create_sin(t_len, fs, bw, nchans, pad):\n", " \"\"\"Creates a signal with multiple cosines\n", "\n", " Parameters\n", " ----------\n", " t_len : float\n", " Length of chirp in seconds\n", " fs : float\n", " Sampling frequency in Hz\n", " bw : float\n", " Bandwidth of chirp\n", " nzeros : tuple\n", " Number of zeros to pad in the begining and end of the array.\n", " nchans : int\n", " Number of channels for the PFB\n", " nslice : int\n", " Number of time samples from the pfb\n", "\n", " Returns\n", " -------\n", " tout : ndarray\n", " The time vector for the created signal\n", " xout : ndarray\n", " Created signal\n", " \"\"\"\n", "\n", " s_list = np.arange(int(nchans * bw / fs))\n", "\n", " t = np.linspace(0, t_len, t_len * fs)\n", " flist = [np.cos(2 * np.pi * (i / nchans) * fs * t) for i in s_list]\n", " x = sum(flist)\n", "\n", " xout = np.concatenate((pad[0], x, pad[1]), axis=0)\n", " tp1 = -1 * np.arange(0, len(pad[0]), dtype=float)[::-1] / fs\n", " tp2 = np.arange(0, len(pad[1]), dtype=float) / fs + t_len\n", " tout = np.concatenate((tp1, t, tp2), axis=0)\n", "\n", " return tout, xout\n", "\n", "\n", "def runsintest(t_len, fs, bw, nzeros, nchans):\n", " \"\"\"Creates a superposition of sin waves and runs the standard PFB analysis and reconstruction\n", "\n", " Parameters\n", " ----------\n", " t_len : float\n", " Length of chirp in seconds\n", " fs : float\n", " Sampling frequency in Hz\n", " bw : float\n", " Bandwidth of chirp\n", " nzeros : int\n", " Number of zeros to pad\n", " nchans : int\n", " Number of channels for the PFB\n", "\n", " Returns\n", " -------\n", " x_rec : ndarray\n", " Reconstructed signal\n", " tin : ndarray\n", " The time vector for the input signal\n", " x : ndarray\n", " Input signal\n", " x_pfb : ndarray\n", " The ouptut data\n", " \"\"\"\n", " pad = [np.zeros(nzeros), np.zeros(nzeros)]\n", " t, x = create_sin(t_len, fs, bw, nchans, pad)\n", " coeffs = kaiser_coeffs(nchans, pow2=False)\n", " mask = np.ones(nchans, dtype=bool)\n", " xout = pfb_decompose(x, nchans, coeffs, mask)\n", " fillmethod = \"\"\n", " fillparams = [0, 0]\n", " syn_coeffs = kaiser_syn_coeffs(nchans, pow2=False)\n", " x_rec = pfb_reconstruct(\n", " xout, nchans, syn_coeffs, mask, fillmethod, fillparams=[], realout=True\n", " )\n", " return x_rec, t, x, xout\n", "\n", "\n", "def nexpow2(x):\n", " \"\"\"Returns the next power of two.\n", "\n", " Parameters\n", " ----------\n", " x : int\n", " Inital number.\n", "\n", " Returns\n", " -------\n", " int\n", " The next power of two of x.\n", " \"\"\"\n", "\n", " return int(np.power(2, np.ceil(np.log2(x))))\n", "\n", "\n", "def plotdata(inchirp, outchirp, tin, tout,g_del=0):\n", " \"\"\"Plot the data and return the figure.\n", "\n", " Parameters\n", " ----------\n", " x : ndarray\n", " Input signal\n", " x_rec : ndarray\n", " Reconstructed signal\n", " tin : ndarray\n", " The time vector for the input signal\n", " tout : ndarray\n", " The time vector for the output signal\n", "\n", " Returns\n", " -------\n", " fig : matplotlib.fig\n", " The matplotlib fig for plotting or saving.\n", "\n", " \"\"\"\n", "\n", " fig, ax = plt.subplots(2, 1, figsize=(10, 5))\n", "\n", " inlen = inchirp.shape[0]\n", " outlen = outchirp.shape[0]\n", " tau = tin[1] - tin[0]\n", "\n", " ax[0].plot(tin, inchirp, label=\"Input\")\n", " ax[0].plot(tout, np.roll(outchirp,-g_del), label=\"Output\")\n", "\n", " ax[0].set_xlabel(\"Time in Seconds\")\n", " ax[0].set_ylabel(\"Amplitude\")\n", " ax[0].set_title(\"Time Domain\")\n", " ax[0].grid(True)\n", "\n", " nfft_in = nexpow2(inlen)\n", " nfft_out = nexpow2(outlen)\n", "\n", " in_freq = np.fft.fftshift(np.fft.fftfreq(nfft_in, d=tau))\n", " out_freq = np.fft.fftshift(np.fft.fftfreq(nfft_out, d=tau))\n", "\n", " spec_in = np.abs(np.fft.fftshift(np.fft.fft(inchirp, n=nfft_in))) ** 2\n", " spec_out = np.abs(np.fft.fftshift(np.fft.fft(outchirp[:, 0], n=nfft_out))) ** 2\n", "\n", " spec_in_log = 10 * np.log10(spec_in)\n", " spec_out_log = 10 * np.log10(spec_out)\n", "\n", " ax[1].plot(in_freq, spec_in_log, label=\"Input\")\n", " ax[1].plot(out_freq, spec_out_log, label=\"Output\")\n", "\n", " ax[1].set_xlabel(\"Frequency in Hz\")\n", " ax[1].set_ylabel(\"Amp dB\")\n", " ax[1].set_title(\"Frequency Content\")\n", " ax[1].grid(True)\n", " ax[1].set_ylim([0, 90])\n", "\n", " fig.tight_layout()\n", " return fig\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "fe6f845a-2bed-4ec3-b1f0-deff7e3999cd", "metadata": {}, "outputs": [ { "data": { "image/png": "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M148RkRERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTUSqEVonQERERESkMhbdRKQaAUnrFIiIiIiIVMWim4iIiIiIiEghLLqJSDUSB5gTERERUTXDopuIiIiIiIhIISy6iYiIiIiIiBTCopuIiIiIiIhIISy6iYiIiIiIiBTCopuIiIiIiIhIISy6iYiIiIiIiBTCopuIiIiIiIhIISy6iYiIiIiIiBTCopuIiIiIiIhIISy6iYiIiIiIiBTCopuIiIiIiIhIISy6iUg1ApLWKRARERERqYpFNxGphkU3EREREVU3LLqJiIiIiIiIFMKim4iIiIiIiEghLLqJiIiIiIiIFMKim4iIiIiIiEghLLqJSDUShNYpEBERERGpikU3ERERERERkUJYdBMREREREREphEU3ERERERERkUJYdBMREREREREppEoV3bNnz4YkSZg8ebLWqRARERERERFVSLGi+/r16/jkk08wbdo0pKWlAQD27t2LS5cu2dXfrl27sHTpUrRq1UrONImIiIiIiIgUo0jRffDgQTRu3Bhz5szBe++9h+vXrwMA1q5di2nTptnc340bNzBixAgsW7YMNWvWlDlbIiIiIiIiImW4KdHplClTMHr0aMydOxe+vr7m7f369cPw4cNt7m/cuHG49957cc899+Ctt94qt21+fj7y8/PNtzMzMwEABoMBBoPB5thqKc7NkXMkIiIiIsfAz4zq4ed0Kou1x4QiRfeuXbvw8ccfl9heu3ZtpKSk2NTXqlWrsHfvXuzatcuq9rNnz8aMGTNKbI+Pj4eXl5dNsbWQkJCgdQpEihGQtE6BiIjIKaxfv17rFKodfk6n2+Xk5FjVTpGi28PDw3yG+VYnTpxArVq1rO7nwoULmDRpEuLj4+Hh4WHVPtOmTcOUKVPMtzMzMxEREYHY2Fj4+flZHVttBoMBCQkJ6N27N3Q6ndbpECli3e6lWqdARETkFPr37691CtUGP6dTWUqreUujSNE9ePBgzJw5E99++y0AQJIknD9/Hi+//DLuv/9+q/vZs2cPUlNTER0dbd5mNBqxZcsWLFq0CPn5+XB1dbXYR6/XQ6/Xl+hLp9NViT+SqpInEREREWmHnxfVx8/pdDtrjwdFJlJ77733cOXKFQQHByM3Nxfdu3fHHXfcAV9fX7z99ttW99OrVy8cOnQI+/fvN//ExMRgxIgR2L9/f4mCm4iIiIiIiMiRKHKm28/PD1u3bsUff/yBvXv3wmQyoV27drjnnnts6sfX1xdRUVEW27y9vREYGFhiOxEREREREZGjUaToLnb33Xfj7rvvVjIEERERERERkcOSrej+4IMPrG47ceJEu+Ns2rTJ7n2JiIiIiIiI1CRb0f3+++9b3L5y5QpycnJQo0YNAMD169fh5eWF4ODgShXdRERERERERFWFbBOpnTlzxvzz9ttvo02bNjh27BjS0tKQlpaGY8eOoV27dnjzzTflCklERERERETk0BSZvfy1117DwoUL0aRJE/O2Jk2a4P3338err76qREgiqgIkrRMgIiIiIlKZIkV3cnIyDAZDie1GoxGXL19WIiQRERERERGRw1Gk6O7Vqxeeeuop7N69G0IIAMDu3bvx9NNP27xsGBEREREREVFVpUjR/emnn6J27dro0KEDPDw8oNfr0bFjR4SFheGTTz5RIiQRERERERGRw1Fkne5atWph/fr1OHnyJI4fPw4hBJo1a4bGjRsrEY6IiIiIiIjIISlSdBdr3LgxC20iIiIiIiKqthQpup944oly7//000+VCEtERERERETkUBQputPT0y1uGwwGHD58GNevX8fdd9+tREgiqgKE1gkQEREREalMkaJ77dq1JbaZTCaMHTsWDRo0UCIkERERERERkcNRZPbyUgO5uOC5557D+++/r1ZIIiIiIiIiIk2pVnQDwOnTp1FYWKhmSCIiIiIiIiLNKDK8fMqUKRa3hRBITk7Gzz//jMcee0yJkEREREREREQOR5Gie9++fRa3XVxcUKtWLcybN6/Cmc2JiIiIiIiInIUiRffGjRuV6JaIqjhJ6wSIiIiIiFSmyDXdd999N65fv15ie2ZmJpcMIyIiIiIiompDkaJ706ZNKCgoKLE9Ly8Pf/75pxIhiYiIiIiIiByOrMPLDx48aP796NGjSElJMd82Go3YsGEDateuLWdIIiIiIiIiIocla9Hdpk0bSJIESZJKHUbu6emJhQsXyhmSiIiIiIiIyGHJWnSfOXMGQgg0aNAAO3fuRK1atcz3ubu7Izg4GK6urnKGJKIqRILQOgUiIiIiIlXJWnTXq1cPAGAymeTsloiIiIiIiKhKkq3oXrduHfr16wedTod169aV23bQoEFyhSUiIiIiIiJyWLIV3UOGDEFKSgqCg4MxZMiQMttJkgSj0ShXWCIiIiIiIiKHJVvRfeuQcg4vJ6LSCEhap0BEREREpCpF1ukmIiIiIiIiIhnPdH/wwQdWt504caJcYYmIiIiIiIgclmxF9/vvv29VO0mSWHQTERERERFRtSBb0X3mzBm5uiIiIiIiIiJyCopf0y2EgBBC6TBEREREREREDkexonv58uWIioqCh4cHPDw8EBUVhU8++USpcEREREREREQOR7bh5bd67bXX8P7772PChAno3LkzAGDbtm147rnncPbsWbz11ltKhCUiIiIiIiJyKIoU3UuWLMGyZcvwyCOPmLcNGjQIrVq1woQJE1h0ExERERERUbWgyPByo9GImJiYEtujo6NRWFhodT+zZ89G+/bt4evri+DgYAwZMgQnTpyQM1UiIiIiIiIixShSdI8cORJLliwpsX3p0qUYMWKE1f1s3rwZ48aNw/bt25GQkIDCwkLExsYiOztbznSJiIiIiIiIFKHI8HKgaCK1+Ph4dOrUCQCwfft2XLhwAaNGjcKUKVPM7ebPn19mHxs2bLC4vWLFCgQHB2PPnj246667lEmciIiIiIiISCaKFN2HDx9Gu3btAACnT58GANSqVQu1atXC4cOHze0kSbKp34yMDABAQEBAmW3y8/ORn59vvp2ZmQkAMBgMMBgMNsVTU3FujpwjERERETkGfmZUDz+nU1msPSYkUUUW0RZCYPDgwUhPT8eff/5ZZru4uDjMmDGjxPaVK1fCy8tLyRSJqALG3Usx1HWr1mkQERFVeT+0/ULrFIiqvZycHAwfPhwZGRnw8/Mrs12VKbrHjRuHn3/+GVu3bkWdOnXKbFfame6IiAhcvXq13CdCawaDAQkJCejduzd0Op3W6RAp4seZQ1h0ExERycAw/arWKVQb/JxOZcnMzERQUFCFRbciw8vz8vKwcOFCbNy4EampqTCZTBb3792716b+JkyYgHXr1mHLli3lFtwAoNfrodfrS2zX6XRV4o+kquRJRERERNrh50X18XM63c7a40GRovuJJ55AQkICHnjgAXTo0MHma7eLCSEwYcIErF27Fps2bUJkZKTMmRIREREREREpR5Gi++eff8b69evRtWvXSvUzbtw4rFy5Ej/88AN8fX2RkpICAPD394enp6ccqRIREREREREpRpF1umvXrg1fX99K97NkyRJkZGSgR48eCAsLM/+sXr1ahiyJiIiIiIiIlKVI0T1v3jy89NJLOHfuXKX6EUKU+jN69Gh5EiUiIiIiIiJSkCLDy2NiYpCXl4cGDRrAy8urxAXmaWlpSoQlIiIiIiIiciiKFN2PPPIILl26hFmzZiEkJMTuidSIiIiIiIiIqjJFiu7ExERs27YNrVu3VqJ7IiIiIiIioipBkWu6mzZtitzcXCW6JiIiIiIiIqoyFCm633nnHTz//PPYtGkTrl27hszMTIsfIiIiIiIioupAkeHlffv2BQD06tXLYrsQApIkwWg0KhGWiIiIiIiIyKEoUnRv3LixzPv27dunREgiIiIiIiIih6NI0d29e3eL2xkZGfj666/xySef4MCBA5g8ebISYYmIiIiIiIgciiLXdBf7448/MHLkSISFhWHhwoXo378/du/erWRIIiIiIiIiIoch+5nuixcv4rPPPsOnn36K7OxsPPTQQzAYDFizZg2aN28udzgiqkIkCK1TICIiIiJSlaxnuvv374/mzZvj6NGjWLhwIZKSkrBw4UI5QxBRFVZfuqx1CkREREREqpL1THd8fDwmTpyIZ599Fo0aNZKzayIiIiIiIqIqR9Yz3X/++SeysrIQExODjh07YtGiRbhy5YqcIYiIiIiIiIiqDFmL7s6dO2PZsmVITk7G008/jVWrVqF27dowmUxISEhAVlaWnOGIiIiIiIiIHJois5d7eXnhiSeewNatW3Ho0CE8//zzeOeddxAcHIxBgwYpEZKIqgBOpEZERERE1Y2iS4YBQJMmTTB37lxcvHgR33zzjdLhiMiBtXE5rXUKRERERESqUrzoLubq6oohQ4Zg3bp1aoUkIiIiIiIi0pRqRTcRERERERFRdcOim4iIiIiIiEghLLqJiIiIiIiIFMKim4iIiIiIiEghLLqJiIiIiIiIFMKim4iIiIiIiEghLLqJiIiIiIiIFMKim4iIiIiIiEghLLqJiIiIiIiIFMKim4iIiIiIiEghLLqJiIiIiIiIFMKim4iIiIiIiEghLLqJiIiIiIiIFMKim4iIiIiIiEghLLqJSDUmIWmdAhERERGRqlh0E5FqhNYJEBERERGprEoU3YsXL0ZkZCQ8PDwQHR2NP//8U+uUiIiIiIiIiCrk8EX36tWrMXnyZEyfPh379u1Dt27d0K9fP5w/f17r1IjIRibHf8shIiKqGgTHjxFVFQ7/CXj+/Pl48sknMWbMGDRr1gwLFixAREQElixZonVqRGQjfjwgIiKSiTBpnQERWclN6wTKU1BQgD179uDll1+22B4bG4vExESNspJffl4O9v6wCIVJSdj93Qm4uJT3XYh1E1FZN1+VtZNaVdxOWNuXZE07Kx+jbPGsi2n1Y7T6uai4iawxrXwurItZfhuf3Itoe2JBie3unEeNiIhIHjMDyrzrfEgvJAd1QdH/1/zKu7JMJpOVn9NJbq36Pw1Pb1+t06g0hy66r169CqPRiJCQEIvtISEhSElJKXWf/Px85Ofnm29nZmYCAAwGAwwGg3LJVkJ2ZgY6H3u76EaGtrkQERERUdVW9/LvqHv5d63TcD78nK66y53vh5u7h9ZplMna+tKhi+5i0m1n6IQQJbYVmz17NmbMmFFie3x8PLy8vBTJr7IKDfkId4musJ31Jwkr/kZTsvJbT+vOeVr7Dao1eVnHuphaPEbrWNOfnDGtf73leY2amE5Bh0KrYhIREZH8trtEAxAQkMyj2OT+PEOktEuJ26DTe2udRplycnKsaufQRXdQUBBcXV1LnNVOTU0tcfa72LRp0zBlyhTz7czMTERERCA2NhZ+fn6K5lsZhv4DkJCQgN69e0On02mdDlGllfa93/qZgzDY1XkuDSEiItKKYfrVcu+v+HQOWctgMPBzukZitE6gAsWjqivi0EW3u7s7oqOjkZCQgPvuu8+8PSEhAYMHDy51H71eD71eX2K7TqerEn8kVSVPIiIiItIOPy+qj5/T6XbWHg8OXXQDwJQpU/Doo48iJiYGnTt3xtKlS3H+/Hk888wzWqdGRDbioDYiIiIiqm4cvugeNmwYrl27hpkzZyI5ORlRUVFYv3496tWrp3VqREREREREROVy+KIbAMaOHYuxY8dqnQYRERERERGRTbjQHBEREREREZFCWHQTERERERERKYRFNxEREREREZFCWHQTERERERERKYRFNxGpRkDSOgUiIiIiIlWx6CYiIiIiIiJSCItuIlKNBKF1CkREREREqmLRTURERERERKQQFt1ERERERERECnHTOgEiqj6+NfbAENdErdMgopvyoEM2vJEneaDAxQNGyQ0CLgAE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+OGHH3Dq1CkcOXIEP/30E5o1aybTM0VERGQdFt1EREQOyMvLC1u2bEHdunUxdOhQNGvWDE888QRyc3MVPfPdvXt3/PPPPxg1ahSaNm2Kfv36ISUlBfHx8WjSpAkAoE+fPvjpp5+QkJCA9u3bo1OnTpg/fz7q1atn7mfNmjVo3749HnnkETRv3hxTp041X6/drl07fPvtt1i1ahWioqLw+uuvY+bMmRg9erTVefr4+ODHH3/E0aNH0bZtW0yfPh1z5syxaOPu7o5p06ahVatWuOuuu+Dq6opVq1ZV/kkiIiKygSSsuSiKiIiIiIiIiGzGM91ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURERERERKQQFt1ERERERERECmHRTURETuuzzz6DJEml/rzwwgtap+eUDh48iMcffxyRkZHw8PCAj48P2rVrh7lz5yItLU2xuElJSYiLi8P+/fsVi3GrxYsX47PPPlMlFhERVW1uWidARESktBUrVqBp06YW28LDwzXKxnktW7YMY8eORZMmTfDiiy+iefPmMBgM2L17Nz766CNs27YNa9euVSR2UlISZsyYgfr166NNmzaKxLjV4sWLERQUhNGjRysei4iIqjYW3URE5PSioqIQExNjVVuDwQBJkuDmxv8ibbFt2zY8++yz6N27N77//nvo9Xrzfb1798bzzz+PDRs2aJghERGRNji8nIiIqq1NmzZBkiR8+eWXeP7551G7dm3o9XqcOnUKAPDbb7+hV69e8PPzg5eXF7p27Yrff/+9RD8///wz2rRpA71ej8jISLz33nuIi4uDJEnmNmfPnoUkSaUOSZYkCXFxcRbb/v77bwwfPhzBwcHQ6/Vo1qwZPvzww1Lz/+abbzB9+nSEh4fDz88P99xzD06cOFEizoYNG9CrVy/4+/vDy8sLzZo1w+zZswEAX375JSRJwrZt20rsN3PmTOh0OiQlJZX5XM6aNQuSJGHp0qUWBXcxd3d3DBo0yHzbZDJh7ty5aNq0KfR6PYKD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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "t_len = 5\n", "fs = 10000\n", "bw = 2000\n", "nzeros = 20000\n", "nchans = 32\n", "\n", "x_rec, t, x, _ = runsintest(t_len, fs, bw, nzeros, nchans)\n", "x_rec = x_rec[: len(x)]\n", "\n", "g_del = nchans * (64 - 1) // 2\n", "fig = plotdata(x, x_rec, t, t,2*g_del)" ] }, { "cell_type": "code", "execution_count": null, "id": "c7435df8-4c99-4a67-9655-5d4d3d53ecd9", "metadata": {}, "outputs": [], "source": [] } ], "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.18" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }