The second time around...

Our second system was composed in discrete, more realistic (for space flight and our goals) parts. Similarly to the first system, we transmitted our signal by controlling the brightness of an LCD monitor, but--instead of using the monitor's backlight--controlled the opacity of the screen, thus modulating the sunlight transmitted through the screen. The major change for this setup came from a switch from the rather limited webcam to a far more sensitive photodetector.


Our system now allows light (i.e. sunlight) to be transmitted through a screen.

The program used to transmit data in the camera based system was used unmodified in the discrete system. The recieve code for the discrete system is a modified version of the camera system's code. The two codebases differ in that the discrete system relies on a National Instruments DAQ (NI USB-6009) and ThorLabs photodetector (DET110) in place of a webcam. Modifications to the code mainly accommodate these changes, but also help to prevent memory overflow by allowing the VI to log data to file incrementally. The user can also specify the data acquisition rate and the amount of data in each incremental subset.


A photo of our discrete system. A halogen bulb is used here as our "sunlight" for testing purposes.

As with the camera-based system, the discrete system required that data be converted from a continuous analog reading back into its original transmitted form. To accomplish this, the raw data are first smoothed by integrating along a fixed width (as seen in part c of the camera-based system data handling diagram). This analog data is sorted into two levels by comparing the integrated values to a threshold. The sorting threshold for any single point is defined by averaging a fixed number of points (proportional to the total length of the data) following the data point to be sorted. To generate binary data, a value of 1 is assigned to the point if it falls above the threshold, whereas a value of 0 is assigned to data below this threshold. To see the results of processing data in this fashion, see the figure below.


This figure demonstrates the process of sorting raw data into two levels using MATLAB. The threshold to determine whether or this integrated data is assigned a high or low value is determined by taking a local average of points surrounding the data value to be sorted. Using this information, the raw data is sorted into a series of zeroes and ones.

This binary data must then be sorted back into the original Manchester-encoded data. In order to accomplish this, the data handling program must distinguish between two lengths of transmission signal--a short pulse one unit long and a long pulse that lasts two units. As with camera-based system, finding the threshold pulse width that distinguishes between these two levels is accomplished by creating a histogram of all detected pulse widths. This histogram reveals two dominant peaks corresponding to the two transmitted levels. To locate the transition point between these two peaks, we employ the same process used to detect levels in the camera-based system (see frames b through e in the previous data handling figure). This transition threshold is used to determine whether each high or low stretch of data is assigned a length of one or two bits in the Manchester-encoded data. To interpret the original binary data from the encoded signal, every other bit is taken.