aboutsummaryrefslogtreecommitdiffstats
path: root/notebooks
diff options
context:
space:
mode:
Diffstat (limited to 'notebooks')
-rw-r--r--notebooks/Fading.ipynb108
1 files changed, 108 insertions, 0 deletions
diff --git a/notebooks/Fading.ipynb b/notebooks/Fading.ipynb
new file mode 100644
index 0000000..e320893
--- /dev/null
+++ b/notebooks/Fading.ipynb
@@ -0,0 +1,108 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "e19197ba",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "\n",
+ "import matplotlib.pyplot as plt\n",
+ "import matplotlib.image as mpimg"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ea1a7a45",
+ "metadata": {},
+ "source": [
+ "# Simple 2 tap fading"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "4465dcd9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "<matplotlib.collections.PathCollection at 0x7f16d0427e20>"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "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": [
+ "nsamples = 200\n",
+ "samp_rate = 32e3\n",
+ "\n",
+ "# QPSK modulation\n",
+ "samp_per_sym = 4\n",
+ "symbol_map = {\n",
+ " 0: 1 + 1j,\n",
+ " 1: -1 + 1j,\n",
+ " 2: -1 - 1j,\n",
+ " 3: 1 - 1j,\n",
+ "}\n",
+ "\n",
+ "# generate random data for testing\n",
+ "data = np.random.randint(low=0, high=4, size=nsamples)\n",
+ "\n",
+ "# modulate and add AWGN\n",
+ "noise = np.random.normal(0, .03, size=nsamples) + 1j * np.random.normal(0, .03, size=nsamples)\n",
+ "sig = np.array(list(map(lambda v: symbol_map[v], data))) + noise\n",
+ "\n",
+ "# add 2 tap frequency selective channel\n",
+ "delay = np.zeros(5 * samp_per_sym)\n",
+ "one = np.array([1])\n",
+ "taps = np.concatenate([one, delay, .2 * one])\n",
+ "\n",
+ "# apply channel\n",
+ "sig_fading = np.convolve(sig, taps)\n",
+ "\n",
+ "# plot figure\n",
+ "fig = plt.figure()\n",
+ "plt.scatter(sig_fading.real, sig_fading.imag)"
+ ]
+ }
+ ],
+ "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.9.2"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}