{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "5d5acf43", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from numpy_ringbuffer import RingBuffer\n", "\n", "import matplotlib.pyplot as plt\n", "import matplotlib.image as mpimg" ] }, { "cell_type": "markdown", "id": "4b294887", "metadata": {}, "source": [ "# Digital Frame Synchronization\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "5bec50ff", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Header sequence (N=16): [1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1]\n", "Cross correlation: [ 3. 4. 5. 5. 6. 4. 4. 6. 4. 4. 5. 8. 7. 10. 8. 7. 8. 10.\n", " 7. 8. 8. 9. 14. 11. 9. 10. 12. 9. 13. 9. 9. 11. 13. 9. 12. 11.\n", " 9. 9. 13. 10. 9. 11. 9. 14. 12. 9. 10. 11. 8. 11. 6. 9. 8. 11.\n", " 6. 7. 9. 8. 7. 4. 4. 9. 9. 7. 6. 7. 9. 11. 8. 7. 10. 12.\n", " 10. 11. 11. 10. 9. 10. 9. 7. 10. 7. 9. 6. 7. 6. 5. 4. 5. 2.\n", " 4. 3.]\n", "Correlation peak value: 14.0\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Create test data\n", "seq = np.array([(0xbeef >> i) & 0x1 for i in range(4 * 4)])\n", "# seq = np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1])\n", "\n", "stream = np.concatenate([\n", " np.random.randint(low=0, high=2, size=30), seq, np.random.randint(low=0, high=2, size=30)\n", "])\n", "\n", "print(f\"Header sequence (N={len(seq)}): {seq}\")\n", "# print(f\"Data stream: {stream}\")\n", "\n", "# compute cross correlation\n", "def distance(v):\n", " return len(seq) - sum(np.logical_xor(v, seq))\n", "\n", "fifo = RingBuffer(len(seq))\n", "xcorr = RingBuffer(len(stream) + len(seq))\n", "\n", "## fill FIFO with zeros\n", "fifo.extend(np.zeros(fifo.maxlen))\n", "\n", "for i in range(len(stream) + len(seq)):\n", " #print(np.array(fifo))\n", " xcorr.append(distance(np.array(fifo)))\n", " \n", " # if the stream is finished use zeros\n", " fifo.pop()\n", " if i < len(stream):\n", " fifo.appendleft(stream[i])\n", " else:\n", " fifo.appendleft(0)\n", "\n", "print(f\"Cross correlation: {np.array(xcorr)}\")\n", "print(f\"Correlation peak value: {max(np.array(xcorr))}\")\n", "\n", "plt.figure(figsize = (25, 5))\n", "plt.stem(np.array(xcorr))" ] } ], "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 }