{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nyAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "float32_t fir_coeff[29] = {-0.0018225230, -0.0015879294, +0.0000000000, +0.0036977508, +0.0080754303, +0.0085302217, -0.0000000000, -0.0173976984, -0.0341458607, -0.0333591565, +0.0000000000, +0.0676308395, +0.1522061835, +0.2229246956, +0.2504960933, +0.2229246956, +0.1522061835, +0.0676308395, +0.0000000000, -0.0333591565, -0.0341458607, -0.0173976984, -0.0000000000, +0.0085302217, +0.0080754303, +0.0036977508, +0.0000000000, -0.0015879294, -0.0018225230}\n" ] } ], "source": [ "%matplotlib inline\n", "from numpy import sin, arange, pi\n", "from scipy.signal import lfilter, firwin\n", "from pylab import figure, plot, grid, show\n", " \n", "#------------------------------------------------\n", "# Create a signal for demonstration.\n", "#------------------------------------------------\n", "# 320 samples of (1000Hz + 15000 Hz) at 48 kHz\n", "sample_rate = 48000.\n", "nsamples = 320\n", " \n", "F_1KHz = 1000.\n", "A_1KHz = 1.0\n", " \n", "F_15KHz = 15000.\n", "A_15KHz = 0.5\n", " \n", "t = arange(nsamples) / sample_rate\n", "signal = A_1KHz * sin(2*pi*F_1KHz*t) + A_15KHz*sin(2*pi*F_15KHz*t)\n", " \n", "#------------------------------------------------\n", "# Create a FIR filter and apply it to signal.\n", "#------------------------------------------------\n", "# The Nyquist rate of the signal.\n", "nyq_rate = sample_rate / 2.\n", " \n", "# The cutoff frequency of the filter: 6KHz\n", "cutoff_hz = 6000.0\n", " \n", "# Length of the filter (number of coefficients, i.e. the filter order + 1)\n", "numtaps = 29\n", " \n", "# Use firwin to create a lowpass FIR filter\n", "fir_coeff = firwin(numtaps, cutoff_hz/nyq_rate)\n", " \n", "# Use lfilter to filter the signal with the FIR filter\n", "filtered_signal = lfilter(fir_coeff, 1.0, signal)\n", " \n", "#------------------------------------------------\n", "# Plot the original and filtered signals.\n", "#------------------------------------------------\n", " \n", "# The first N-1 samples are \"corrupted\" by the initial conditions\n", "warmup = numtaps - 1\n", " \n", "# The phase delay of the filtered signal\n", "delay = (warmup / 2) / sample_rate\n", " \n", "figure(1)\n", "# Plot the original signal\n", "plot(t, signal)\n", " \n", "# Plot the filtered signal, shifted to compensate for the phase delay\n", "plot(t-delay, filtered_signal, 'r-')\n", " \n", "# Plot just the \"good\" part of the filtered signal. The first N-1\n", "# samples are \"corrupted\" by the initial conditions.\n", "plot(t[warmup:]-delay, filtered_signal[warmup:], 'g', linewidth=4)\n", " \n", "grid(True)\n", " \n", "show()\n", " \n", "#------------------------------------------------\n", "# Print values\n", "#------------------------------------------------\n", "def print_values(label, values):\n", " var = \"float32_t %s[%d]\" % (label, len(values))\n", " print \"%-30s = {%s}\" % (var, ', '.join([\"%+.10f\" % x for x in values]))\n", " \n", "#print_values('signal', signal)\n", "print_values('fir_coeff', fir_coeff)\n", "#print_values('filtered_signal', filtered_signal)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }