Christopher's Projects :Return to Projects
Home Weather Satellite Receiver
This home weather satellite receiver is a system of an FM receiver tunable to NOAA weather satellite frequencies (137 to 138 MHz) interfaced with a PC. In addition, an antenna for the 137 MHz range had to be designed. This project was completed for my Senior Design Project along with two other members. The development, design, and construction of a fully functional home weather satellite receiver station will be attempted. The objective is to get weather images broadcasted by American NOAA and Russian Meteor satellites for which, the development of system composed of an antenna with a very high gain, and a receiver capable of processing signals in the range of 137 MHz will be required.
The development, design, and construction of a fully functional home weather satellite receiver station will be attempted. The objective is to get weather images broadcasted by American NOAA and Russian Meteor satellites for which, the development of system composed of an antenna with a very high gain, and a receiver capable of processing signals in the range of 137 MHz will be required.
The signals from the NOAA weather satellites are transmitted with right-hand circular polarization. There are two common solutions to this problem, the crossed dipole and the quadrifilar helix (QFH) antenna. The antenna will be designed to capture the operating frequencies of NOAA and Russian Meteor satellites; in addition the antenna has to work with the receiver. In the same way, NOAA satellites transmit radio frequencies that range from 137 to 138 MHz. In order to acquire these signals, a modified FM receiver has to be employed. The receiver must have the capability to tune to these frequencies. The most popular means of decoding weather satellite transmissions and creating images these days is accomplished by means of a personal computer (PC) and a soundcard. The soundcard is the A/D demodulating interface, while appropriate image display software on the PC is used to view the images.
To be able to tune to the correct signal frequency, it is necessary to track the desired satellite. There is an extensive list of free software packages that would facilitate the tracking of these satellites. Likewise, freeware is also available to decode the signal received from the satellite into images that will be displayed on the PC monitor
Weather satellites can generally be categorized as Low Earth Orbiters (LEO). These satellites typically follow an orbit of a few hundred to a couple of thousand kilometers in altitude. They constantly move relative to the earth’s surface so are close enough to obtain sharp pictures of what they see below them. The LEO weather satellites orbit from pole to pole, which allows them to pass over most areas on earth at least once within a given time.
The US National Oceanographic and Atmospheric Administration (NOAA) operate both Geostationary Orbits (GEO) and Low Earth Orbiter (LEO) polar satellites. The NOAA polar satellites orbit at 850 km and pass within view of all areas on earth at least twice a day. The satellite carries a number of instruments including cameras for both visible and infrared light .
The cameras scan back and forth at right angles to the ground path, like a broom sweeping side-to-side as you walk forward, taking picture strips that cover an area 3,000 km wide. The satellite thus makes a continuous picture as if it was a tape reeling out from an endless roll.
The image, however, is not recorded on the satellite. Each image strip is immediately broadcast to the ground at a frequency just above 137 MHz, and the satellite will be in range for up to 12 minutes as the satellite passes from horizon to horizon.
The broadcast uses the Automatic Picture Transmission (APT) analog format for the imagery. Currently, there are 6 operational NOAA polar orbiters but usually only two or three have the APT activated at a given time. The Russian Meteor series of satellites also broadcast with the APT format.
Our goal is to capture the APT broadcasts from NOAA and Russian Meteor satellites in hopes of decoding them to recreate the image seen by the satellites.
There are several limitations related to this project. For one, the receiver we are using cannot be easily interfaced with a PC. We will instead interface the receiver with a microcontroller such as the MiniDragon+, which will be programmed and controlled using the PC. By using a PC and microcontroller to interface with the receiver, we can control the automation of the receiver ourselves by writing a program to do so. Also, because the antenna will be mounted outdoors, measures will be taken to prevent any damage that may occur to it, the receiver, PC, and any other devices.
The first item on the agenda is to order and obtain all the parts required to make the project before the semester begins. After we have obtained everything we need, the antenna will be built.
Satellite broadcasts are around 5 W, thus somewhat weak requiring a high-gain antenna for reception. The antenna we have chosen for the project is a quadrifilar helix (QFH) antenna because they are said to receive a good satellite signal from horizon to horizon. These antennas are made from inexpensive materials such as soft copper tubes and electrical PVC pipes, as shown in Fig. 1. The QFH consists of two loops, one smaller than the other. The loops are constructed from soft copper tube, and joined at the corners with 90 degree elbows. The helix is wound anticlockwise as seen from the top to provide the proper polarization as used on the satellites. The connections at the top are made with the braid of the RG-58 coax, connected to one side of the long loop, and bridged across to the one side of the short loop. The center conductor of the RG-58 coax is connected to the other side of the long loop. The mast is made from PVC tubing, and a 4-turn balun is required and made from the coaxial cable .
Designing the antenna prototype took several tedious steps. In order to be sure that the antenna will be capable of capturing frequencies in the 137 MHz range, we followed a guide that presented steps on how to construct the QFH antenna.
The first step of the design was to calculate the dimensions for every element. In particular, the helix should be the same diameter throughout its length, and therefore the length of the arms forming the helix is important. Eq. 1 shows the formula for this length, l, where r is the radius and h is the height of the helix. The antenna guide instructed to make the long loop’s height 560 mm and the shorter loop 512 mm. In addition, both loops had a diameter of 355.6 mm. By using this formula, we calculated the lengths of each loops and made adjustments to allow the use of 90° elbows instead of bending one long piece of copper tubing to make each loop.
The final design using 8 mm copper tube with the dimensions shown as cut lengths for 137.55 MHz, shown in Fig. 2. Construction began by drilling four 8 mm holes at the top of the mast at right angles. Four 8 mm holes were also drilled below but the holes for the small loop were above the bigger loop holes by 24 mm. In addition, two parallel 7 mm holes were also drilled slightly below the top holes for the cable entry and exit, as shown in Fig. 1. The copper tubing was then straightened and cut into lengths to the dimensions shown here.
Next, the appropriate holes for the self tapping screws in the ends of the top horizontal sections were drilled. The coaxial cable was fed through the hole into the mast and then out of the top threading it through the hole in the center of the perforated circuit board we cut to fit inside the PVC pipe, shown here.
The top four horizontal tubes were then positioned inside the mast. In the original design, the connections at the top of the helix were almost impossible to do inside the mast, as the connection had to be made to the ends of the four tubes, two of which were 24 mm below the top two. Instead, we decided to bend the tops of the small loop by 24 mm so that all four tube ends were in a common plane at the top of the mast where they can be reached, as seen here. Four turns of the feeder cable were wound around the support mast to form the balun and taped into position.
The lower two horizontal sections were mounted in the mast and centrally positioned. The four longest cuts of copper tube were carefully bent anticlockwise, and copper elbows were placed on the top and bottom horizontal tubes. The bent sections were positioned on the elbows to form the helix. Final soldering into place was done using a gas torch and an end cap was placed on top for weatherproofing .
After assembling the antenna and testing that it operates in the 137 MHz frequency range, the team will assemble the FM receiver. There were many available options to make the receiver. The team considered making it from scratch, however there are old receivers that we can use to modify or salvage parts for making the receiver. On the other hand, there are receiver kits that can be purchased with all the components we need. The team chose to use and modify an old receiver. The receiver chosen was the Icom IC-2100 because it was provided at no cost to them by the project advisor, Dr. Montiel.
Most modern receivers contain filters and amplifiers to process the antenna’s signal, shown in Fig. 5. The antenna’s signal is first processed through a radio frequency (RF) filter. For our application we need it to allow frequencies in the 137 MHz range. The filtered signal is then amplified and sent into a mixer (multiplier). Mixers are used to shift signals from one frequency range to another by comparing the amplified RF signal with the Local Oscillator (LO). The LO shifts incoming tuned frequencies to a specified range above or below the incoming tuned frequency. In typical FM receivers, the LO has an output of 10.7 MHz about or below the incoming tuned RF, depending on the particular intermediate frequency desired, and the method in which the LO frequency is created. The output frequency then feeds the Mixer, and plays a critical part in FM Heterodyning. Heterodyning is the mixing of a modulated carrier signal, FM in our case, with a sine wave of another frequency (from the LO) to transfer the signal to a carrier of different frequency. The Mixer produces the original RF, the original LO frequency, the sum of the original RF and the original LO frequency, and the difference between the original RF and the original LO frequency. The difference is called the intermediate frequency (IF). Therefore, the original RF signal is transferred to and is contained within the newly formed IF signal. Mixing effectively takes a received RF frequency and moves it to a different, intermediate frequency, while retaining the original intelligence. The IF is sent through an amplifier, processed by the phased-locked loop (PLL) where the final output signal is produced .
Our receiver must also have a phase-locked loop (PLL) to provide frequency selective tuning and filtering without the need for coils or inductors, shown in Fig. 6. The PLL works as a feedback system comprised of three basic function blocks: a phase comparator, low-pass filter, and a voltage-controlled oscillator (VCO). The VCO operates at a set frequency which is known as the free-running frequency. If an input signal is applied to the system, the phase comparator compares the phase and the frequency of the inputs signal with the VCO frequency and generates an error voltage that is related to the phase and the frequency difference between the two signals . This error voltage is then filtered and applied to the control terminal of the VCO. If the input frequency is sufficiently close to the free-running frequency, the feedback nature of the PLL causes the VCO to synchronize with the incoming signal. Once it is synchronized, the VCO frequency is identical to the input signal, except for a finite phase difference. This continual closed-loop feedback keeps the VCO running at very near to an integer multiple of the data frequency. Any variations of the basic frequency of the incoming data are thus tracked by the VCO, and the output of the PLL is a clock which is frequency-locked with the data, allowing accurate definition of the bit period of the data.
In order to control the receiver, an interface had to be built between the PC and the receiver. The team decided control the receiver by emulating the hand microphone, the Icomm HM-98, which connects to the receiver by using the MiniDragon+. In order to emulate the hand microphone, we needed to find out how the data was sent to the receiver. First, we reproduced the data sent to tune the CB radio. We then used the serial communication interface (SCI) port of our microcontroller to receive bytes from the computer to tune to a desired frequency. This was implemented with the idea that a user, who has no knowledge of the project or the programming behind it, can open the GUI (Graphical User Interface) implemented with Visual Basic in conjunction with WXtoIMG and be able to tune the radio to the frequency of an upcoming satellite. WXtoIMG provides pass predictions, automatic recording, and image decoding in the visible light and infrared spectrums. The MiniDragon+ and Visual Basic together provide a way to tune the radio with the push of a button.
The first thing that we needed was information of the pin functions for the HM-98. Table 1 below shows the pin functions for the HM-98 hand microphone .
Through research, we discovered that the HM-98 sends data to control the receiver through bit streams. When a key is pressed on the HM-98, a bit stream is sent to the receiver and repeated until the key is released. The function key and secondary key modify the actions of each key press. For our application, we will only use normal key presses with no modifier. A table of this data can be found in Table 2.
The first program was written to reproduce the bit streams sent to the receiver by the handheld microphone. To verify the waveforms in Table 2, we studied individual bits streams for each button press by connecting the HM-98 hand microphone to an oscilloscope. Fig. 7 shows the bit stream for a ‘2’ being pressed. When the ‘2’ button is pressed, the receiver goes into scan mode. To input an actual frequency the ‘C’ button must first be pressed followed by the frequency you want to tune to. For example, if you want to tune to 137.5 MHz you must follow this sequence of button presses: ‘C’, ‘1’, ‘3’,’7’,’5’,’0’,’0’.
We found out that each button is encoded by sending a preamble consisting of seven ‘0’ bits followed by a marker and two 20-bit streams indicating the first press of the button. Another preamble and two more 20-bit steams are sent within a 43 ms period indicating the subsequent press of the button, as seen in Fig. 7. The preamble is assumed to gain the attention of the radio while the 20-bit stream contains several flag fields that determine the function of the key press. A ‘0’ bit is encoded by going low for 190 us and then bringing the signal high for 230 us. A ‘1’ bit is encoded by going low for 190 us and going high for 415 us. The marker goes low for 190 us and high for 795 us. The term ‘low’ or ‘logic zero’ is interpreted by the receiver at 1.95 V. The term ‘high’ or ‘logic one’ is interpreted at 2.45 V. To get these voltages we implemented a voltage divider, as seen in Fig. 8.
We used pins 0 and 1 of the microcontroller’s Port A to provide 5 V. Each pin acted as a source. To acquire the voltage levels needed, we had to synchronize their “on” and “off” stages. When a pin is “off” it provides 0 V and also grounds the resistor connected to it. We chose to get our output from the node connecting the resistors. Initially, we chose the center resistor to be 1 KΩ. From there it was a matter of solving two equations simultaneously. Let’s say we choose V1 our source for “high” voltage and V2 for the “low” voltage. When V1 = 5 V and V2 = 0 V we should get 2.45 V at the center node. By using node current analysis, the current coming from the source should equal the current that splits into the grounded resistors. The sum of the currents should equal zero, as seen in Eq. 2:
Solving two equations with two unknowns yielded R1 = 180 Ω and R2 = 235 Ω.
To be able to tune the receiver with the MiniDragon+, we used three pins: the data pin, ground, and the microphone ground pin (to make the receiver think the mic was connected). The output from the middle node was fed to the data pin of the receiver.
The receiver “idles” at 2.45 V. Our program starts off by configuring pins 0 and 1 of Port A for output by moving the byte $03 to register $0002 (DDRA). Then we move $02 to $0000 (Port A) to activate pin 1 and start the idling process. What follows is a delay of 43 ms to allow some time for all internal components to be ready to receive data inside the radio. There are four delays used throughout our program: 190 µs, 415 µs, 230 µs, and 795 µs delays. These are subroutines that are jumped to in order to encode our zeros and ones properly. For example, to send a ‘1’ the high pin (PA1) is first cleared to take care of any initial condition that might be encountered. The low pin (PA0) is set high for 190 µs, then it is deactivated and PA1 is set high for 415 µs, and finally deactivated. To send a ‘0’ is the same thing. PA1 is cleared before bringing PA0 high for 190 µs. PA0 is then cleared and PA1 is activated for 230 µs before being it is brought low again. The marker follows the same pattern but PA1 is activated for 795 µs. These procedures to send the ‘0’, ‘1’, and marker are used as subroutines in the main program. They are simply called upon when it comes time to send the bit stream.
There is a pattern to every button press. Let us examine the “first press” sequence for a ‘2’. A ‘2’ is entered with the following bit stream: ‘0100-0-1000-0-0111-0-0100-0’. The dashes separate “columns” in the bit stream. The second, fourth, sixth, and eight columns are always ‘0’. In addition, column 1 and 3 of every digit’s “first press” is the same. In our program it is referred to as the universal byte for the “first press” because every button uses it.
Now, let us examine the “subsequent press” sequence for a ‘2’ button press: ‘0000-0-1000-0-0111-0-0100-0’. It is similar to the first press sequence but the first second bit changes. This is due to the fact that bits in the first column are flags. The first 1 in the sequence is the “first press” flag. In our program, column 1 and 3 for every digit’s “subsequent press” is the same and referred to as the universal subsequent byte in our program.
The first and third column bits of the first press and subsequent are joined as a byte and saved in a memory. The universal first press and universal subsequent bytes are $48 and $08, respectively. Columns 4 and 6 are also joined as a byte, $74, and stored in a memory. Note that this byte is the same for both first and subsequent press.
After the main program runs the preamble it loads #2 into a counter which is also a reserved byte. Then it moves the universal first press byte into a memory that we will call the “decoder.” The job of the decoder is to be used as a catalyst for the sorting process. A byte is loaded into the decoder and the program jumps to a subroutine that logically shifts the memory left. The most significant bit (MSB) is sent to the carry flag and it is checked. A branch-if-carry-set command is used to jump to the ‘1’ subroutine, otherwise it jumps to the ‘0’ subroutine and looped back. This process checks the first four bits before returning, jumping to a ‘0’ subroutine, and jumping back to shift the next four digits of the decoder out. This way, the decoder is reset to $00 and the program jumps to another ‘0’ subroutine before $74 is loaded into the decoder byte and the process to shift the contents of the decoder restarts. This 20-bit stream is looped again and the program enters a 43 ms delay. After that program jumps to the preamble subroutine and the universal subsequent byte is loaded into the decoder and the process is repeated to send the subsequent press 20-bit stream twice.
This process is just for one byte; in order to tune the radio to the desired frequency, we loaded the second byte for reach digit into succeeding memory bits. The X register is used as a pointer. Meaning that the address of the ‘C’ is stored in X and after it goes through the process of sending the required bit streams, X points to the byte representing a ‘1’, and so on, until the last ‘0’ digit is sent. The final code is located in the Appendix.
After having a functioning code to tune the receiver, the SCI (serial communication interface) code was written. The 9S12 chip has two SCI ports: SCI0 and SCI1. These pins are shared with Port S when not in use. However, by enabling the receiver or transmitter pin we turn off the pin connection to Port S and turn on the pin connection to the TX and RX registers. The SCI0 port is hooked up to the RS-232 interface via the SP232AEN chip. When you talk to DBug-12 with your PC, all the data are coming in/out of the SCI0 port via the SP232AEN. The chip alters the levels of the 9S12 SCI voltage levels to be compatible with the RS-232 standard. The SCI input/output voltages are TTL type where 0 V is logic low and +5 V is a logic high. RS-232 on the other hand uses negative logic where logic high is typically around -12 V and a logic low is typically around +12 V. The SP232AEN does all these voltage conversions automatically. For instance, a +5 V high output from the SCI to a -12 V output on the RS-232, or a +12 V RS-232 input to a 0 V SCI input.  For our program, SCI1 was used instead of SCI0 because we didn’t want to mess with DBug-12. The SCI configuration allows for a number of options for data transmission and reception. In the simplest configuration, ten bits are involved: a start bit (logical 0), the 8 data bits, and a stop bit (logical 1). Fig. 9 shows an example transmission waveform, such as what you might see if you hooked up a logic analyzer to the TX pin. Note that the data bits are sent least significant bit (LSB) first, and MSB last. The middle 8 bits in the pulse train in Fig. 9 are sent in the order ‘10110100’ in a time domain signal, corresponding to an actual data byte for $2D (00101101).
The data rate out of/into the SCI is determined by the baud rate, and is an essential value to consider in any SCI setup. For the NRZ (non-return to zero) encoded waveforms of the SCI, the baud rate is the same as the bit rate, so a baud rate of 9600 corresponds to a bit rate of 9600 bits/sec. The baud rate is determined by Eq. 4:
BR refers to the content of the SCI1BDH/L Baud Rate Registers at addresses $00D0 and $00D1. For example, for a baud rate of 9600 (baud period ~ 100 us), we want a BR of about 156 = $9C, so we write $00 to SCI1BDH and $9C to SCI1BDL. Note that the baud rate is the same for transmission and reception for a given SCI port; we can’t set one baud rate for transmission and another for reception on a given port. Also note that we must always closely match the baud rates between a transmission/reception pair of devices. If one device is transmitting at 9600 baud, the receiving device it is connected to must be configured to receive at 9600 baud.
Since we only need to receive data from the RS-232 controlled by the PC, we only need to activate the receiver pin. We enable the receiver by setting the RE (receiver enable) bit of SCI1CR2 Control Register at address $00D3. Once enabled the receiver is optional, and waiting for data. We then wait for the shift register connected to the RX to fill with serial data. The RX register waits until it sees a 1 to 0 transition signifying a start bit. Then read data into the shift register (LSB first) in a serial fashion at the selected baud rate. Think of the received data coming in on the left side of the receive register and shifting to the right, so that the LSB then corresponds to bit 0. Thus, the bits that we read will be aligned correctly in the receiver data register, with the LSB at bit 0 and the MSB and bit 7.
Once the shift register is full, the data is then transferred to the data register SCI1DRL at address $00D7. This will set the Register Data Register Full (RDRF) flag, indicating that we can now read the received data in register SCI1DRL.
Basically our program waits for the RDRF flag to go off, and then the contents of SCI1DRL are moved to accumulator A. From there a byte is transferred to accumulator B. Their contents are compared and if equal, the program branches to a program that tunes to the desired frequency. If not equal, then it runs on an infinite loop until another bytes is sent. There are three bytes of interest. Since we want to tune to 137.50, 137.10, and 136.62 MHz, the numbers after decimal were selected as the bytes we look for in our program. For example, byte $50 tunes the CB radio to 137.5 MHz. By pressing the button on the user interface, a byte is sent and picked up by the MiniDragon+. From there it branches to a tuning subroutine, and it waits for the next byte.
Once the signal is processed, it will be fed into the computer where the receiver frequency adjustments, image decoding, and satellite tracking will take place.
Initially, we will need to know the positions of the satellites. Satscape is a free tracking program that can be used to find the position of 8000+ satellites. Pass predictions can be calculated and displayed. Speech announcements are made to alert the user when a satellite is about to pass over. In addition, it provides us with the satellite’s longitude, latitude, speed, and elevation information .
The receiver will be interfaced with the computer through its serial port using Visual Basic and SCI. The receiver will connect to the PC’s microphone jack in order to input the signal to the soundcard.
Finally, the image processing will be done with a program called WXtoImg . This program is free and is said to be the world’s best weather satellite signal-to-image decoder. The software makes use of the 16-bit sampling capabilities of soundcards to provided better decoding. The proposed system as a whole is presented in Fig. 10.
Statement of Work
The project will be divided into different task; each individual task is described below:
Task 1: Build the antenna prototype.
Task 2: Modify the FM receiver.
Task 3: Test the antenna and receiver.
Task 4: Acquire necessary data.
The project workload will be split between the three teammates. The responsibility of constructing the quadrifilar helix antenna belongs to Mr. Dulavitz. Mr. Perez and Mr. Reyes are responsible for the FM receiver used to receive the radio frequencies transmitted from the weather satellites. Mr. Perez will be focused on the hardware aspect of the FM receiver while Mr. Reyes will be focused on the software aspect and interfacing the receiver with the PC. In addition, all three teammates will work together to overcome any obstacles that may occur when working on each individual part of the project.
Facilities and Equipment
Most of the work will be done in the Senior Project Lab located in room 130 of the Engineering Complex. This includes the use of any soldering irons and the use of any computers provided in the Senior Lab. Any welding required for the antenna will be done at the Machine Shop located in the McNeil Engineering building. Additional equipment may be necessary to complete the project.
The project will require the acquisition of components that will make the system fully functional. Many of the elements needed to construct the prototype antenna can be found in a regular hardware. Excluding the PC, the receiver will be the most expensive piece of equipment that would have to be acquired. The FM receiver we used was one that we already had on hand and did not have to purchase. It is also an older model that is no longer in stock, so the quoted price is an MSRP.
Table 3 shows a list of the components that will be employed in the development of the system. It is important to note that this budget was compiled with the assumption that the project is started with no readily available equipment. For example, the computers and soldering irons are provided in the senior design lab but are still included for cost analysis of the project as a whole.
We will start working on this project at the beginning of the Spring 2011 semester. The dates shown in the timeline in Fig. 11 represent the approximate time that we expect to have completed the described task. The markers indicate major goals that will be achieved with according dates.
We set our initial test run up in the EC 130 Senior Lab on February 28, 2011 at 5 P.M. We used a power supply and set it to 13.8V to power the IC-2100 receiver. We plugged the antenna into the rear of the receiver and took the antenna outside. An audio cable was then plugged into the audio out of the receiver and connected to the microphone in of the PC used. WXtoImg was then run on the PC. When the NOAA 15 satellite was in range, we then ran the recording software. The image processing was done by the software.
Fig. 12 shows the first satellite image obtained from the antenna and receiver system. The satellite was in range for about 10 minutes. The image on the left is Channel A of the satellite. Channel A is the normal satellite view of the Earth. Channel B of the satellite is on the right side. Channel B is the thermal view and was not as clear in the image that we received compared to Channel A.
To verify the effectiveness of our antenna, we connected our quadrifilar helix antenna to a vector analyzer. The vector analyzer would measure the s-parameters of the antenna to determine reflection and transmission of the load. We will use this information to determine the resonance frequency of our antenna to see if it is a good match. We designed our antenna to work at 137 MHz. Fig. 13 shows the results of the vector analyzer and that our resonance frequency is at 133 MHz. This means that there is little power reflected and that the antenna is a very close match to the 137 MHz that we designed our antenna for.
We were able to obtain a somewhat clear image of the NOAA 15 satellite. The first couple of minutes contained noise that could be attributed to the antenna being next to the building when the satellite first appeared in range. As the satellite moved closer overhead, we were able to receive a much clearer picture. As the satellite moved out of range, we received more noise until we received no signal at all. The overlay of the states and provinces on the map was added automatically by WXtoImg. Also note that this test was done manually as the program for automating the receiver was not complete at the time of the test.
The project was studied and was done. The team’s proposed plan contained in this report was followed as closely as possible. The proposed timeline and budget were followed to the best of the team’s ability in completing the project, even with changes in design. Each team member had his assigned task to finish, but the team worked on the entire project as a whole. The project began at the start of the Spring 2011 semester and was completed on April 20, 2011.
|File Name||File Size|
|Technical Report||2.25 MB|