153 lines
5.6 KiB
Plaintext
153 lines
5.6 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "59938c83",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Plot DSP Output\n",
|
|
"\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"PLOT = False\n",
|
|
"\n",
|
|
"dsp_desired_signal_r11 = np.genfromtxt(\"./simulation_data/complex_dsp_desired_signal_r11.txt\", dtype=int)/(2**(15)-1)\n",
|
|
"dsp_noise_signal_r11 = np.genfromtxt(\"./simulation_data/complex_dsp_noise_signal_r11.txt\", dtype=int)/(2**(15)-1)\n",
|
|
"dsp_noise_signal_vpu = np.genfromtxt(\"./simulation_data/complex_dsp_noise_signal_vpu.txt\", dtype=int)/(2**(15)-1)\n",
|
|
"dsp_corrupted_signal = np.genfromtxt(\"./simulation_data/complex_dsp_corrupted_signal.txt\", dtype=int)/(2**(15)-1)\n",
|
|
"t = np.linspace(0, len(dsp_corrupted_signal), len(dsp_corrupted_signal))/20000\n",
|
|
"\n",
|
|
"output = np.genfromtxt(\"./filter_output/complex_dsp_output.txt\", dtype=int)[:-1]/(2**(15)-1) # letzte Zeile löschen\n",
|
|
"\n",
|
|
"error_signal = (output - dsp_desired_signal_r11)\n",
|
|
"t2 = np.linspace(0, len(error_signal), len(error_signal))/20000\n",
|
|
"\n",
|
|
"# SNR davor/danach in dB berechnen, SNR Ratio berechnen, \n",
|
|
"snr_before = 10 * np.log10(np.trapz(dsp_desired_signal_r11**2, t) / np.trapz(dsp_noise_signal_r11**2, t))\n",
|
|
"snr_after = 10 * np.log10(np.trapz(dsp_desired_signal_r11**2, t) / np.trapz(error_signal**2, t2))\n",
|
|
"delta_snr = round(snr_after - snr_before, 2)\n",
|
|
"\n",
|
|
"# Plots des Filterprozesses\n",
|
|
"figure1, (ax0, ax1, ax2, ax3) = plt.subplots(4, 1, figsize=(15, 12), sharex=True, sharey=True)\n",
|
|
"ax0.set_ylim(-1, 1)\n",
|
|
"ax0.plot(t, dsp_desired_signal_r11, c='deepskyblue', label='Desired signal')\n",
|
|
"ax1.plot(t, dsp_corrupted_signal, c='royalblue', label='Corrupted signal')\n",
|
|
"ax2.plot(t, dsp_noise_signal_r11, c='chocolate', label='Reference noise signal')\n",
|
|
"ax3.plot(t, output, c='green', label=f'SNR Gain = {delta_snr} dB')\n",
|
|
"\n",
|
|
"ax0.text(0.5, -0.3, '(a) Desired signal',\n",
|
|
" transform=ax0.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax1.text(0.5, -0.3, '(b) Corrupted signal',\n",
|
|
" transform=ax1.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax2.text(0.5, -0.3, '(c) Reference noise signal',\n",
|
|
" transform=ax2.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.text(0.5, -0.5, f'(d) DSP Filter output (SNR Gain = {delta_snr} dB)',\n",
|
|
" transform=ax3.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.set_xlabel('time(s)', x=0.05)\n",
|
|
"ax0.set_ylabel('Amplitude')\n",
|
|
"ax1.set_ylabel('Amplitude')\n",
|
|
"ax2.set_ylabel('Amplitude')\n",
|
|
"ax3.set_ylabel('Amplitude')\n",
|
|
"\n",
|
|
"# Plots der Filterperfomanz\n",
|
|
"figure2, (ax4) = plt.subplots(1, 1, figsize=(15, 4), sharex=True)\n",
|
|
"ax4.set_ylim(-1, 1)\n",
|
|
"ax4.plot(t2, error_signal, c='purple', label='Error (Desired signal - Filter output)')\n",
|
|
"\n",
|
|
"ax4.text(0.5, -0.30, 'Error signal',\n",
|
|
" transform=ax4.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax4.set_xlabel('time(s)', x=0.05)\n",
|
|
"ax4.set_ylabel('Amplitude')\n",
|
|
"\n",
|
|
"#Grids direkt auf Subplots anwenden\n",
|
|
"ax0.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax1.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax2.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax3.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax4.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"\n",
|
|
"#Spines direkt auf Subplots anwenden\n",
|
|
"ax0.spines['top'].set_visible(False)\n",
|
|
"ax1.spines['top'].set_visible(False)\n",
|
|
"ax2.spines['top'].set_visible(False)\n",
|
|
"ax3.spines['top'].set_visible(False)\n",
|
|
"ax4.spines['top'].set_visible(False)\n",
|
|
"ax0.spines['right'].set_visible(False)\n",
|
|
"ax1.spines['right'].set_visible(False)\n",
|
|
"ax2.spines['right'].set_visible(False)\n",
|
|
"ax3.spines['right'].set_visible(False)\n",
|
|
"ax4.spines['right'].set_visible(False)\n",
|
|
"\n",
|
|
"# Schriftgrößen für LaTeX-Dokument\n",
|
|
"plt.rcParams.update({\n",
|
|
" \"text.usetex\": True,\n",
|
|
" \"font.family\": \"serif\",\n",
|
|
" 'font.size': 16, # Standardtext\n",
|
|
" 'axes.labelsize': 30, # Achsenbeschriftungen\n",
|
|
" 'xtick.labelsize': 25, # Tick-Beschriftungen\n",
|
|
" 'ytick.labelsize': 25,\n",
|
|
" 'legend.fontsize': 15 # Legende\n",
|
|
"})\n",
|
|
"\n",
|
|
"figure1.tight_layout()\n",
|
|
"figure2.tight_layout()\n",
|
|
"\n",
|
|
"if PLOT == True:\n",
|
|
" figure1.savefig(f'plots/fig_plot_1_dsp_complex', dpi=600)\n",
|
|
" figure2.savefig(f'plots/fig_plot_2_dsp_complex', dpi=600)\n",
|
|
"\n",
|
|
"plt.show()"
|
|
]
|
|
}
|
|
],
|
|
"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.10.4"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|