Assignment 6

The assignment is due Sunday, July 4, 11.59 pm EDT. Submission Guidelines

  1. Review question: How are different RTP streams in different sessions identified by a receiver? How are different streams from within the same session identified?
  2. Review question: Compute the raw bandwidth, without compression, of the various HDTV modes. HDTV is horizontally sub-sampled at a ratio of 2:1, with the luminance (Y) and chrominance components (Cb and Cr) sampled at 10 bits of resolution.
  3. Review question: How does JPEG achieve its image compression?
  4. Review question: Typical images are capture in R (red), G (green) and B (blue), but transmitted as YUV (or YCrCb), i.e., two color components and a luminance component. Construct a set of equations that allows you to convert between the two color representations. You can express the weighting of each color by a set of constants in the range 0 to 1.
  5. Using the description from the lecture slides and an MPEG tutorial, write a program to compute the DCT and, for the result, the inverse DCT (IDCT) for the simple image, in PGM (portable graymap) file format. The IDCT is computed for the DCT of the image. Compare the DCT and IDCT by inspection. Using a simple zig-zag pattern, compute your own run-length encoding and compare the efficiency to the original size of the image. You can do the latter on paper, without writing a program.

    You can also see it enlarged below, as a PNG image:

    You can convert between the various P*M image formats, such as PPM (for color pixels), PGM (for grayscale) and PBM (for black-and-white bitmap files) using the pbmplus or netpbm tools installed on almost any Unix system. (CUNIX apparently used netpbm.)

  6. Compute, by inspection, the motion vector of the following two images, where we arbitrarily place the origin of the coordinate system in the lower-left hand corner:
  7. Compare the compression performance and quality of GIF and JPEG compression for a photographic still image and computer drawing. Use three different JPEG compression ratios, e.g., using the convert tool on Unix systems. Use the sum-of-square-distance average for each pixel, separately for each color, to estimate quality. (To compute using pixels, it is probably easiest to convert images to one of the pbm formats, such as PPM.)
  8. Programming problem: Building on the previous assignment, extend your audio application to use RTP and its AVP profile to packetize data. For this assignment, you do not have to support RTCP, as support for that protocol will be added in the next assignment.

    You only need to support the transmission of 8,000 Hz-sampled mu-law audio. No audio packets are sent during silence. The static payload type, listed in RFC 3551, is 0.

    Your program should deal gracefully with silence suppression. For now, your program should simply play packets within each talkspurt with the appropriate timing and delay the playout of the initial packet in a talkspurt by a setable amount of time. The time delay is set by the 'delay' command in your user interface, measured in seconds and expressed as a floating point number. For example, delay 0.02 would delay playout by 20 ms. The playout delay will be made adaptive in the next assignment.

    The application data unit is left up to you, with 160 samples (20 ms) a typical value. However, your receiver should not depend on this particular packet size.

    Packets other than the first packet are inserted into your ring buffer according to the timestamp contained in the packet. Thus, your code should be able to deal with missing and re-ordered packets. Additional technical background can be found in technical report.

    Two test audio files recorded using the RTP tools. You can then use these tools to generate a packet stream to test your implementation, but you should also test your implementation by sending audio between two copies of your implementation.

    Use rtpdump to make sure that your RTP implementation conforms to the specification and include the results in your sample output.

    The program should still support multicast and IPv6.

    Please include in your README file brief descriptions (algorithms, program flows etc.) of how your implementation satisfies the programming requirements.

    Please see the notes in HW 4 for additional information on audio programming in Java and C.

    The application can be written in C(++) or Java. You may choose either Linux, Solaris or Windows (XP). The programming style guidelines apply. You should omit the Columbia copyright, since assignments belong to the author, not the university.