{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Case study: fixed link transmitter and RAS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## License\n", "\n", "```\n", "HOWTO: Calculate level of interference in radio-astronomical\n", "observations produced from a fixed link.\n", "Copyright (C) 2015+ Benjamin Winkel (bwinkel@mpifr.de)\n", "\n", "This program is free software; you can redistribute it and/or\n", "modify it under the terms of the GNU General Public License\n", "as published by the Free Software Foundation; either version 2\n", "of the License, or (at your option) any later version.\n", "\n", "This program is distributed in the hope that it will be useful,\n", "but WITHOUT ANY WARRANTY; without even the implied warranty of\n", "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n", "GNU General Public License for more details.\n", "\n", "You should have received a copy of the GNU General Public License\n", "along with this program; if not, write to the Free Software\n", "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from pycraf import conversions as cnv\n", "from pycraf import pathprof, protection, antenna, geometry\n", "from astropy import units as u" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## System parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before we calculate the path attenuation by the terrain around the radio telescope, we first need to determine the level of power that leaks into the RAS bands. Since the fixed-link (FL) service has its own allocations, the primary emission is completely legal. However, RAS observations in adjacent bands (allocated to RAS) could still see spectral side-lobe emission. Usually, this is suppressed with bandpass filters, but if the primary emission is to intense, and/or the bandpass attenuation is not large enough, the unwanted emission could exceed the RA.769 thresholds." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "total power, in FL band: 10.0 dB(mW)\n", "spectral power, in FL band: -13.0 dB(mW / MHz)\n", "spectral power, out of FL band: -73.0 dB(mW / MHz)\n" ] } ], "source": [ "# FL transmitter; \n", "freq_fl = 10 * u.GHz\n", "bandwidth_fl = 200 * u.MHz\n", "tx_power = 10 * u.mW # (over the used bandwidth)\n", "suppression = -60 * cnv.dBc\n", "\n", "# infer spectral power levels\n", "tx_spectral_power = tx_power / bandwidth_fl\n", "tx_oob_spectral_power = tx_spectral_power.to(cnv.dBm_MHz) + suppression\n", "\n", "print('total power, in FL band: {:.1f}'.format(tx_power.to(cnv.dBm)))\n", "print('spectral power, in FL band: {:.1f}'.format(tx_spectral_power.to(cnv.dBm_MHz)))\n", "print('spectral power, out of FL band: {:.1f}'.format(tx_oob_spectral_power.to(cnv.dBm_MHz)))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "total power, in RAS band: -53.0 dB(mW) = -83.0 dB(W)\n" ] } ], "source": [ "# RAS receiver\n", "freq_ras = 10.65 * u.GHz\n", "bandwidth_ras = 100 * u.MHz\n", "\n", "# Calculate total power leaking into RAS band:\n", "tx_power_ras_band = tx_oob_spectral_power.to(u.W / u.MHz) * bandwidth_ras\n", "print('total power, in RAS band: {:.1f} = {:.1f}'.format(\n", " tx_power_ras_band.to(cnv.dBm), tx_power_ras_band.to(cnv.dB_W),\n", " ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we have used the 10.65 GHz RAS allocation (bandwidth: 100 MHz), employing continuum thresholds. Whether continuum or spectral-line thresholds are appropriate is different for each case study and depends (of course) on the type of RAS observations, but also on the type of emission. In many cases, an observatory uses both types of observation. It is also worth noticing, that for real system the spectral mask of the transmitter is usually more complicated. One often makes a distinction between the out-of-band and spurious domain, the former being very close in frequency to the carrier frequency. Furthermore, the spectral response in the three domains is not completely flat. If a well-defined spectrum mask is provided, it is still just a matter of integrating the resulting (frequency-dependent) spectral power over the RAS bandwidth. Be sure, to do the integration in the linear domain, though, and not on the dB-scale!\n", "\n", "\n", "Note, that the RAS protection thresholds, as defined in ITU-R Rec. RA.769-2 are also provided by pycraf:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "<Table length=6>\n", "
| frequency | bandwidth | T_A | T_rx | T_rms | P_rms_nu | Plim | Plim_nu | Slim | Slim_nu | Efield | Efield_norm |
|---|---|---|---|---|---|---|---|---|---|---|---|
| MHz | MHz | K | K | mK | dB(W / Hz) | dB(W) | dB(W / Hz) | dB(W / m2) | dB(W / (Hz m2)) | dB(uV2 / m2) | dB(uV2 / m2) |
| float64 | float64 | float64 | float64 | float64 | float64 | float64 | float64 | float64 | float64 | float64 | float64 |
| 1414 | 27 | 12 | 10 | 0.095 | -268.8 | -204.5 | -278.8 | -180.1 | -254.4 | -34.3 | -48.6 |
| 1665 | 10 | 12 | 10 | 0.156 | -266.7 | -206.7 | -276.7 | -180.8 | -250.8 | -35.0 | -45.0 |
| 2695 | 10 | 12 | 10 | 0.156 | -266.7 | -206.7 | -276.7 | -176.6 | -246.6 | -30.9 | -40.9 |
| 4995 | 10 | 12 | 10 | 0.156 | -266.7 | -206.7 | -276.7 | -171.3 | -241.3 | -25.5 | -35.5 |
| 10650 | 100 | 12 | 10 | 0.049 | -271.7 | -201.7 | -281.7 | -159.7 | -239.7 | -13.9 | -33.9 |
| 15375 | 50 | 15 | 15 | 0.095 | -268.8 | -201.8 | -278.8 | -156.6 | -233.6 | -10.9 | -27.9 |