## Homework

There will be seven homework assignments (a.k.a. labs, a.k.a. MPs, a.k.a. programming assignments), about one every other week. Homework will be mostly programming assignments, in python, using GradeScope's autograder tool. Almost all of the code will be written for you --- you'll only have to write one or two lines that actually implement all the math. Generally, those lines will look like equations --- so if you understand the equations, you will do well in the homework, and vice versa. Multiple submissions will be possible.

Philosophy: modern multimedia is all done using nonlinear prediction algorithms, trained using Deep Learning. Training a deep learning algorithm is way, way, way too computationally intensive for an autograder, so we will use two hacks: (1) we'll teach you the linear algorithms, on which the modern nonlinear algorithms are based, and (2) we'll sometimes (not very often, actually) ask you to test pre-trained nonlinear methods. These are the labs currently planned:

- Lab 1: Spectrograms. Due 9/6.
- Lab 2: Eigenfaces and DCT. Due 9/20.
- Lab 3: Image filters and features. Due 10/5.
- Lab 4: Linear Predictive speech synthesis. Due 10/18.
- Lab 5: Hidden Markov Model. Due 11/8.
- Lab 6: Video animation. Due 11/22.
- Lab 7: LSTM. Due 12/6.

## Exams

There will be three exams. Exams will cover the material that's in the labs and lecture sample problems; other material covered in lectures will not appear on the exams. You can bring one page of notes, handwritten, front and back. Bring pencils and erasers. No calculators are permitted.

- Exam 1, 9/24 in class.
- Exam, Solution.
- Fall 2018: Exam, Solutions. You should know how to do problems 1, 4.
- Fall 2017 regular exam: Exam 1, Solutions. You should know how to do problems 2, 3(a), and 4(a).
- Fall 2017 conflict exam: Conflict Exam 1, Conflict Solutions. You should know how to do problems 2, 3, 4(a).
- Spring 2016: Exam 1, Solutions. You should know how to do problems 4, 5.
- Spring 2015: Exam 1, Solutions. You should know how to do problems 2, 3, 4, 5.
- Spring 2014 Exam 1 Solutions. You should know how to do problems 1, 2, 3, 4, 6.

- Exam 2, 10/22 in class.
- Fall 2019: Past year exams are not very relevant this year, so instead, here is a Practice Exam and its Solutions. And here is this year's exam and its solution.
- Fall 2017: Exam 2, Solutions, Conflict Exam 2.
- Fall 2016: Exam 2, Solutions
- Spring 2015: Exam 2 Solutions.
- Spring 2014: Exam 2 solutions.

- Exam 3, 12/17 Tuesday from 1:30-4:30pm at ECEB 1015.
Exam 3 basically covers five topics:
- HMMs. sp14_exam2 q2b, q2c, q4, q5a, q5b, (solutions), sp15_sol2 q1 (solutions), sp16_exam2 q4, q5, (solutions), fa17_exam2 q4b, (solutions), fa17_conflict2 q3b, fa17_exam3 q3, (solutions), fa18_exam1 q5, q6, (solutions).
- Image interpolation. sp14_exam3 q1, (solutions), sp15_sol2 q3 (solutions), sp16_exam3 q3, fa17_exam3 q2b, (solutions).
- Affine transform/Barycentric coordinates. sp14_exam3 q2, q3, q4, (solutions), sp15_sol2 q2 (solutions), sp16_exam3 q2, fa17_exam3 q2a, (solutions), fa18_exam2 q3, q5, (solutions), fa18_practice2 q3, q5, (solutions).
- Neural nets. sp16_exam3 q1, fa17_exam3 q1, (solutions), fa18_exam2 q1, q2, q4, (solutions), fa18_practice2 q1, q2, q4, (solutions).
- RNN/LSTM. fa18_exam2 q6, (solutions), fa18_practice2 q6, (solutions).

## Cheating

Cheating on a homework assignment will result in a zero for the assignment. Cheating on an exam will result in a zero for the exam. Two instances of cheating, in the same semester, will cause you to fail the course.

These things constitute cheating on a homework , and will result in a zero for the assignment:

- Copying the solutions provided in the ZIP archive, rather than trying to compute them yourself.
- Cutting and pasting from another student.
- Using any package that's not installed in the Gradescope Docker image. So, in particular, you can't use scipy or soundfile, unless the homework assignment specifically permits it. Anyway, the autograder should make these things impossible anyway.

- Using the provided solutions as a reference, and tweaking your code until it exactly matches the provided solutions.
- Talking to other students about their solutions. Even looking at their code is fine. Only cut-and-paste is outlawed.
- Using any function that's available in numpy or the standard python library. For example, one of the functions you're supposed to write is set_hammingwindow. Numpy includes a function, numpy.hamming, that makes this task really easy. Go ahead and use it. Using numpy.hamming is explicitly NOT CHEATING.