{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "EE120 Spring 2014 Problem Set 9, Problem 4. version 1.1" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Using matplotlib backend: Qt4Agg\n", "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": true, "input": [ "import numpy as np\n", "import scipy as sp\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "np.set_printoptions(precision = 1, suppress = True, linewidth = 132)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "# Graphing helper function\n", "def setup_graph(title='', x_label='', y_label='', fig_size=None):\n", " fig = plt.figure()\n", " if fig_size != None:\n", " fig.set_size_inches(fig_size[0], fig_size[1])\n", " ax = fig.add_subplot(111)\n", " ax.set_title(title)\n", " ax.set_xlabel(x_label)\n", " ax.set_ylabel(y_label)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 31 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Problem 4a. Plot magnitude and phase for all pass H(z)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "omega = np.linspace(0,6.28,100)\n", "#####\n", "##### your expression for H = () goes here\n", "H = np.exp(1j*omega) ##### CHANGE THIS TO CORRECT H\n", "#####\n", "#print H\n", "plot(omega,np.angle(H))\n", "plot(omega,np.abs(H))\n", "#print H[2:20]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 44, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 44 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Problem 4b. Apply LDE corresponding to H(z) to the sinusoidal signal x()." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# setup sinusoids\n", "t1 = np.linspace(0,1,1000)\n", "w1 = 50 * 2.0 * pi # first frequency\n", "w2 = 5 * 2.0 * pi # second frequency\n", "w3 = 2 * 2.0 * pi # third frequency\n", "# time function with two sinusoids\n", "x = cos(w1 * t1) + 1.5* cos(w2 * t1 + pi/4) + 0.5*sin(w3 * t1)\n", "setup_graph(title='$x(t))$', x_label='time', y_label='$x(t)$', fig_size=(6,3))\n", "_ = plt.plot(t1[0:100], x[0:100])\n", "# run signal through all pass filter\n", "# just implement LDE directly\n", "n = np.linspace(0,999,1000)\n", "y = np.zeros(1000) # initialize output vector\n", "for i in n:\n", "######### \n", " y[i] = x[i] ###### YOUR FUNCTION HERE\n", "####### \\\n", "\n", "print 'y=',y[0:8]\n", "setup_graph(title='$x_{ap}(t))$', x_label='time', y_label='$x(t)$', fig_size=(6,3))\n", "_ = plt.plot(t1[0:100], y[0:100])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "y= [ 2.1 1.8 1.3 0.7 0.1 -0.1 0.1 0.5]\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 42 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Import audio file." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# verify that .wav file can be raed and written correctly, number of bits, fixed vs floating, mono/stereo, etc\n", "from scipy.io import wavfile\n", "rate1,data1= wavfile.read('connecticut_yankee.wav') # stereo data\n", "print 'rate1 =', rate1\n", "length = np.size(data1)/2 #length for each channel\n", "data2 = data1 # initial copy\n", "print 'length = ', length\n", "for i in range(0,length):\n", " data2[i][0] = data1[i][0] - 4000 # copy left channel\n", " data2[i][1] = data1[i][1] + 4000 # copy left channel\n", "t1 = np.linspace(0, float(length)/float(rate1), length)\n", "print 't1 size, data2 size', np.size(t1), np.size(data2)\n", "_ = plt.plot(t1, data2)\n", "# now write data file for verification\n", "wavfile.write('cy-pad.wav', rate1, data2)\n", "# check that file is correctly written\n", "rate2,data2= wavfile.read('cy-pad.wav') # stereo data\n", "print 'rate2 =', rate2\n", "# print 'data2 =', data2[0:8]\n", "setup_graph(title='$x[n]$', x_label='$n$', y_label='$real x[n]$', fig_size=(6,3))\n", "_ = plt.plot(t1[30000:32000],data2[30000:32000].real)" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Problem 4c. Apply all-pass filter to left channel audio data and save file." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# run signal through all pass filter\n", "# just implement LDE directly\n", "rate1,data1= wavfile.read('connecticut_yankee.wav') # stereo data\n", "data3 = data1 # initial copy, data3 is output array\n", "print 'size dat1, data3', np.size(data1), np.size(data2)\n", "yl2 = 0 # initial value\n", "xl2 = data3[0][0] # initial value\n", "for i in range(1,length):\n", " ######\n", " \n", " YOUR CODE FOR LDE GOES HERE\n", " \n", " ###### \n", " data3[i][0] = yl2 # set left channel\n", "# data3[i][1] = 0 # null out right channel\n", "print 'data3 =', data3[0:8]\n", "setup_graph(title='$x[n]$', x_label='$n$', y_label='$y[n]$', fig_size=(6,3))\n", "_ = plt.plot(t1[30000:32000],data3[30000:32000].real)\n", "# now write data file for verification\n", "wavfile.write('cy-allpass.wav', rate1, data3)" ], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }