From e3a7f5bafec6715cd11555c39925665c78029dd9 Mon Sep 17 00:00:00 2001 From: Arturs Artamonovs Date: Sat, 26 Oct 2024 23:21:13 +0100 Subject: Added old lab files for modulations and IQ tests --- Mod/Lab/LoadFM.ipynb | 341 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 Mod/Lab/LoadFM.ipynb (limited to 'Mod/Lab/LoadFM.ipynb') diff --git a/Mod/Lab/LoadFM.ipynb b/Mod/Lab/LoadFM.ipynb new file mode 100644 index 0000000..bcdefe7 --- /dev/null +++ b/Mod/Lab/LoadFM.ipynb @@ -0,0 +1,341 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 17, + "id": "82d2268f-fc34-4860-82b8-d69ac0d11cb5", + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "\n", + "import math\n", + "import numpy as np\n", + "import matplotlib\n", + "import matplotlib.pylab as pylab\n", + "import matplotlib.pyplot as plot\n", + "import scipy.fftpack\n", + "from scipy.signal import butter,filtfilt\n", + "import wave\n", + "import struct" + ] + }, + { + "cell_type": "markdown", + "id": "6a1035aa-9c97-4c53-9acb-f0e446f6aa5c", + "metadata": {}, + "source": [ + "# Helper functions to draw fft" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c4dcfa96-7280-48bc-9d73-70eb402d3cc5", + "metadata": {}, + "outputs": [], + "source": [ + "#some util for fft\n", + "def draw_fft(signal,title=\"just FFT\"):\n", + " len_signal = len(signal)\n", + " yfft = scipy.fftpack.fft(signal)\n", + " xf = np.linspace(0.0, 1.0/(2.0*(1.0/len_signal)), len_signal//2)\n", + " #plot.plot(xf,2.0/len(signal) * np.abs(yfft[:len(signal)//2]))\n", + " plot.plot(xf,2.0/len_signal * np.abs(yfft[:len_signal//2]))\n", + " plot.title(title)\n", + " plot.show()\n", + "\n", + "def plot_signal(signal,title=\"signal SIMPLE\"):\n", + " xf = np.linspace(0.0,1.0,len(signal))\n", + " plot.plot(xf,signal)\n", + " plot.title(title)\n", + " plot.show()" + ] + }, + { + "cell_type": "markdown", + "id": "d0c746d3-7ab8-48f0-870f-76e9c195f975", + "metadata": {}, + "source": [ + "# Modulate FM function" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "f31902e2-46ab-4cab-939c-91c7b7ebac49", + "metadata": {}, + "outputs": [], + "source": [ + "def mod_fm(amplitude, signal, fc, fdev, samplerate):\n", + " modulated = []\n", + " \n", + " start = 0.0\n", + " for i in range(0,len(signal)):\n", + " #recalculate freq step each signal level\n", + " signal_fdev = fdev*signal[i]\n", + " sample_per_hz = 1.0*samplerate/(fc+signal_fdev)\n", + " hz_step = 2*math.pi/sample_per_hz\n", + " \n", + " \n", + " #carrier = math.cos(start)\n", + " modulated.append(amplitude*math.cos(start))\n", + " #modulated.append(amplitude*carrier)\n", + " start+=hz_step\n", + " return modulated\n", + "\n", + "def generate_sin(amplitude,freq,samplerate,samplenum, noise=True):\n", + " ret = []\n", + " gausian = []\n", + " sample_per_hz = 1.0*samplerate/freq\n", + " hz_step = 2*math.pi/sample_per_hz\n", + " start = 0.0\n", + " if noise:\n", + " gausian = np.random.normal(0,0.1,samplenum)\n", + " for i in range(0,samplenum):\n", + " if noise:\n", + " ret.append(amplitude*math.cos(start)+gausian[i])\n", + " else:\n", + " ret.append(amplitude*math.cos(start))\n", + " start += hz_step\n", + " return ret" + ] + }, + { + "cell_type": "markdown", + "id": "490deecd-b6d4-4208-ae1c-fdb814c3ce78", + "metadata": {}, + "source": [ + "# Low pass filter from scipy" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "f509d234-e576-486b-b142-f6633e7f53a8", + "metadata": {}, + "outputs": [], + "source": [ + "def lpf_filter(signal):\n", + " sos = signal.butter(10, 150, 'low', fs=1000, output='sos')\n", + " return signal.sosfilt(sos, signal)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "f47bd25a-4c06-4ef3-80df-372a9635acc4", + "metadata": {}, + "outputs": [], + "source": [ + "def output_wav(fname,signal,samplerate=48000,channel=1):\n", + " wav = wave.open(fname,\"w\")\n", + " wav.setnchannels(channel)\n", + " wav.setframerate(samplerate)\n", + " wav.setsampwidth(2)\n", + " # assume datat -1...+1\n", + " for data in signal:\n", + " conv = struct.pack(\"" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "signal = generate_sin(0.5, 100, 40000, 40000, False)\n", + "print(\"signal samples\", len(signal))\n", + "plot_signal(signal[0:10000])\n", + "draw_fft(signal)" + ] + }, + { + "cell_type": "markdown", + "id": "ac3146e2-b41d-4462-ab91-d497a78dc90c", + "metadata": {}, + "source": [ + "# Modulate FM" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "17d8234a-7016-490f-b405-5c71dd1cce0b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "samples modulated = 40000\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fm_mod = mod_fm(0.5,signal, 10000, 500, 40000)\n", + "print(\"samples modulated = \",len(fm_mod))\n", + "plot_signal(fm_mod[0:1000])\n", + "draw_fft(fm_mod)" + ] + }, + { + "cell_type": "markdown", + "id": "d12c8ddf-ce88-43d7-9518-74e8627ff232", + "metadata": {}, + "source": [ + "# Output fm modulated signal to wav" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "533bee02-a968-4c6c-b884-5f0d9fae965f", + "metadata": {}, + "outputs": [], + "source": [ + "# fname,signal,samplerate=48000,channel=1\n", + "output_wav(\"LoadFM.wav\",fm_mod,samplerate=40000,channel=2)" + ] + }, + { + "cell_type": "markdown", + "id": "1da9a01f-2e89-42d9-90f9-12d2d705d4c9", + "metadata": {}, + "source": [ + "# Filter signal, demodulation of FM" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "6a37742f-8f31-46f3-83ce-e08b9a558bca", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fm_demod = generate_sin(1.0, 10000, 40000, len(fm_mod), False)\n", + "for i in range(0,len(fm_demod)):\n", + " fm_demod[i] = fm_demod[i]*fm_mod[i]\n", + "plot_signal(fm_demod[0:1000])\n", + "draw_fft(fm_demod)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f975bba7-21ec-4a56-8b8a-f00e99c5055d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- cgit v1.2.3