From 901b19ba74a6f5c96110d4b987b61e18d285fbd6 Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Fri, 20 May 2022 17:46:31 +0200 Subject: [PATCH] First draft. --- .../lofar2_station_sdp_firmware_model.ipynb | 727 ++++++++++++++++++ 1 file changed, 727 insertions(+) create mode 100644 applications/lofar2/model/lofar2_station_sdp_firmware_model.ipynb diff --git a/applications/lofar2/model/lofar2_station_sdp_firmware_model.ipynb b/applications/lofar2/model/lofar2_station_sdp_firmware_model.ipynb new file mode 100644 index 0000000000..7bc831760d --- /dev/null +++ b/applications/lofar2/model/lofar2_station_sdp_firmware_model.ipynb @@ -0,0 +1,727 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "82c10597", + "metadata": {}, + "source": [ + "# LOFAR2.0 Station SDP Firmware quantization model\n", + "\n", + "Author: Eric Kooistra, 18 May 2022\n", + "\n", + "Purpose: Model the expected signal levels in the SDP firmware and clarify calculations in [1].\n", + "\n", + "References:\n", + "\n", + "1. https://support.astron.nl/confluence/display/L2M/L4+SDPFW+Decision%3A+LOFAR2.0+SDP+Firmware+Quantization+Model\n", + "2. Understanding digital signal processing, R.G. Lyons" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "2b477516", + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "id": "c2cc6c7a", + "metadata": {}, + "source": [ + "## 1 SDP Parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e1b6fa12", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "N_int = 200000000\n" + ] + } + ], + "source": [ + "# SDP\n", + "N_ant = 96\n", + "N_complex = 2\n", + "N_fft = 1024\n", + "N_sub = N_fft / N_complex\n", + "f_adc = 200e6 # Hz\n", + "f_sub = f_adc / N_fft\n", + "T_int = 1 # s\n", + "N_int = f_adc * T_int\n", + "N_int_sub = f_sub * T_int\n", + "\n", + "print(f\"N_int = {N_int:.0f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "eb325c9c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FS = 8192\n", + "sigma_fs_sine = 5792.6\n" + ] + } + ], + "source": [ + "# Signal data widths and full scale\n", + "W_adc = 14\n", + "W_subband = 18\n", + "W_crosslet = 16\n", + "W_beamlet_sum = 18\n", + "W_beamlet = 8\n", + "W_statistic = 64\n", + "FS = 2**(W_adc - 1) # full scale\n", + "sigma_fs_sine = FS / math.sqrt(2)\n", + "\n", + "print(\"FS =\", FS)\n", + "print(f\"sigma_fs_sine = {sigma_fs_sine:.1f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "3e71626f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unit_sub_weight = 8192\n", + "Unit_bf_weight = 16384\n", + "Unit_beamlet_scale = 32768\n" + ] + } + ], + "source": [ + "# Widths of coefficients and weights\n", + "W_fir_coef = 16\n", + "W_sub_weight = 16\n", + "W_sub_weight_fraction = 13\n", + "W_sub_weight_magnitude = W_sub_weight - W_sub_weight_fraction - 1\n", + "W_bf_weight = 16\n", + "W_bf_weight_fraction = 14\n", + "W_bf_weight_magnitude = W_bf_weight - W_bf_weight_fraction -1\n", + "W_beamlet_scale = 16\n", + "W_beamlet_scale_fraction = 15\n", + "W_beamlet_scale_magnitude = W_beamlet_scale - W_beamlet_scale_fraction\n", + "Unit_sub_weight = 2**W_sub_weight_fraction\n", + "Unit_bf_weight = 2**W_bf_weight_fraction\n", + "Unit_beamlet_scale = 2**W_beamlet_scale_fraction\n", + "\n", + "print(\"Unit_sub_weight =\", Unit_sub_weight)\n", + "print(\"Unit_bf_weight =\", Unit_bf_weight)\n", + "print(\"Unit_beamlet_scale =\", Unit_beamlet_scale)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0ec00484", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W_sub_proc = 4.5\n", + "W_bf_proc = 3.29 for N_ant = 96\n" + ] + } + ], + "source": [ + "# Signal level bit growth to accomodate processing gain\n", + "W_sub_proc = math.log2(math.sqrt(N_sub))\n", + "W_sub_gain = 4\n", + "W_bf_proc = math.log2(math.sqrt(N_ant))\n", + "\n", + "print(\"W_sub_proc =\", W_sub_proc)\n", + "print(f\"W_bf_proc = {W_bf_proc:.2f} for N_ant = {N_ant}\")" + ] + }, + { + "cell_type": "markdown", + "id": "d942fcc6", + "metadata": {}, + "source": [ + "## 2 Quantization model" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f66c5028", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "P_bit_dB = 6.02 dB\n" + ] + } + ], + "source": [ + "# Bit\n", + "P_bit = 2**2\n", + "P_bit_dB = 10 * math.log10(P_bit)\n", + "print(f\"P_bit_dB = {P_bit_dB:.2f} dB\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a9fca052", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "P_quant = 0.083333\n", + "P_quant_dB = -10.79 dB = -1.8 bit\n", + "sigma_quant = 0.29 q\n" + ] + } + ], + "source": [ + "# Quantization noise\n", + "P_quant = 1 / 12 # for W >> 1 [2]\n", + "P_quant_dB = 10 * math.log10(P_quant)\n", + "sigma_quant = math.sqrt(P_quant)\n", + "print()\n", + "print(f\"P_quant = {P_quant:.6f}\")\n", + "print(f\"P_quant_dB = {P_quant_dB:.2f} dB = {P_quant_dB / P_bit_dB:.1f} bit\")\n", + "print(f\"sigma_quant = {sigma_quant:.2f} q\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "d9972b6b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# System noise\n", + "n = np.arange(1,9)\n", + "sigma_sys = n\n", + "P_sys = sigma_sys**2\n", + "P_tot = P_sys + P_quant\n", + "sigma_tot = np.sqrt(P_tot)\n", + "\n", + "plt.figure()\n", + "plt.plot(n, (P_tot / P_sys - 1) * 100)\n", + "plt.title(\"Increase in total noise power due to sampling\")\n", + "plt.xlabel(\"sigma_sys [q]\")\n", + "plt.ylabel(\"[%]\")\n", + "plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "be2d952f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W_adc = {W_adc} bits\n", + "FS = 8192\n", + "sigma_fs_sine = 5792.6 q\n", + "P_fs_sine_dB = 75.26 dB = 12.5 bit\n" + ] + } + ], + "source": [ + "# FS sine\n", + "P_fs_sine = FS**2 / 2\n", + "P_fs_sine_dB = 10 * math.log10(P_fs_sine)\n", + "print(\"W_adc = {W_adc} bits\")\n", + "print(\"FS =\", FS)\n", + "print(f\"sigma_fs_sine = {sigma_fs_sine:.1f} q\")\n", + "print(f\"P_fs_sine_dB = {P_fs_sine_dB:.2f} dB = {P_fs_sine_dB / P_bit_dB:.1f} bit\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a9e7fabc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "SNR_dB = P_fs_sine_dB - P_quant_dB = 75.26 - -10.79 = 86.05 dB\n" + ] + } + ], + "source": [ + "# SNR\n", + "SNR = P_fs_sine / P_quant\n", + "SNR_dB = 10 * math.log10(SNR)\n", + "\n", + "print()\n", + "print(f\"SNR_dB = P_fs_sine_dB - P_quant_dB = {P_fs_sine_dB:.2f} - {P_quant_dB:.2f} = {SNR_dB:.2f} dB\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "92852a53", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Power at -50dBFS = 25.26 dB, so sigma = 18.3 q\n", + "\n", + "sigma = 16 q corresponds to:\n", + " . Power = 24.08 dB, so at -51.2 dBFS\n", + " . Range 3 sigma = +-48 q\n", + " . Sine with amplitude A = sigma * sqrt(2) = 22.6 q\n" + ] + } + ], + "source": [ + "# -50 dbFS level\n", + "Power_50dBFS = P_fs_sine_dB - 50 \n", + "sigma_50dBFS = 10**(Power_50dBFS / 20)\n", + "\n", + "print(f\"Power at -50dBFS = {Power_50dBFS:.2f} dB, so sigma = {sigma_50dBFS:.1f} q\")\n", + "\n", + "# Assume sigma = 16 q\n", + "sigma = 16\n", + "Power = sigma**2\n", + "Power_dB = 10 * math.log10(Power)\n", + "print()\n", + "print(f\"sigma = {sigma:.0f} q corresponds to:\")\n", + "print(f\" . Power = {Power_dB:.2f} dB, so at {Power_dB - P_fs_sine_dB:.1f} dBFS\")\n", + "print(f\" . Range 3 sigma = +-{3 * sigma:.0f} q\")\n", + "print(f\" . Sine with amplitude A = sigma * sqrt(2) = {math.sqrt(2) * sigma:.1f} q\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "77bb14cc", + "metadata": {}, + "source": [ + "## 3 Expected signal levels in the SDP FW" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "a04af043", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ADC sigma = 5792.6 q = 12.5 bits: P_ast = 6.710886e+15, uses 52.6 bits, is 0 dBFS = FS sine\n", + "ADC sigma = 18.3 q = 4.2 bits: P_ast = 6.710886e+10, uses 36.0 bits, is -50dBFS\n", + "ADC sigma = 16.0 q = 4.0 bits: P_ast = 5.120000e+10, uses 35.6 bits\n" + ] + } + ], + "source": [ + "# ADC power statistic\n", + "sigma = sigma_fs_sine\n", + "sigma_bits = np.log2(sigma)\n", + "P_ast = (sigma)**2 * N_int\n", + "print(f\"ADC sigma = {sigma:6.1f} q = {sigma_bits:4.1f} bits: P_ast = {P_ast:e}, uses {np.log2(P_ast):.1f} bits, is 0 dBFS = FS sine\")\n", + "\n", + "sigma = sigma_50dBFS\n", + "sigma_bits = np.log2(sigma)\n", + "P_ast = (sigma)**2 * N_int\n", + "print(f\"ADC sigma = {sigma:6.1f} q = {sigma_bits:4.1f} bits: P_ast = {P_ast:e}, uses {np.log2(P_ast):.1f} bits, is -50dBFS\")\n", + "\n", + "sigma = 16\n", + "sigma_bits = np.log2(sigma)\n", + "P_ast = (sigma)**2 * N_int\n", + "print(f\"ADC sigma = {sigma:6.1f} q = {sigma_bits:4.1f} bits: P_ast = {P_ast:e}, uses {np.log2(P_ast):.1f} bits\")" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "0b2ac36c", + "metadata": {}, + "outputs": [], + "source": [ + "# Subband filterbank" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a656367f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "27d0fe5a", + "metadata": {}, + "source": [ + "## 4 Signal statistics" + ] + }, + { + "cell_type": "markdown", + "id": "4ddef2d8", + "metadata": {}, + "source": [ + "### 4.1 Statistics basics:\n", + "\n", + "* dc = mean # direct current\n", + "* sigma = std # standard deviation\n", + "* var = std**2 # variance\n", + "* mean power = var + mean**2\n", + "* rms = sqrt(mean power) = sqrt(var + mean**2)\n", + "\n", + "Coherent and incoherent signals. With S signals, the std of their sum:\n", + " \n", + "* increases by S for coherent signals\n", + "* increases by sqrt(S) for incoherent signals" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "9c55fb7b", + "metadata": {}, + "outputs": [], + "source": [ + "def rms(arr):\n", + " \"\"\"Root mean square of values in arr\n", + " \n", + " rms = sqrt(mean powers) = sqrt(std**2 + mean**2)\n", + " \n", + " The rms() also works for complex input thanks to using np.abs().\n", + " \"\"\"\n", + " return np.sqrt(np.mean(np.abs(arr)**2.0))" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "74edfe32", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mean(si) = -0.204032, expected -0.2\n", + "std(si) = 0.500000, expected 0.5\n", + "rms(si) = 0.540027, expected 0.538516\n" + ] + } + ], + "source": [ + "N_samples = 10000\n", + "sigma = 0.5\n", + "var = sigma**2\n", + "dc = -0.2\n", + "\n", + "# Signal input voltages\n", + "si = np.random.randn(N_samples)\n", + "si *= sigma / np.std(si) # apply requested sigma\n", + "si += dc # add offset\n", + "\n", + "print(f\"mean(si) = {np.mean(si):.6f}, expected {dc}\")\n", + "print(f\"std(si) = {np.std(si):.6f}, expected {sigma}\")\n", + "print(f\"rms(si) = {rms(si):.6f}, expected {np.sqrt(var + dc**2):.6f}\") " + ] + }, + { + "cell_type": "markdown", + "id": "17d333f1", + "metadata": {}, + "source": [ + "### 4.2 Beamforming\n", + "\n", + "In the beamformer the weak signal in the beamlet adds coherently and the sky\n", + "signals from other directions add incoherently. Hence the SNR of the weak\n", + "signal in the BF output improves by factor S/sqrt(S) = sqrt(S)." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "89845ec3", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEWCAYAAACNJFuYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAtJElEQVR4nO3deZgU1fX/8fdhQARBEZdxF0FUXNEhbokYXNGfigsGFHcNmpgYTYySaJQkmrhrvqJRxH3DBRHcAwruimwiiCuigIor4LAKnN8fp8bp2Zlheqpn+vN6nn66u6q66nQN1Ol7b917zd0RERHJ1CztAEREJPcoOYiISAVKDiIiUoGSg4iIVKDkICIiFSg5iIhIBUoOIllgZj83sw/NrNjMjkw7HpHaUnKQJsXMZprZ4uSi/L2ZPWVmm6cQyj+AQe7ext0fT+H4IqtFyUGaosPdvQ2wMTAXuDGFGLYEptXlg2bWvJ5jKb//gmzuX5oGJQdpstx9CfAosD2AmbU0s2vM7DMzm2tmt5hZq2Tdumb2pJl9nZQ4njSzzUr2ZWZjzewyM3stKZU8YWbrmdn9ZrbAzN4ysw7Jth8DHYEnkm1bmtkmZjbSzL4zs4/M7NcZ+x5oZo+a2X1mtgA4pTbHS/axnZmNSvb/vpn9KmPdXWb2XzN72swWAj2yed6laVBykCbLzFoDfYA3kkVXANsAXYGtgU2BS5J1zYA7iV/8WwCLgUHldtkXODH5XCfg9eQz7YHpwKUA7t4J+IykBOPuS4GhwGxgE6A38C8z2y9j372IRNYOuL82xzOztYBRwAPAhsnnbjaz7TP2fzxwOdAWeKWmcyei5CBN0eNmNg+YDxwIXG1mBvQHznP379z9B+BfxIUUd//W3Ye5+6Jk3eXAvuX2e6e7f+zu84FngI/dfbS7LwceAXatLJikzePnwIXuvsTdJwNDgJMyNnvd3R9395XuvriWxzsMmOnud7r7cnefBAwDjs3Y/wh3fzXZ/5JanEvJU1mt2xRJyZHuPjqpW+8FvEiUFloDEyJPAGBAAfxUyrge6Amsm6xva2YF7r4ieT834xiLK3nfpop4NgFKElKJT4FuGe9nVfK5VT3elsAeSUIs0Ry4t4b9i1RJJQdpstx9hbs/BqwA9iQuqDu4e7vksU7ScA3wJ2BbYA93Xxvoniy3Cjuuvc+B9mbWNmPZFsCczHBXY/+zgBczvle7pDrrN/W0f8lDSg7SZFnoRZQEpgG3Adeb2YbJ+k3N7OBk87ZE8phnZu1J6vPrg7vPAl4D/m1ma5rZzsDpwH31dIgngW3M7EQza5E8fmZmXepp/5KHlBykKXrCzIqBBUTbwcnuPg24EPgIeCO5K2g0UVoAuAFoBXxDNGA/W88xHQd0IEoRw4FL3X10few4qa46iGg/+Rz4ErgSaFkf+5f8ZJrsR0REylPJQUREKlByEBGRCpQcRESkAiUHERGpoEl0glt//fW9Q4cOtf7cwoULWWutteo/oNWkuGovV2NTXLWTq3FB7sa2OnFNmDDhG3ffoNKV7t7oH0VFRV4XY8aMqdPnsk1x1V6uxqa4aidX43LP3dhWJy5gvFdxXVW1koiIVKDkICIiFSg5iIhIBUoOIiJSgZKDiIhUoOQgIiIVKDmIiEgFTaITnIhIk/Pll7DuutCyZen7Bx6A9deHww6D9u2zenglBxGRNC1ZAmuuWXbZ99/D1ltHAvj736FfP+jVC8aNi/U77ACvvQZLlrDm559nJSxVK4mIZNtHH8FBB8GsclN5v/NOlAQuv7zs8mefhYULoXVrOO20SBTjxsH998OIEfDee7DHHrDFFmx9881ZCVklBxGR1fXFF3DnnbByJey7L+yzT+k6d/jtb2HUKLjpJjjllCgFXHUV3HVXJIGLL47SwuLFcM45MHIkbLghTJsW+/3Tn2Ifxx8f+7zpJjj/fDjlFGbsvTfrZ+ErKTmIiNTV8uVw2WXwr3/F65KZNR95BHr3jtePPhqJYb314I47YPp0+OADOO64SAZ//Su8/jpce21s/9Zbsf6YY6CgAM44A046CVq0KD3umWdC//5gxqKxY7Py1VStJCJSF8uXQ8+e0SZw7LFxQZ83D7p1i4v3F1/AV1/B738Pu+4apYSvv45SwZlnRntC+/Zw4YXw/PMwdy7ce28kh/nz4YgjSo+1xhpgVvb45d/XMyUHEZHp0+MX/HHHwZtvll332WfQqxfrvf46/Pgj3HADvP023HhjXNRvvjnaArbeGtZZB+67L0oEv/xllB7mzYO774ZDDoEtt4w7kK64IpLAG2/A2mvHhX7DDaPhef/9o63hgANSOBGlVK0kIun7+GNo27Z2n5kzBwYOhPPOg+23L7tu5sy42LZuXfN+Fi2CAw+MX+5t2sBjj8E110Qd/zvvxC/4WbPY4emnYfjwuKivuSY0awaHHgpnnVV2f9tuC08+GdVBL78M//kP7LRTrHvkEVi2DNq1i0d5ZlENNWsWpDx3hEoOIpKuFSuge/e4mK6qN9+EoiIYMgT++c+o67/33mjAffVV2Gab2OfXX8Pjj0eygEgEt9wS1UAffhjLrr02Es0LL0SS2m+/aBTu0CGqg5YuhbFjKe7UCSZPjhLDnntGe8BNN1VevbPffjB1KowdG9VKJX72M/j5z6v/bu3alSaTFKnkICLpevFF+Pxz+PZbmv3mN1GXP316VOdsu228nzoVDj88OoTNmRO/5tu0iefhw+MX+UknxfrWrWGjjeJX/yabxOe7d4+L/z77wMSJ0bj7wgtxm+h//wtHHVV6h9HTT8OwYVFddPrpkSjat2fyf/5D9y5dYIst4Oyz4YcfokqoKq1bx51LjZSSg4ik66GH4nnpUtpPmABXXhkJo7y+feOXep8+cfvnmDFRtz9yZCSGLbeEHXeMevxRo2DGDLj11vglfvfdMGBAJIbBg+OXfa9e0X6w885RjVTCLNoKSu42Sqxs2TISQ8k21SWGJkDJQUTS8+OPUcfeuzf87390uvnmuMvnb3+LTmPTp0fd/syZccvoiBFRzXP//dHO4B4JYerU6EjWr1/ss0WLKHUcckjc+VPSjrDDDlEaaNYsShYrVkBzXQYro7MiIumYNg2uvhq++w5OPBGaNaPVww/Hxf7SS6NO/xe/iG3do7QwZUpc5Lt2jeVm0Sg9YkTcaQRl+wNA3EF0xhlw/fWx32bNSj+rxFAlnRkRqb3x46MxeNy46Nm7775xH391li2LC/8JJ8QdPnvtFb/yTzst+gssXgwPPxy3eRYUlP2sGVx3XeX7PeaYeFTnkkui+qim7eQnSg4iUnu/+Q28+2404rZtG3X6554bv+iXL4eXXoqL8foZAzs8/njcIXTZZZFcFi2K6qDttov1v/oV4xYvZvf/9//qP9527WLYClllupVVRKr2ww9RL19+2cSJMd7Ps89Glc5aa0W1zfDhUde///7QsWOMH1QypMTgwbDppnEXzxNPwK9/XZoYIIaC6NChwb6aVE/JQUQqeu012GqruCPntNPKrnv99RhgruTWz3bt4NRTo2fw0UfHZ+6+O3oIX3hhdCZ75ZXoTXzWWZFEOnWK+n/JWUoOIvnkxx9Lf8mXWL48Gmx32SWGbJg1KwZ1W7Ei3j/wQNxBdNVVcNtt0eu3oCA6gpU499wYFuKcc6KD2kknRYliwIDodLbPPtH4e+qp8fjww+iLIDlLbQ4ijd2SJdEv4N1341d6ycxhJd5/P+4MGjYs+hR07846Rx4ZVTqFhXGv/+23w8EHxy/8nXYqvf1zxx2jt/HJJ0ffgTXWiOqirl3LDnfRqVP0Rs7sLWwG//53NFZ/8w106RLVSiXrJKcpOYg0ZkuXwt57w6RJ8b6kigeguDh+ud90U7xv0yZuGR05kl3HjIE//CGGh5g+PTqEDR8evYYPPRR69IAjj4yL+MEHw3PPQefO0Tv5vfeipFBeVRf8nj3r+UtLQ1C1kkhjdsklkRiGDIlf7/ffD59+Gr/s1147EsO558KECTEH8Z13wocfMvXvf4/+AsuWRdIoGSNo//2jlDFiROnF/vzzo8H53nujERpK+x9Ik6WSg0iumTUrqnvWWCN6Bm+0UYwCumgRtGpVetF+4onoRPbrX0ev308/jdtETzst5ha45JLoZbz33mX3374933TvHg3Gf/xjtEOssUbp+q23Lrv9AQfAggXReWznnaNqKHOuAWmSVHIQySWffx7VN9dcE53Cdt457s//7ruo+z/99NjuwQdjsLiiotIZxI4/PhqbX3gh7hIaOLBiYijPrGxiqEpJr+JWrWKimvK9kKXJUclBJJfcdlu0I4wcGRf+H36IRuSZM6O+/847o53gT3+Kqp0nnihtGN5uu5iF7Msv4c9/TvVrSOOnkoNIQ1qypPLl48bBt99GcmjWLN4/8EDcedSpU9we+tvfRhXTOedE1c7w4RUnyHn88ZjPYFUmuRGpRs4mBzPraWbvm9lHZjYg7XhEVtnSpXGRXr687PKxY2PO4LvvLrt86FDYYw/YbLMoHVxwQenkNfvuG8+nnBLtC9deGxPVP/JI9Csob9NNS4eVFlkNOVmtZGYFwE3AgcBs4C0zG+nu76YbmcgquOKKqO+/+OK4+wei0ffss6Md4eyzo11h3rwoLfzmN5Ec2rePtoWBA2Megu+/j9tA99orHhDtCn36VByYTqSe5WRyAHYHPnL3GQBmNhToBSg5SO5xL72D6IcfYs7gVq3g8svZZMGC6Gn80EPRSe2mmyJpZE4VWVgYHdRKOohBzGn88MPRx6A8JQZpAOblu9LnADPrDfR09zOS9ycCe7j77zK26Q/0BygsLCwaOnRorY9TXFxMmzZt6ifoeqS4aq+hYmv7/vts8OKLzDjjDGjWjJZff81OAwbwdffufHryyWz28MNs/d//Mvn669l60CDafPzxT5/98qCDeG/AANZ+913Wnj6dH7bdluVrrcWSwkJWlJtMvu2777LBSy8x48wzs9KbOFf/lrkaF+RubKsTV48ePSa4e7dKV7p7zj2A3sCQjPcnAoOq2r6oqMjrYsyYMXX6XLYprtrLamxjx7oPHBivDz/cHdwHDXKfPdu9c+d437Kl+6RJ7uuv777//rHt0qU+bsgQ91Gj3L/6Knvx1UGu/i1zNS733I1tdeICxnsV19VcbZCeA2ye8X6zZJlIw/vzn6Md4Kmn4Jln4h7/AQPiltIvvojRSFesiFtLFyyIaiWANdZgYadO0Ylsgw1S/QoitZWryeEtoLOZbWVmawB9gZEpxyT56O234a234vUJJ8QdSA89FO8LC2Ndv35xN9HChdFDeYcdUgtXpL7kZIO0uy83s98BzwEFwB3uPi3lsKQpKmkwbts2hpn+4osoIaxcGZ3Jbrst+hqcemoMPb3ddjEg3YwZMTdxSe/iq66KksMJJ6T6dUTqS04mBwB3fxp4Ou04pAn64YfoaLZoUQwv8eWXsNtuMbUlxAil06dHnwOIksGll8agdqedFg3E5auJ1l03hrUWaSJyNjmIZMULL8Bxx8VopBttBLNnxwB0zz4Lf/973IJ6wQUxjtENN8CUKdHmsNFG8NlnMdKpSB5QcpD8sHJlTDxzySUxx3GXLvDkk1Ea6N0b5s6NNgR32H33GKOo3O2ltGuXSugiaVBykMZt3jz47W9ZZ6+9ogQAMYPZaadFKeDAA2P00v/7vxi+4vjjo/dxmzbR1lDSoaywMJ7NYsgKkTyXq3criZT13XcxN8GwYaXLli2DY46BBx+k4+DBpctvvDF+9R94YGx/9NHRO/nWW+O205IOQ+ppLFIllRykcbj77pjDePToaCCeNQsmT465jg84gHVGj47bTtddN0oI//gH/O1vMVjduHHR16BVq7S/hUijoeQguc8dbr895jfYaqsY8XSnnaKKqGdP2GcfVmy8MQWDBkHHjvGZfv3iubAQDj88tdBFGislB8kdc+dGn4KSht/PP48RTjt0iHmNBw+OKTEzB7or+egBB7DJkCHQvHkMaleSJESkTpQcJDcsWhR3CLVrB5MmxRzIPXtG9RHE5DV9+sTrSgai+/jss9lkv/1iopuzzmq4uEWaKCUHyQ3XXRd9DmbPjv4Gt90WSeCNN+C996J/QTV9DFa0agV//GM8RGS1KTlIOn78MRqUS+Y8vvLKGJbi669jfKJ27eC116I/wh57pBysSP7RrazScH78MXoZA5x7bnQ2u+wy+NWvYkC7K6+MEU233z76KnTpkmq4IvlMJQfJvuLiuJ303HNh6lTo3z/6HGy8cfRYBnjwwRiyAqLxWURSpeQg2TVkSNxhBLDJJnDIIZEYttwyGp4vuCBKCH37phuniJSh5CD1wz2qjUqGsC5x661x8b/ssuiI1rYt3HtvTJSz7rrR8CwiOUdtDlI/zjgjOqYVF5cu+/hjGD8+xjk6+ui428gs5k3Yaaf0YhWRGqnkIHU3YgS8/37cTXTHHbFs4EDo1AkmToT1149lxx6bWogiUjdKDlI7b74JS5fCzjvH1Jjz5sWcyptuCj16wLXXlt1+zz2jfUFEGhUlB1llBYsXx22n338PBx8cieGii2DQoLgF9Ze/jNnTjjgiksfJJ8PZZ6cdtojUgZKDrLJNHn88OqltsUXMs9ynTzQ0//OfpUNavPBC6QdKhr4QkUZHDdJStVGjYnrMQw6B889ni6FD4/VLL0Wp4IorYrtKxjoSkcZNJQepXHFx3IHUokX0an7pJZqtWBGlhC23hLvuSjtCEckilRykLHd47rkoGXz2GQwdGj2WFy7k5WeeiTkVRKTJU8lByvr3v6ORuVmzeP75z0vXqfpIJG8oOUjMz/zCC7DXXpEcDj8cHnigdK5lEck7Sg75zj2m23zuuUgGS5bANdcoMYjkObU55JOlS2HBgrLL7rgjEsNpp8VYR3/6U+noqCKSt1RyyAfffgu9e8cUmitXwv77w4EHRp+FG26IzmslM6+JiKDk0PStXAknnBCzqp13XiSAYcPgz3+O9SedFNVIzVSIFJFSSg5N3VVXwbPPwi23wJlnxrIrroCvvoJFi6BDh1TDE5HcpOTQlM2ZE53WjjwyZl/LtOGGqYQkIo2D6hKasosvjrmZr71W7QkiUitKDk3N99/D+efD5pvHEBd/+AN07Jh2VCLSyKhaqTG79VZo1Soalf/9b7jnnqhKKi6Go46Cv/wFTj897ShFpBFScmisFiyIu4+WL4f58+Gvf4W994Z994WzzoKuXdOOUEQasZxLDmY2EPg18HWy6K/u/nR6EeWoRx6BxYujJ/M558BWW8UQ261bpx2ZiDQBudrmcL27d00eSgyVuesu2G47ePBBaNcOBg9WYhCRepNzJQepwdSp8Nhj8Mor0V/hsMPgm2+goCDtyESkCTF3TzuGMpJqpVOABcB44E/u/n0l2/UH+gMUFhYWDR06tNbHKi4upk0ODjBXJi53uv7hD8zbdVdmH3sse/btS/OFCynu2JG3r76aH9u3TyeuHJOrsSmu2snVuCB3Y1uduHr06DHB3btVutLdG/wBjAamVvLoBRQCBUSV1+XAHTXtr6ioyOtizJgxdfpctpWJ68MP3cG9eXP3E06I1xMmpB9XjsnV2BRX7eRqXO65G9vqxAWM9yquq6lUK7n7AauynZndBjyZ5XBy26hR8VxQAPfdB0cfDbvtlm5MItLk5VyDtJltnPH2KKJEkb9GjYIttoB//QtatoRLLkk7IhHJAzmXHICrzOwdM5sC9ADOSzug1KxYETO0HXgg/PGP8OWXsMsuaUclInkg5+5WcvcT044hZ4wfHx3cDjww3rdrl2o4IpI/crHkkN8+/JCNR46MHtAXXwwtWsB++6UdlYjkmZwrOeS1Dz6A7t3Zdu7cmH9h8eLo7LbBBmlHJiJ5ptrkYGarchP9SnefVz/h5LGS6qOVK5l+4YV0eeUV+NWv4OST045MRPJQTSWHz5NHdZMBFABb1FtE+erSS2HWLHj9deYuXkyXK65IOyIRyWM1JYfp7r5rdRuY2aR6jCc/TZkCN94Y03jusQeMHZt2RCKS52pKDnutwj5WZRsp78cfYw7nZcugd29Ybz24/PK0oxIRAWq4W8ndl2S+N7PWZtbNzDaoahtZReeeC+3bw447RnXS44/HexGRHFBtcjCzI8xspplNNLNDgWnAIOAdM1NLaV2tXAmPPgpdukCnTvDwwzFRj4hIjqipWumfwEHAOsAYYGd3n2FmGwLPA3dnOb6mafx4+OoruO466Ncv7WhERCqoKTmsdPcPAMzsE3efAeDuX5nZ8qxH11Q9+SQ0awY9e6YdiYhIpWpKDs3MbF2i+mll8rrktlb1rq6rp56CvfaKRmgRkRxUU3JYB5hAaUKYmLEut2YJagyWL4ebb4aJE2OUVRGRHFVtcnD3Dg0UR9P32WfQpw+88QYccED0aRARyVE1DZ9R7awy7j6xuvVC3Jl0111wwQXRp+GBB6BvX7DqOp2LiKSrpmqla5PnNYFuwNtEFdPOxPzO6gBXkzPPhCFDoo3hrrtgm23SjkhEpEY1dYLr4e49gC+A3dy9m7sXAbsCcxoiwEatuDim9jzlFHj1VSUGEWk0VvWOo23d/Z2SN+4+FeiSnZCakKefhiVLIjmoGklEGpFVnc9hipkNAe5L3vcDpmQnpCZk2DDYcEP4xS/SjkREpFZWteRwKjF0xh+Sx7vJMqnKwoXRn+HII6GgIO1oRERqZZVKDsngetcnD6nOsmVw0UUweHAkiL59045IRKTWahp4b3BNO1iVbfLGggVw0EFwzTVw2GEwejT06JF2VCIitVZTyeFIM6tuSG4DdPUrceed8OKLcM89cOKJaUcjIlJnNSWHP6/CPl6uj0CahBEjYIcdlBhEpNGrafgMDcm9qr77Dl56CS68MO1IRERWm0ZWrS9PPQUrVkCvXmlHIiKy2pQc6svw4bDxxtCtW9qRiIistjonBzPboj4DadRuvDGSw4knxiQ+IiKNXI1XMjPby8x6J1ODYmY7m9kDwKtZj64xeP55OOec6Ox22WVpRyMiUi9q6udwNXAHcAzwlJldBvwPeBPonP3wGoHHH4fWreHBB6FFi7SjERGpFzXdyvr/gF3dfUkyRegsYEd3n5n1yBqLl1+O4bjXXDPtSERE6k1N1UpLkqEzcPfvgQ+VGDLMmwdTpsA++6QdiYhIvaqp5NDRzEZmvN8q8727H5GdsBqJ114DdyUHEWlyakoO5W/av7bSrfLVyy9D8+aw555pRyIiUq9q6iH9YjYOambHAgOJCYN2d/fxGev+ApwOrADOcffnshHDavn++5gL+rHHoKgoGqRFRJqQapODmY0BvIrV7u771/G4U4GjgVvLHW97oC+wA7AJMNrMtnH3FXU8Tnbccgv89a/x+ppr0o1FRCQLaqpWOr+SZXsCFwBf1fWg7j4dwCpOndkLGOruS4FPzOwjYHfg9boeKyumTYPNNoNPPolqJRGRJsbcqyoYlNvQbF/gb8CawOXu/sxqH9xsLHB+SbWSmQ0C3nD3+5L3twPPuPujlXy2P9AfoLCwsGjo0KG1Pn5xcTFt2rSp9eeKzjyTH9demylXX13rz66KusaVbbkaF+RubIqrdnI1Lsjd2FYnrh49ekxw98rH/HH3ah/AwcSw3KOBHjVtn/G50UT1UflHr4xtxgLdMt4PAk7IeH870LumYxUVFXldjBkzpvYfWrHCfa213M85p07HXBV1iqsB5Gpc7rkbm+KqnVyNyz13Y1uduIDxXsV1taY2h7eADYCrSap2zGy3jMQysarPuvsB1e27CnOAzTPeb5Ysyx1z5sT0n9ttl3YkIiJZU1OF+UKgGOhNDKGR2UjgwH71HM9I4AEzu45okO4MjKvnY6ye6dPjuUuXdOMQEcmimm5l/WU2DmpmRwE3EqWSp8xssrsf7O7TzOxh4F1gOXC259qdSu+9F89KDiLShNVUrfQzYJa7f5m8P4koQXwKDHT37+pyUHcfDgyvYt3lwOV12W+DmD4d2rWDDTdMOxIRkaypaWylW4FlAGbWHbgCuAeYDwzObmg56r33otRQ8TZcEZEmo6bkUJBROugDDHb3Ye7+N2Dr7IaWY+bPh+uvhwkTVKUkIk1eTQ3SBWbW3N2XA/uT9CtYxc82HStXwjHHxMQ+224L/fqlHZGISFbVdIF/EHjRzL4BFhP9HTCzrYmqpfxwww2RGG65Bc48M+1oRESyrqa7lS43s+eBjYH/JZ0mIKqjfp/t4HLC4sVw0UVw+OHQv3/N24uINAE1Vg25+xuVLPsgO+HkoJkzYckS6NNHjdAikjdqapCWTz6J5622SjcOEZEGpORQkxkz4rljx3TjEBFpQEoONfnkE2jVCgoL045ERKTBKDnU5JNPoEMHtTeISF5RcqjJjBmqUhKRvKPkUB33KDmoMVpE8oySQ3W+/x4WLFByEJG8o+RQHd2pJCJ5SsmhOurjICJ5SsmhOkoOIpKnlByq4g4jRsAWW8Daa6cdjYhIg8qfYbdra9gweO01uO22tCMREWlwKjlUZvlyGDAAdtwRTj017WhERBqcSg6VmToVPv4Y7rkHCgrSjkZEpMGp5FCZSZPieffd041DRCQlSg6VmTwZ1loLOndOOxIRkVQoOVRm0iTYZRdoptMjIvlJV7/yVq6MksOuu6YdiYhIapQcyvvkE/jhB+jaNe1IRERSo+RQXkljtEoOIpLHlBzKmzQJmjeHHXZIOxIRkdQoOZT33nuw9daw5pppRyIikholh/I+/TSmBRURyWNKDuXNnKnkICJ5T8khU3ExfPstbLll2pGIiKRKySHTp5/Gs0oOIpLnlBwyzZwZzyo5iEieU3LIpJKDiAiQUnIws2PNbJqZrTSzbhnLO5jZYjObnDxuadDAZs6ENdaAwsIGPayISK5Jaz6HqcDRwK2VrPvY3bs2bDiJTz+NKiUNuCcieS6V5ODu0wHMLI3DV23mTLU3iIgA5u7pHdxsLHC+u49P3ncApgEfAAuAi9395So+2x/oD1BYWFg0dOjQWh+/uLiYNm3a/PR+76OP5pu99+aD88+v9b7qU/m4ckWuxgW5G5viqp1cjQtyN7bViatHjx4T3L1bpSvdPSsPYDRRfVT+0Stjm7FAt4z3LYH1ktdFwCxg7ZqOVVRU5HUxZsyY0jeLFrmD+z//Wad91acyceWQXI3LPXdjU1y1k6txuedubKsTFzDeq7iuZq1ayd0PqMNnlgJLk9cTzOxjYBtgfD2HV9Fnn8WzqpVERHLrVlYz28DMCpLXHYHOwIwGOfjs2fG8+eYNcjgRkVyW1q2sR5nZbGAv4Ckzey5Z1R2YYmaTgUeBs9z9uwYJqiQ5bLZZgxxORCSXpXW30nBgeCXLhwHDGj4iSpPDppumcngRkVySU9VKqZo9G9ZbD1q1SjsSEZHUKTmUmD1bVUoiIgklhxJKDiIiP1FyKKHkICLyEyUHgCVL4JtvlBxERBJKDgBz5sSzkoOICKDkENTHQUSkDCUHUHIQESlHyQFKq5XUAU5EBFByCLNnwzrrQNu2aUciIpITlBwgSg6bbJJ2FCIiOUPJAWDePFh33bSjEBHJGUoOAPPnR7WSiIgASg5ByUFEpAwlB1ByEBEpR8kBlBxERMpRcli6FJYtU3IQEcmg5DB/fjyvvXa6cYiI5BAlh5LkoJKDiMhPlByUHEREKlByUHIQEalAyUHJQUSkAiWHBQviWclBROQnSg66W0lEpAIlByUHEZEKlBzmz4fWraFFi7QjERHJGUoOGjpDRKQCJQclBxGRCpQclBxERCpQcliwQI3RIiLlKDmo5CAiUoGSg5KDiEgFSg5KDiIiFeR1crDly2HRIiUHEZFyUkkOZna1mb1nZlPMbLiZtctY9xcz+8jM3jezg7MZR8HChfFCyUFEpIy0Sg6jgB3dfWfgA+AvAGa2PdAX2AHoCdxsZgXZCqL5okXxQncriYiUkUpycPf/ufvy5O0bwGbJ617AUHdf6u6fAB8Bu2crjuYqOYiIVMrcPd0AzJ4AHnL3+8xsEPCGu9+XrLsdeMbdH63kc/2B/gCFhYVFQ4cOrfWx/f332eHBB/msXz+KO3dere9Rn4qLi2nTpk3aYVSQq3FB7samuGonV+OC3I1tdeLq0aPHBHfvVulKd8/KAxgNTK3k0Stjm4uA4ZQmqUHACRnrbwd613SsoqIir4sxY8bU6XPZprhqL1djU1y1k6txuedubKsTFzDeq7iuNq9TulkF7n5AdevN7BTgMGD/JEiAOcDmGZttliwTEZEGlNbdSj2BC4Aj3H1RxqqRQF8za2lmWwGdgXFpxCgiks+yVnKowSCgJTDKzCDaGc5y92lm9jDwLrAcONvdV6QUo4hI3kolObj71tWsuxy4vAHDERGRcvK6h7SIiFROyUFERCpQchARkQqUHEREpILUe0jXBzP7Gvi0Dh9dH/imnsOpD4qr9nI1NsVVO7kaF+RubKsT15buvkFlK5pEcqgrMxvvVXUdT5Hiqr1cjU1x1U6uxgW5G1u24lK1koiIVKDkICIiFeR7chicdgBVUFy1l6uxKa7aydW4IHdjy0pced3mICIilcv3koOIiFRCyUFERCrI2+RgZj3N7H0z+8jMBqQYx+ZmNsbM3jWzaWb2h2T5QDObY2aTk8ehKcQ208zeSY4/PlnW3sxGmdmHyfO6DRzTthnnZLKZLTCzc9M6X2Z2h5l9ZWZTM5ZVeo4s/F/yb26Kme3WwHFdbWbvJccebmbtkuUdzGxxxrm7pYHjqvJvZ2Z/Sc7X+2Z2cAPH9VBGTDPNbHKyvCHPV1XXh+z/G6tqFqCm/AAKgI+BjsAawNvA9inFsjGwW/K6LfABsD0wEDg/5fM0E1i/3LKrgAHJ6wHAlSn/Hb8EtkzrfAHdgd2AqTWdI+BQ4BnAgD2BNxs4roOA5snrKzPi6pC5XQrnq9K/XfL/4G1ieP+tkv+zBQ0VV7n11wKXpHC+qro+ZP3fWL6WHHYHPnL3Ge6+DBgK9EojEHf/wt0nJq9/AKYDm6YRyyrqBdydvL4bODK9UNgf+Njd69I7vl64+0vAd+UWV3WOegH3eHgDaGdmGzdUXO7+P3dfnrx9g5hpsUFVcb6q0gsY6u5L3f0T4CPi/26DxmUx6cyvgAezcezqVHN9yPq/sXxNDpsCszLezyYHLshm1gHYFXgzWfS7pGh4R0NX3yQc+J+ZTTCz/smyQnf/Inn9JVCYQlwl+lL2P2za56tEVecol/7dnUb8wiyxlZlNMrMXzWyfFOKp7G+XK+drH2Cuu3+YsazBz1e560PW/43la3LIOWbWBhgGnOvuC4D/Ap2ArsAXRLG2of3C3XcDDgHONrPumSs9yrGp3AttZmsARwCPJIty4XxVkOY5qoqZXUTMtHh/sugLYAt33xX4I/CAma3dgCHl5N8uw3GU/RHS4OerkuvDT7L1byxfk8McYPOM95sly1JhZi2IP/z97v4YgLvPdfcV7r4SuI0sFaer4+5zkuevgOFJDHNLiqnJ81cNHVfiEGCiu89NYkz9fGWo6hyl/u/OzE4BDgP6JRcVkmqbb5PXE4i6/W0aKqZq/na5cL6aA0cDD5Usa+jzVdn1gQb4N5avyeEtoLOZbZX8Au0LjEwjkKQ+83Zgurtfl7E8s57wKGBq+c9mOa61zKxtyWuiMXMqcZ5OTjY7GRjRkHFlKPNrLu3zVU5V52gkcFJyR8mewPyMqoGsM7OewAXAEe6+KGP5BmZWkLzuCHQGZjRgXFX97UYCfc2spZltlcQ1rqHiShwAvOfus0sWNOT5qur6QEP8G2uIFvdcfBCt+h8QWf+iFOP4BVEknAJMTh6HAvcC7yTLRwIbN3BcHYk7Rd4GppWcI2A94HngQ2A00D6Fc7YW8C2wTsayVM4XkaC+AH4k6ndPr+ocEXeQ3JT8m3sH6NbAcX1E1EeX/Du7Jdn2mORvPBmYCBzewHFV+bcDLkrO1/vAIQ0ZV7L8LuCscts25Pmq6vqQ9X9jGj5DREQqyNdqJRERqYaSg4iIVKDkICIiFSg5iIhIBUoOIiJSgZKDpMLM3MyuzXh/vpkNrKd932VmvetjXzUc51gzm25mY1Zx+6ctGQm1HmPokDmSaMbyTczs0fo8VrLfrpbCCMHS8JQcJC1LgaPNbP20A8mU9IhdVacDv3b3Hquysbsf6u7z6hRYLbn75+6ejQTZlbjPXpo4JQdJy3Ji7tvzyq8o/8vfzIqT518mA52NMLMZZnaFmfUzs3EW8050ytjNAWY23sw+MLPDks8XWMxp8FYyyNuZGft92cxGAu9WEs9xyf6nmtmVybJLiA5Kt5vZ1eW239jMXrIY639qycBsFnMCrJ+8/pvFHAWvmNmDZnZ+snysmV2ZfKcPMj7bIYlxYvLYu7qTm1miMLNTzOwxM3vWYvz/qzLPrZldbzFXwPNmtkFGHN2S1+snsa8B/APok3y3Pma2r5XOazCppFe9NH61+ZUkUt9uAqZkXqxWwS5AF2J45RnAEHff3WISlN8D5ybbdSDG6OkEjDGzrYGTiOEEfmZmLYFXzex/yfa7ATt6DA39EzPbhJj7oAj4nhil9kh3/4eZ7UfMQzC+XIzHA8+5++XJMAuty+3zZ0Qv212AFkQv2wkZmzRPvtOhwKXEEA5fAQe6+xIz60z06O1Wi/PWlRjRcynwvpnd6O6ziN7m4939vCThXQr8rrIduPuyZJtu7v675Ls8AZzt7q9aDA63pBYxSQ5TyUFS4zG65D3AObX42FseY9wvJYYIKLm4v0MkhBIPu/tKj2GWZwDbEeNDnWQxo9ebxBAEnZPtx5VPDImfAWPd/WuPuRDuJyaGqTZG4NSkDWUnj3H4M/0cGOHuS5J1T5RbXzK42oSM79QCuM3M3iFGot2+hhjKe97d57v7EqJ0tGWyfCWlg8rdR5SGauNV4DozOwdo56XzRUgjp+QgabuBqLtfK2PZcpJ/m2bWjJitr8TSjNcrM96vpGxJuPy4ME6MO/N7d++aPLZy95LksnB1vkSZA8XEMd2J0TDvMrOTarmLku+0gtLvdB4wlyhtdKPsOanNPsvvt7yS8/bT3wBYs6qduvsVwBlAK6Iktl0t45IcpeQgqXL374CHiQRRYiZRjQMxZ0OLOuz6WDNrlrRDdCQGbnsO+I3FEMiY2TYWI85WZxywb1LvXkCMBvtidR8wsy2JyWFuA4YQVVaZXgUON7M1k6qYw1bh+6wDfOExrPWJxBSp9aEZUNK+czzwSvJ6JqV/g8yG7R+I6SoBMLNO7v6Ou19JlJiUHJoIJQfJBdcCmXct3UZckN8G9qJuv+o/Iy7szxCjai4hLtTvAhOTxtpbqaHdzWO44wHAGGKE2gnuXtMw5b8E3jazSUAf4D/l9vkWMfrolCS+d4D5NezzZuDk5JxsR/2VdBYCuyfnYz+iwRngGiKRTqLs32YMsH1JgzRwbtLoPoUY0TRzdjlpxDQqq0gKzKyNuxebWWvgJaC/J3MFN3Acxe7epqGPK7lPdyuJpGOwmW1P1OffnUZiEKmOSg4iIlKB2hxERKQCJQcREalAyUFERCpQchARkQqUHEREpIL/Dz+nwGDUYNCrAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Signal inputs\n", + "# . Warning: do use not too high values for N_samples and S_max to avoid too long compute time.\n", + "N_samples = 1000\n", + "S_max = 200\n", + "S_arr = np.arange(1, S_max + 1)\n", + "\n", + "sigma_weak = 0.05\n", + "sigma_other = 0.5\n", + "\n", + "si_weak = np.random.randn(N_samples)\n", + "si_weak *= sigma_weak / np.std(si_weak)\n", + "\n", + "# Beamformer sum(S)\n", + "bf_weak_std_arr = []\n", + "bf_other_std_arr = []\n", + "bf_sys_std_arr = []\n", + "bf_SNR_dB_arr = []\n", + "for S in S_arr:\n", + " # The weak signal in the beamlet adds coherently for all signal inputs\n", + " bf_weak = S * si_weak\n", + " bf_weak_std = np.std(bf_weak)\n", + " bf_weak_std_arr.append(bf_weak_std)\n", + " \n", + " # The other signals from other directions add incoherently\n", + " bf_other = np.zeros(N_samples)\n", + " for si in range(1, S + 1):\n", + " si_other = np.random.randn(N_samples)\n", + " si_other *= sigma_other / np.std(si_other)\n", + " bf_other += si_other\n", + " bf_other_std = np.std(bf_other)\n", + " bf_other_std_arr.append(bf_other_std)\n", + " \n", + " # Total BF output\n", + " bf_sys_std = np.std(bf_weak + bf_other)\n", + " bf_sys_std_arr.append(bf_sys_std)\n", + " \n", + " SNR_dB = 20 * np.log10(bf_weak_std / bf_other_std)\n", + " bf_SNR_dB_arr.append(SNR_dB)\n", + "\n", + "plt.figure(1)\n", + "plt.plot(S_arr, bf_weak_std_arr, 'g', S_arr, bf_other_std_arr, 'b', S_arr, bf_sys_std_arr, 'r')\n", + "plt.title(\"Beamformer\")\n", + "plt.xlabel(\"Number of signal inputs\")\n", + "plt.ylabel(\"BF std\")\n", + "plt.legend(['bf_weak', 'bf_other', 'bf_sys'])\n", + "plt.grid()\n", + "\n", + "plt.figure(2)\n", + "plt.plot(S_arr, bf_SNR_dB_arr, 'r')\n", + "plt.title(\"Beamformer\")\n", + "plt.xlabel(\"Number of signal inputs\")\n", + "plt.ylabel(\"SNR [dB]\")\n", + "plt.grid()" + ] + }, + { + "cell_type": "markdown", + "id": "71aa6647", + "metadata": {}, + "source": [ + "**Conclusion:**\n", + "The beamformer improves the SNR of the weak signal by factor sqrt(S). For most very weak astronimical signals this is not enough to make them appear above the system noise, so then additional beamforming is needed or integration in time using a correlator." + ] + }, + { + "cell_type": "markdown", + "id": "84b8930c", + "metadata": {}, + "source": [ + "### 4.3 Correlation\n" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "470fd269", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SNR input = -33.979 dB\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Signal inputs\n", + "N_steps = 1000\n", + "\n", + "N_min = 100\n", + "N_max = 100000\n", + "n_incr = (N_max / N_min)**(1 / N_steps)\n", + "N_arr = []\n", + "for s in range(N_steps + 1):\n", + " n = int(N_min * n_incr**s)\n", + " N_arr.append(n)\n", + "\n", + "sigma_weak = 0.01\n", + "sigma_other = 0.5\n", + "\n", + "SNR_dB = 20 * np.log10(sigma_weak / sigma_other)\n", + "print(f\"SNR input = {SNR_dB:.3f} dB\")\n", + "\n", + "# Correlator mean(A * B)\n", + "cor_weak_arr = []\n", + "cor_other_arr = []\n", + "cor_sys_arr = []\n", + "cor_SNR_dB_arr = []\n", + "for N in N_arr:\n", + " si_weak = np.random.randn(N)\n", + " si_weak *= sigma_weak / np.std(si_weak)\n", + "\n", + " # Signal input A\n", + " sA_other = np.random.randn(N)\n", + " sA_other *= sigma_other / np.std(sA_other)\n", + " sA_sys = sA_other + si_weak\n", + "\n", + " # Signal input B\n", + " sB_other = np.random.randn(N)\n", + " sB_other *= sigma_other / np.std(sB_other)\n", + " sB_sys = sB_other + si_weak\n", + " \n", + " # Correlate A and B\n", + " cor_weak = np.mean(si_weak * si_weak)\n", + " cor_weak_arr.append(cor_weak)\n", + " cor_other = np.mean(sA_other * sB_other)\n", + " cor_other_arr.append(cor_other)\n", + " cor_sys = np.mean(sA_sys * sB_sys)\n", + " cor_sys_arr.append(cor_sys)\n", + " #print(f\"{N}, {cor_weak:9.6f}, {cor_other:9.6f}, {cor_sys:9.6f}\")\n", + "\n", + " SNR_dB = 10 * np.log10(np.abs(cor_weak / cor_other))\n", + " cor_SNR_dB_arr.append(SNR_dB)\n", + " #print(f\"{N}, SNR output = {SNR_dB:.0f} dB\")\n", + "\n", + "plt.figure(1)\n", + "plt.plot(N_arr, cor_weak_arr, 'g', N_arr, cor_other_arr, 'b', N_arr, cor_sys_arr, 'r')\n", + "plt.title(\"Correlator\")\n", + "plt.xlabel(\"Number of samples\")\n", + "plt.ylabel(\"Cross power\")\n", + "plt.legend(['cor_weak', 'cor_other', 'cor_sys'])\n", + "plt.grid()\n", + "\n", + "plt.figure(2)\n", + "plt.plot(N_arr, cor_SNR_dB_arr, 'r')\n", + "plt.title(\"Correlator\")\n", + "plt.xlabel(\"Number of samples\")\n", + "plt.ylabel(\"SNR [dB]\")\n", + "plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8713e865", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab