{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Experiment 4e - Filters - Remez filter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remez filter is a multiband filter, allowing us to define bands and their gains" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os, sys\n", "nb_dir = os.path.split(os.getcwd())[0]\n", "if nb_dir not in sys.path:\n", " sys.path.append(nb_dir)\n", " \n", "%matplotlib inline\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from directdemod import filters, constants\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from scipy import signal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 200000, 300000, 500000, 600000, 800000, 900000, 1000000] [1, 0, 5, 0.01]\n" ] }, { "data": { "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Fs = 2048000\n", "\n", "bh = filters.remez(Fs, [[0, 200000], [300000, 500000], [600000, 800000], [900000, 1000000]], [1, 0, 5, 0.01])\n", "\n", "w, h = signal.freqz(bh.getB, bh.getA)\n", "\n", "\n", "w *= Fs/(2*np.pi) \n", "\n", "plt.clf() \n", "fig = plt.figure()\n", "plt.title('Digital filter frequency response')\n", "ax1 = fig.add_subplot(111)\n", "\n", "plt.plot(w, 20 * np.log10(abs(h)), 'b')\n", "plt.ylabel('Amplitude [dB]', color='b')\n", "plt.xlabel('Frequency [Hz]')\n", "\n", "ax2 = ax1.twinx()\n", "angles = np.unwrap(np.angle(h))\n", "plt.plot(w, angles, 'g')\n", "plt.ylabel('Angle (radians)', color='g')\n", "plt.grid()\n", "plt.axis('tight')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusions\n", "\n", "Remez band filter is very useful to get the desired band pass filtering in the shape that we want" ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }