{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Mock power dataset testing"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from radiocalibrationtoolkit import *"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# some global plot settings\n",
"plt.rcParams[\"axes.labelweight\"] = \"bold\"\n",
"plt.rcParams[\"font.weight\"] = \"bold\"\n",
"plt.rcParams[\"font.size\"] = 16\n",
"plt.rcParams[\"legend.fontsize\"] = 14\n",
"\n",
"plt.rcParams[\"xtick.major.width\"] = 2\n",
"plt.rcParams[\"ytick.major.width\"] = 2\n",
"\n",
"plt.rcParams[\"xtick.major.size\"] = 5\n",
"plt.rcParams[\"ytick.major.size\"] = 5\n",
"\n",
"plt.rcParams[\"xtick.labelsize\"] = 14\n",
"plt.rcParams[\"ytick.labelsize\"] = 14"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# This ensures Plotly output works in multiple places:\n",
"# plotly_mimetype: VS Code notebook UI\n",
"# notebook: \"Jupyter: Export to HTML\" command in VS Code\n",
"# See https://plotly.com/python/renderers/#multiple-renderers\n",
"import plotly.io as pio\n",
"pio.renderers.default = \"plotly_mimetype+notebook\""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def dataset_test(\n",
" power_rec_file=\"\", power_sim_file=\"\", hw_file=\"\", temp_celsius=30, additional_noise=0\n",
"):\n",
" power_sim_DF = pd.read_csv(power_sim_file, index_col=0)\n",
" power_sim_DF.columns = power_sim_DF.columns.astype(float)\n",
" power_sim_DF.iloc[:, :] = power_sim_DF.values\n",
"\n",
" power_rec_DF = pd.read_csv(power_rec_file, index_col=0)\n",
" power_rec_DF.columns = power_rec_DF.columns.astype(float)\n",
" power_rec_DF.iloc[:, :] = power_rec_DF.values\n",
" power_rec_DF = power_rec_DF.loc[:, power_sim_DF.columns]\n",
"\n",
" hw_dict = read_hw_file(hw_file, interp_args={\"fill_value\": \"extrapolate\"})\n",
" hw_reponse_1 = hw_dict[\"RResponse\"][\"LNA\"]\n",
" hw_reponse_2 = hw_dict[\"RResponse\"][\"digitizer\"]\n",
" hw_reponse_3 = hw_dict[\"RResponse\"][\"cable_fromLNA2digitizer\"]\n",
" hw_reponse_4 = hw_dict[\"RResponse\"][\"impedance_matching_EW\"]\n",
"\n",
" # merge all hw responses to one function\n",
" def hw_response_func(x):\n",
" return dB2PowerAmp(\n",
" hw_reponse_1(x) + hw_reponse_2(x) + hw_reponse_3(x) + hw_reponse_4(x)\n",
" )\n",
"\n",
" # impedance function\n",
" impedance_func = hw_dict[\"IImpedance\"][\"antenna_EW\"]\n",
"\n",
" ###\n",
"\n",
" temp_celsius = temp_celsius\n",
" frequencies_MHz = np.linspace(30, 80, 51)\n",
" temperature_noise = (\n",
" 4\n",
" * constants.Boltzmann\n",
" * (temp_celsius + 273.15)\n",
" * impedance_func(frequencies_MHz)\n",
" )\n",
" hw_amplification = hw_response_func(frequencies_MHz)\n",
" impedance = impedance_func(frequencies_MHz)\n",
" additional_noise = additional_noise / impedance\n",
" q = temperature_noise * hw_amplification / impedance * 1e12 + additional_noise\n",
"\n",
" q = integrate_spectral_density(\n",
" pd.DataFrame([q], columns=frequencies_MHz),\n",
" integrated_MHz_bands=np.linspace(30, 80, 51),\n",
" integrating_method=\"on_discontinuous_function\",\n",
" )\n",
" frequencies_MHz = power_rec_DF.columns.values\n",
"\n",
" q = q.values.flatten()\n",
"\n",
" ###\n",
" fig, ax = plt.subplots()\n",
" ax.plot(\n",
" power_sim_DF.columns.values, (power_sim_DF.mean().values + q)[:], label=\"predicted\"\n",
" )\n",
" ax.plot(\n",
" power_rec_DF.columns.values, (power_rec_DF.mean().values)[:], label=\"mock\"\n",
" )\n",
" ax.legend()\n",
" ax.set_xlabel(\"frequency [MHz]\")\n",
" ax.set_ylabel(\"power [pW]\")\n",
"\n",
" fig, ax = plt.subplots()\n",
" ax.plot(\n",
" power_sim_DF.columns.values,\n",
" (power_sim_DF.mean().values + q) / (power_rec_DF.mean().values) - 1,\n",
" )\n",
" ax.set_xlabel(\"frequency [MHz]\")\n",
" ax.set_ylabel(\"(sim+TN)/mock - 1\")\n",
"\n",
" fig = px.imshow(\n",
" power_rec_DF.T / (power_sim_DF + q).values.T - 1,\n",
" width=600,\n",
" aspect=\"cube\",\n",
" color_continuous_scale=\"jet\",\n",
" )\n",
" fig.update_layout(\n",
" xaxis=dict(title=\"LST\", tickprefix=\"\", ticksuffix=\"\", dtick=2),\n",
" yaxis=dict(\n",
" title=\"frequency [MHz]\",\n",
" tickprefix=\"\",\n",
" ticksuffix=\"\",\n",
" range=(30, 80),\n",
" tick0=0,\n",
" dtick=10,\n",
" autorange=False,\n",
" ),\n",
" coloraxis=dict(\n",
" colorbar=dict(\n",
" title=dict(\n",
" text=\"(sim+TN)/mock - 1\",\n",
" side=\"right\",\n",
" ),\n",
" tickprefix=\"\",\n",
" ticksuffix=\"\",\n",
" ),\n",
" ),\n",
" font=dict(\n",
" # family=font,\n",
" size=20,\n",
" color=\"black\",\n",
" ),\n",
" )\n",
" fig.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"power_rec_file_ideal_list = [\n",
" \"./mock_power_datasets/mock_power_dataset-isoAnt_GSM16_N10000_temp30.0C_0.0additionalnoise_rounding-False.csv\",\n",
" \"./mock_power_datasets/mock_power_dataset-isoAnt_GSM16_N10000_temp30.0C_5e-16additionalnoise_rounding-False.csv\",\n",
" \"./mock_power_datasets/mock_power_dataset-isoAnt_GSM16_N10000_temp30.0C_0.0additionalnoise_rounding-True.csv\"\n",
"]\n",
"\n",
"power_rec_file_real_list = [\n",
" \"./mock_power_datasets/mock_power_dataset-Salla_EW_GSM16_N10000_temp30.0C_0.0additionalnoise_rounding-False.csv\",\n",
" \"./mock_power_datasets/mock_power_dataset-Salla_EW_GSM16_N10000_temp30.0C_0.0additionalnoise_rounding-True.csv\",\n",
"]\n",
"\n",
"power_sim_ideal = './simulated_power_datasets/isoAnt_flathw_GSM16.csv'\n",
"power_sim_real = './simulated_power_datasets/Salla_EW_GSM16.csv' \n",
"\n",
"# read HW response\n",
"hw_file_ideal = \"./antenna_setup_files/HardwareProfileList_flat.xml\"\n",
"hw_file_real = \"./antenna_setup_files/HardwareProfileList_realistic.xml\"\n",
"\n",
"\n",
"temp_celsius = 30\n",
"an = 5e-4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Isotropic antenna gain, flat HW response, no rounding, no extra noise"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"dataset_test(power_rec_file=power_rec_file_ideal_list[0], power_sim_file=power_sim_ideal, hw_file=hw_file_ideal, temp_celsius=30, additional_noise=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Isotropic antenna gain, flat HW response, no rounding, extra noise"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"dataset_test(power_rec_file=power_rec_file_ideal_list[1], power_sim_file=power_sim_ideal, hw_file=hw_file_ideal, temp_celsius=30, additional_noise=an)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Isotropic antenna gain, flat HW response, rounded, no extra noise"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"dataset_test(power_rec_file=power_rec_file_ideal_list[2], power_sim_file=power_sim_ideal, hw_file=hw_file_ideal, temp_celsius=30, additional_noise=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Realistic antenna gain and HW response, no rounding, no extra noise"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"dataset_test(power_rec_file=power_rec_file_real_list[1], power_sim_file=power_sim_real, hw_file=hw_file_real, temp_celsius=30, additional_noise=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Realistic antenna gain and HW response, rounded, no extra noise"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"dataset_test(power_rec_file=power_rec_file_real_list[1], power_sim_file=power_sim_real, hw_file=hw_file_real, temp_celsius=30, additional_noise=0)"
]
}
],
"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.12"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}