SECURE OMP BASED PATTERN RECOGNITION THAT SUPPORTS IMAGE COMPRESSION
Steven_Cheuk_Final_Report
1. 1
Abstract—Technology is very prevalent in today’s society.
As we progress, technology rapidly increases in complexity and
new standards of encryption are necessary in order to protect
data from hackers and illegitimate organizations. Our project
aims to provide an implementation of an encryption system using
steganography, the practice of hiding private information within
a non-secret image. Additionally, we provide a solution to
transmit the image between two devices using high-speed, fiber-
optic transmission. Our transmission system transmits binary
data using on-off keying across a fiber-optic cable. Using the
General Purpose Input/Output (GPIO) pins on two separate
LCDK units, we utilize GPIO interrupts to turn the LED laser on
and off at varying frequencies on the transmitting end, and
another GPIO interrupt to sample the output of the photodiode
circuit at 52 kHz on the receiving end.
I. INTRODUCTION
ODAY’S encryption systems focus largely on using
complex levels of encryption to provide increased security
and to lower the probability that a hacker will be able to gain
access to private information. Using steganography, we are
able provide an extra layer of protection by hiding encrypted
data within non-secret files. Although slightly counter-
intuitive, by hiding encrypted information within a non-secret
image, we lower the probability of a hacker discovering where
the encrypted information is in the first place. Today’s
encryption relies heavily on using a key for decoding hidden
information. Thus, “an option exists to use computer programs
that try every possible key until they find the correct one [1].”
Steganography has potential to solve many security flaws with
current encryption schemes by making it even more difficult
to decrypt. While normal encryption requires a key to encrypt
or decrypt a message, steganography not only requires a key
but also knowledge of where the key slot is in the first place.
Steganography methods reduce “the chance of a message
being detected… [and] if that message is also encrypted, if
discovered, it must also be cracked [2].”
Image files are an excellent location for hiding information
due to their large file size. By slightly altering pixel values in
an image to hide an encrypted message, a hacker will not be
able to readily identify that there is hidden information within
the image. Additionally, the hacker will also not be able easily
detect how to decode the pixel values to obtain the secret
information. Our project implements a simple, low-
computation-intensive steganography system capable of
encrypting a 100-page text document within a single 600x400
Advisor: Dr. Briggs, TA: Che-I Lien
pixel color-image by slightly altering pixel values across the
picture, yet maintaining the original images integrity. We
ensure that the end-user will not be able to detect differences
between the original and encrypted images via observation by
the human eye.
We are in the “Information Age.” In addition to encryption,
our era relies heavily on electronic communication. In order to
more efficiently communicate with one another, engineers are
constantly developing new transmission mediums, faster
devices (e.g. lasers & photodiodes), error correction encoding,
and transmission schemes. Before fiber-optic cables were
vastly utilized to handle internet traffic, users relied on
transmitting information via phone cables at incredibly limited
speeds, by today’s standards [3]. As our technology becomes
more powerful, it becomes more complicated. Faster
communication systems will be required to transmit larger
amounts of data. Currently, a single fiber-optic module can
transmit data at 100 Gb/s. The largest constraint when
developing fiber-optic transmission systems is the maximum
modulation speed of a laser. Soon, we will start seeing more
system designs transitioning away from binary (on-off keying)
to PAM-4 [4]. PAM-4 utilizes “4 distinct pulse amplitudes…
to convey information [4].” Fiber-optic technology has the
most promise for breaching the communication gap. We
implemented a solution for a low cost system using a laser,
photodiode, fiber-optic cable, and two OMAP-L138 Low-Cost
Development Kit (LCDK) units.
Finally, as our systems become faster and faster and utilize
more complex transmission schemes such as PAM-4, error
rates will increase. We provide a solution for an error
correction algorithm using convolutional encoding to transmit
redundancy bits and a Viterbi decoder at the receiving end to
decode the received bits.
II.MOTIVATION
Encryption continues to be a hot topic as several companies
regularly fall victim to hacking attacks due to security
vulnerabilities in their systems. Our motivation behind this
project was to investigate ways to increase the number of
layers of encryption and hide information more efficiently.
Separately, our interest in communication systems and circuits
also led us to pursue the idea of designing a fiber-optic
transmission system.
Steganography Encryption System, Fiber-optic
Transmission, and Error Correction Encoding
Steven Moran and Cheuk Yu
T
2. 2
III. APPROACH
A.Standards
Our system implemented the following standards and each
is explained in detail under “Workflow of the Project”:
1) Operation of a photodiode [7]
2) Binary Synchronous Communication (BSC) [8]
3) Convolutional Encoding
4) Viterbi Decoding Algorithm
B.Workflow of the Project
1) Steganography System
We started by implementing our steganography
encryption system in MATLAB. Starting in MATLAB
allowed each of us to work simultaneously on both the
encoder and decoder for the steganography system. It also
gave us more control over our debug environment. Loading
image files onto the LCDK was the main limitation of the
speed of our system, but our system’s speed was
dramatically increased after a fix was provided to load the
image via USB Thumb Drive.
We collaborated by brainstorming an encryption strategy
prior to starting our coding development. First we ran our
text through a very simple encryption system which altered
all of the text characters slightly by changing them to non-
alphabetic ASCII characters. Next, we decided to only
change the least significant bit (LSB) of each pixel value in
order to minimize the visual difference between the original
and encrypted image. After observing no visual difference,
we ran tests to determine how many bits we could change
for each pixel value without changing the image too
significantly. We determined that we could change the 4
LSB’s for each 8-bit pixel value without there being a
significant change in how the image appeared. We
proceeded by efficiently implementing both the encoder and
decoder in MATLAB. After verifying our code’s
functionality, we each translated our code to C and
debugged it to work properly on the LCDK. We also took
memory issues into consideration and ensured that the
system would continue to work for large text file input by
switching to dynamic memory allocation for file sizes over
5000 characters.
2) Fiber-optic Transmission System
After implementing our Steganography system, we
switched to the next design goal of our project—
implementing a fiber-optic transmission system between
two LCDK units. Before implementing our actual
transmission system, we began by building our receiver and
transmitter circuits. Our goal was to be able to observe a
change on the receiving end of the system every time we
alternated the transmitting state. To do so, we used the
GPIO pins as the input and output to the transmission
system. We found the GPIO pins on the external connector
of the LCDK using the provided schematic documents [9].
Additionally, 3.3V and ground pins were also used as
references for the transmission circuit.
On the transmitting end, we hooked up an LED laser in
series with a 500Ω resistor to the GPIO8(12) output pin on
the LCDK, as shown in Fig. 1. We used the GPIO8(12) pin
to turn the diode on and off. We connected the LED to one
end of the fiber-optic cable and placed the photodiode on
the other end. Before constructing the receiving circuit, we
flickered the LED on and off, and we placed a voltmeter
across the photodiode in order to double-check that we are
able to observe a change on the output. After verifying a
small change in voltage across the photodiode, we began
constructing our photodiode circuit. Our first circuit placed
the photodiode in series with a 1 MΩ resistor, and we
connected the voltage across the 1 MΩ to GPIO8(10) pin on
the LCDK. We wrote a simple program to determine
whether we could detect the change on GPIO8(10). We
were not able to observe any difference on GPIO8(10) when
we turned the LED on and off. After some problem-solving,
we discovered that there was most likely a 1 KΩ pull-up
resistor connected to the GPIO8(10) when the pin was
configured as an input on the LCDK. Our circuit was not
strong enough to pull the voltage low, so we decided to use
a transistor implementation.
Fig. 1. Transmitter circuit diagram for the fiber-optic transmission system.
We began with a single transistor implementation, but we
experienced several issues as the photodiode did not
provide enough current to turn on the NPN transistor. Next,
we utilized a Darlington pair configuration of two NPN
transistors in order to amplify the current from the
photodiode and fully turn on the second transistor, as shown
in Fig. 2. We were able to successfully observe a change in
state on the receiving end of our transmission system;
however, we faced two issues when using the Darlington
pair. First, we inverted the signal by using this
configuration which is not too severe as this only required
us to invert the signal within our code. Secondly, the
Darlington pair output voltage would range from 0.4V to
3. 3
3.3V, which shows that the pair is able to fully turn-off
when required and display 3.3V, but it was not able to fully
pull down the voltage to 0V before the second transistor
turned off. We tried two other circuit configurations using
transistors, one using 3 NPN transistors for as the
Darlington triplet and another using an actual Darlington
pair integrated circuit (IC) chip, but we did not have success
with either design. We reverted to our Darlington pair
configuration of 2 individual BJT’s and continued on with
the next step of our project.
Fig. 2. Receiver circuit diagram utilizing a Darlington pair configuration
for the fiber-optic transmission system.
Implementing a high-speed GPIO interrupt was a
significant challenge when building our fiber-optic system.
The provided face-detect code from previous EE113D
students on “RC Car Ball Avoidance” allowed for a 1 kHz
GPIO interrupt, but we wanted to be able to transmit data at
a much faster rate. We spent about 3 weeks doing research,
posting on TI E2E forums, and reading through code
examples before we discovered how to create a GPIO
interrupt [10][11][12][13][14]. We used the Timer interrupt
example code (timerCounter.c) inside the StarterWare
folder as a template [17]. We first tried to import the files
into our workspace, but we could not make it compile. By
comparing it with an already-built project, we figured out
that we needed to include different linkers and compiler
files. We were eventually able to run the example code in
our workspace and made the necessary modifications to
create a GPIO interrupt. Although the Timer interrupt
function uses TIMER2 of the LCDK, which is 150MHz, the
GPIO function took several more clock cycles and the best
we could achieve was 52 kHz, as shown in Fig. 3.
Fig. 3. Receiving Circuit Output utilizing a 52 kHz interrupt frequency.
Oscilloscope displays 26 kHz frequency due to alternating outputs.
However, transmitting at such high speed was not
practical. First, the receiving circuit took time to turn on an
off the transistors and as a result it could not generate a
square wave with sharp edges, as seen in Fig. 3. Fixing this
problem is pretty simply: we could use PNP transistors to
aid in pulling up the output voltage when no current is seen
at the input, or we could cascade a high-speed operational
amplifier comparator to the receiving circuit. The second
problem was the synchronization of the transmitter and the
receiver. Using two independent LCDKs and a half duplex
communication channel, it was difficult to ensure the
receiver actually received the bit of information after
transmission. To prevent any data loss, we simply slowed
down the transmitter’s interrupt speed so that the receiver
could receive several samples for each information bit
transmitted. After several trials, we were able to push the
transmission rate up to 6 kHz with little to no error. We also
wanted the receiver to be robust enough so that it could be
compatible with any transmission rate up to 6 kHz. To do
so, we first transmitted a known pattern ‘101010101’ as a
header before sending our information. Checking the
number of samples for each bit of the header detected the
average number of samples needed for one bit of
information. In addition, the header also indicated the start
of a transmission, and the receiver would not initialize until
the header had been received.
3) Convolutional Encoding & Viterbi Decoder
Although we achieved a 6 kHz transmission rate, we
wanted to further improve our transmission rate while
keeping the bit error rate (BER) to a minimum. We
successfully implemented a convolutional encoding system
with a Viterbi decoder on the receiving end. By
implementing a Viterbi decoder, the rate can be potentially
increased further while keeping the BER at a minimum. Our
convolutional encoding system has a code rate of 1/3 and
sends 2 bits of redundancy for every bit of information sent.
Future improvements of our code can lead to even faster
code and transmission rates. As implemented, our
4. 4
transmission system is described by the following three
state equations:
𝑠3𝑛 = 𝑏 𝑛 (1)
𝑠3𝑛−1 = 𝑏 𝑛 + 𝑏 𝑛−2 (2)
𝑠3𝑛−2 = 𝑏 𝑛 + 𝑏 𝑛−1 + 𝑏 𝑛−2 (3)
As described by (1)-(3), for every bit of information, 3
bits are transmitted: s3n-2, s3n-1, & s3n. At the receiving end,
we implemented a Viterbi Decoder to decode the
transmitted convolutional code.
Fig. 4. Viterbi Trellis Diagram. Courtesy of Irham Maruf.
(http://irham93.blogspot.com/2013/06/trellis-diagram-state-diagram-dan-
tree.html)
There are many techniques used to realize a Viterbi
decoder, but a Viterbi Trellis Diagram (Fig. 4) is one of the
easiest to understand and follow. By using Viterbi’s
algorithm, we were able to decode the message while
minimizing the total error. A Viterbi trellis allowed us to
calculate the path with the smallest accumulated error
metric [6]. By implementing a convolutional encoding
system, we also potentially reduced issues with
synchronization.
C.Design Requirements
There are some important characteristics that the design
must meet in order to be successful:
1) Steganography System
The image cannot have a solid color background,
especially the lighter colors. Otherwise, the encoded image
appears to be different from the original image. An example
would be comparing Fig. 5 shown on this page and Fig. 9
on page 6. It is obvious that there is a shaded area (gray
color) on the bottom of the encoded “Hexagon” image. For
Fig. 9, you can barely see the difference.
Fig. 5. Image “Hexagon.”
2) Fiber-optic Transmission System
There is a synchronization issue of the two LCDK’s if a
long string of consecutive 1’s or 0’s is transmitted, since our
communication system is half duplex. In a long string of
consecutive 1’s or 0’s bits transmitted, the receiver might
receive an extra bit or miss a bit. To improve this system,
we need to change the transmission scheme to something
similar to Morse code in order to distinguish 1’s and 0’s and
ensure that less than 8 bits transmitted in a row are the same
value.
3) Convolutional Encoding & Viterbi Decoder
One extra bit must be added to the information bits for
the Convolutional Encoder and the Viterbi Decoder to work
because during our trials the last bit was always flips, as
shown in Table I on page 8. As explained on page 8, we can
add an additional ‘useless’ bit at the end so that only the
‘useless’ got flipped over the transmission. This error is due
to our Convolutional Encoder/Viterbi Decoder and not an
artifact of the transmission system.
D.Constraints
There are two types of constraints, global and local. Global
refers to the design as a whole, and local refers to portions of
the design.
1) Global Constraints
a) Cost
For a project, the most important constraint would
be its economic cost: how much will it cost to
manufacture the product? In our design, the most
costly part would be the fiber-optic cable. This cost is
based on two factors: distance and occurrence.
If the distance between the two users (transmitter
and receiver) is fairly closed, it would require a short
cable which is not expensive. Therefore, this
transmission is only optimal for local communication
systems, not global communication systems such as
between cities.
Occurrence is also another factor. If the transmission
is frequent, the users might want to put the cable into a
safe location, such as behind the walls or beneath the
5. 5
floor. Typically such installations would cost more
than the cable itself.
b) Noise
Noise is usually a concern of a communication
system. Using a fiber-optic cable has already
minimized the noise from the channel compared to
other mediums. The only concern of fiber-optic cable
is that, the cable cannot be bent over the critical angle
such that the traveling light refracts out of the cable
instead of reflecting within the cable. In general, this
constraint only means that there should be no sharp
turns on the cable, which is easy to meet.
2) Local Constraints
a) Transmission Speed
The timer interrupt frequency is in the MHz range,
meaning that our upper bound frequency should be
around this bound. However, our design only went up
to 6.1 kHz. There were two reasons:
First, our GPIO interrupt only support up to 52 kHz,
as shown in Fig. 3. As explained before, the GPIO
function was not optimized and the highest we could
achieve was around the kHz range. To push the limit
up, we will have to rewrite the GPIO function in the
library.
Second, as we approached the 10+ kHz range, the
shape edges of the signal started to disappear, as
shown in Fig. 3. So after we fix the GPIO function, we
will need a better circuit to reduce the response time of
the transistor. As explained before, we could use PNP
transistors to aid in pulling up the output voltage when
no current is seen at the input, or we could cascade a
high-speed operational amplifier comparator to the
receiving circuit.
b) Steganography System’s Loading Speed
Another concern would be the loading speed of
images to the LCDK, since the communication
between the computer and the LCDK is really slow.
Thanks to Jerry’s USB program, we have significantly
reduced the loading time. For instance, loading and
saving an 800x1100 image would take 30 minutes
originally, but now it only takes around 3 to 5 minutes.
IV. RESULTS
A.Intended Design Objectives
To summarize our original project objectives, consider the
Intended Design Block Diagram as shown in Fig. 6.
Fig. 6. Intended Design Block Diagram.
B.Realized Design Objectives
While we were not able to complete the entire system as
shown as Fig. 6, we have developed two smaller functioning
systems, the Steganography System and the Communication
System, as shown in Figs. 7 and 8. Our final design is
described by the objectives below:
1a) Steganography Encoder
First, the Steganography Encoder took in the image from
a USB Thumb Drive, as well as the hidden message from a
text document on the computer. LCDK #1 then calculated
the number of characters of the message. If the message was
too long for the image, an error message would be returned
to the user. If more than 5000 characters were used,
dynamic memory was allocated to store the message. A 24-
bit header was created to indicate the number of characters.
The header and the message was converted into bits, and
encrypted by adding a hidden key that was only know by
the receiver. The bits then replaced the last 4 LSB’s of the
image’s pixels, until all information was encoded to the
image.
1b) Steganography Decoder
The Steganography Decoder took in the encoded image.
It first checked the first 2 pixels (the 24-bit header) and
extracted the character-count header from the last 4 LSB’s.
From there, LCDK Receiver knew the length of the hidden
6. 6
message. It then extracted the correct amount of bits from
the image and decrypted the bits using the hidden key from
the Steganography Encoder. It finally stored the received
message into a text document on the computer.
2a) Convolutional Encoder
In order to reduce the error rate of transmission, we
decided to implement a convolutional encoding system with
a code rate of 1/3. We were able to successfully implement
both the Convolution Encoder and Viterbi decoder, and we
uploaded our MATLAB and C files to GitHub as a
reference to future EE113D students [15][16].
2b) Communication Channel
LCDK #1 acted as the transmitter of the communication
channel. To indicate the start of the transmission and allow
the receiver to lock onto the transmission frequency, the
transmission first started by sending out a fixed length of
alternating bits “101010…” by switching on and off
GPIO8(12) which controls the LED laser. Then, LCDK #1
looped through the message (information bits) and
transmitted it via on/off keying. The signal passed through a
10-meter long fiber-optic cable and reached the photodiode
in the Darlington pair circuit, as shown in Fig. 2. Note that
since GPIO8(10) on LCDK #2 was normally pulled-up, the
logic was reversed: high means 0’s and low means 1’s.
LCDK #2 was the receiver of the communication channel
and stored the transmitted signal.
2c) Viterbi Decoder
As mentioned previously, we successfully implemented a
convolutional encoder as well as Viterbi decoder using the
LCDK. Since our code rate was only 1/3, there is room for
improvement because we are sending two bits of
redundancy for every bit of information.
Figures 7 and 8 describe the overall block functionality of our
two independent systems.
Fig. 7. Resultant Image Steganography System.
Fig. 8. Resultant Communication System.
While we were able to fully implement the Steganography
System, our Communication System was still in the
development stage. Instead of having a header indicating for
the size of the transmission, the System only transmitted a
fixed-size message. More work would need to be done before
merging the two systems together. Synchronization issues
would also occur when transmitting long strings of 0’s or 1’s
(e.g. multiple consecutive white or black pixels in an image).
C.Steganography Results
We ran several trials using different images for our
Steganography System. Fig. 9 displays the set of “Flower”
images. You can barely see the corolla on the bottom side is
slightly darker in the encoded image. This is not obvious
unless you have the original image side by side.
Fig. 9. Image “Flower.”
In addition, using a set of larger images could further hide
the encoding of message. Consider the image “Mona Lisa” as
shown in Fig. 10. Encoding the same message is no longer
visible to the naked eye.
Fig. 10. Image “Mona Lisa.”
7. 7
D.Transmission Results
Figures 11 and 12 display how we physically connected
both the transmitter and receiver circuits as shown by the
circuit diagrams in Fig. 1 and Fig. 2. After properly
connecting our circuits and verifying their functionality via the
usage of a voltmeter and oscilloscope, we were able to
successfully transmit data across our fiber-optic channel.
Fig. 11. Transmitter Circuit Connected to LCDK #1.
Fig. 12. Receiver Circuit hooked up to LCDK #2.
Figures 13 and 14 display the output of both the transmitter
and receiver circuits with a transmission rate of approximately
280 Hz. As you can see, both form very nice square waves as
expected since the GPIO pin pulls the pin high for one
interrupt cycle and low for the next interrupt cycle. Both
circuits respond relatively well.
Fig. 13. Transmitter circuit with transmission rate of 280 Hz.
Fig. 14. Receiver circuit with transmission rate of 280 Hz.
Next, we analyzed how both circuits respond to higher
frequencies. Figures 15 and 16 display the response of both
circuits for a much higher transmission rate of 6.1 kHz. Figure
10 shows that at higher frequencies, the receiving circuit has a
slow response time on the rising edge. This may be due the
fact that our receiver circuits relies on the LCDK’s internal
1KΩ pull-up resistor, as displayed in Fig. 2, to pull-up the
voltage when it does not see current on the input of the circuit.
Our receiver design only works to quickly pull down the
voltage when it senses a current from the photodiode. To
further improve our design, we may consider using PNP
transistors to aid in pulling up the output voltage when no
current is seen at the input. We could also cascade a high-
speed comparator to produce a receiver output similar to a
square wave.
8. 8
Fig. 15. Transmitter circuit with transmission rate of 6.1 kHz.
Fig. 16. Receiver circuit with transmission rate of 6.1 kHz.
Obviously the most important thing for a communication
system is the Bit Error Rate (BER). Consider Table I:
TABLE I
BIT ERROR RATE FOR TRANSMISSION AT DIFFERENT FREQUENCIES
Frequency Bit Error Rate Comment
280 Hz 0.25% The last bit is wrong.
6.1 kHz 0.25% The last bit is wrong.
Note that our Communication System did not transmit the
information bit directly. Using the Convolutional Encoder and
the Viterbi Decoder, the codewords, or so-called states were
transmitted. The codewords were the same before and after the
communication channel, meaning the error came from the
either the Convolutional Encoder or the Viterbi Decoder. To
fix this issue of flipped last bit, we would need to add an extra
‘useless’ bit to the end of the information bits before encoding
so that all the information states could get processed correctly
after the Viterbi decoder.
E.Summary Table of Project Results
TABLE II
SUMMARY TABLE OF SUCCESSES AND NON-SUCCESSES
Type Detail
Success or Non-Success
(With Explanation)
Standard Operation of a
photodiode
Met
Standard Binary Synchronous
Communication
(BSC)
Met
Standard Convolutional
Encoding
Met
Standard Viterbi Decoding
Algorithm
Met
System Steganography
System
Completed
System Communication
System
Completed (able to communicate)
System Error Correction Nearly Completed (incorrect last bit)
System Maximum
Transmission Speed
6.1 kHz
Overall Merged all systems Not-Completed
F.Accomplishments
While we did not fully complete all of our design
objectives, we had two major accomplishments:
1) Timer Interrupt as PWM
We modified the TimerCounter StarterWare example to
create GPIO interrupt that ranges from 0 Hz to 52 kHz. While
52 kHz was not significantly faster than the maximum of the
original interrupt (48 kHz), the default interrupt only had
several fixed frequencies and thus might not be optimal for
creating specific PWM signals. This Timer Interrupt could
provide a PWM at the programmer’s desired frequency up to
52 kHz, and we uploaded our modified skeleton code to
GitHub as a reference to further EE113D students [17].
2) Transmission Speed
We were able to establish a transmission speed up to 6 kHz
bit rate, which was faster than any previous transmission
speed on a wired communication channel in EE113D. Even
though this is ground-breaking, we were not at the maximum
speed yet. The GPIO library could be rewritten to be more
efficient, allowing the transmission speed to reach TIMER2’s
limit at 150MHz.
G.Possible Improvements
For any product, there are always improvements available.
We have summarized the possible improvements for this
project as below:
1) Use a Better Transmission Scheme
As explained before, our transmission scheme has
synchronization issue for a long stream of 1’s or 0’s. We
should use a something similar to Morse code, for example,
a dot means 1’s and dash means 0’s. This might have
further slowed down the transmission speed, but this would
allow an error-free communication.
9. 9
2) Rewrite the GPIO Interrupt Function
By reducing the clock cycle needed for the GPIO
interrupt, we might be able to increase the transmission
speed up to the MHz range. Combining this with the above
mentioned improvements, we could create a higher-speed
error-free communication system.
3) Merge the two Systems Together
Once we create an error-free communication system, we
can merge the Steganography System and Communication
System together.
4) Miscellaneous
Obviously, there are also some smaller improvements we
should investigate. We could add a ‘faster-reaction’
transmitting circuit and/or append one ‘useless’ bit to the
end of the information bits to improve our system’s
accuracy. Such improvements are not as significant as the
previous three improvements mentioned.
V.ACKNOWLEDGEMENT
The authors thank Dr. Briggs for providing support with
developing circuit implementations for the transmission
system. The authors also thank Che-I Lien for assisting with
setting up timerCounter.c code as well as providing code to
load image files via USB. Finally, the authors would like to
thank members of the TI E2E Community for providing
support via answering some of our forum posts.
REFERENCES
[1] K. Korhorn, “Steganography Uses and Effects on Society,” University
of Illinois, Champaign, IL, 2002.
[2] N. F. Johnson. (1995, Nov.), Steganography. George Mason University,
VA. [Online]. Available: http://www.jjtc.com/stegdoc/sec101.html
[3] Various Authors. (2008), American History: 60d. Living in the
Information Age. Independence Hall Association, PA. [Online].
Available: http://www.ushistory.org/us/60d.asp
[4] W. Way. (2015, May), PAM-4: A Key Solution for Next-Generation
Short-Haul Optical Fiber Links. [Online]. Available:
http://blog.neophotonics.com/pam-4-a-key-solution-for-next-generation-
short-haul-optical-fiber-links/
[5] E. Liu. (2004, Nov.). Convolutional Convolutional Coding & Coding &
Viterbi Viterbi Algorithm. Helsinki University of Technology, Finland.
[Online]. Available: http://www.comlab.hut.fi/opetus/333/2004_2005_
slides/Convolutional_Coding_Viterbi_Algorithm.pdf
[6] (1999). Performing Viterbi Algorithm. Spectrum Applications. [Online].
Available: http://home.netcom.com/~chip.f/viterbi/algrthms2.html
[7] (1999) Photodiode/Phototransistor Application Circuit. Sharp
Corporation. Reference Code: SMA99017. [Online]. Available:
http://denethor.wlu.ca/pc300/projects/sensors/photdiod.pdf
[8] (1967). General Information – Binary Synchronous Communications.
IBM Systems Development Division, NC. [Online]. Available:
http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/datacomm/A27-
3004-0_bisyncGenDescr.pdf
[9] (2015, May). OMAPL138 LCD Kit (Schematics, BOM , Layout, and
Gerber Files) v.A7a. Texas Instruments, TX. [Online]. Available:
http://www.ti.com/tool/tmdslcdk138#Technical%20Documents
[10] C. Lim. (2015, Mar.). UCLA EE113DB RC Car Ball Avoidance.
[Online]. Available: http://www.youtube.com/watch?v=b3-WVb9qBJY
[11] Face Detection Demonstration. Texas Instruments, TX. [Online].
Available:
http://processors.wiki.ti.com/index.php/L138/C6748_Development_Kit_
(LCDK)#Face_Detection_Demonstartion
[12] (2016, Feb.). TI E2E Forum: OMAP L138 LCDK GPIO. Texas
Instruments, TX. [Online]. Available:
http://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/4880
72
[13] (2016, Feb.). TI E2E Forum: Rapidly poll GPIO Input. Texas
Instruments, TX. [Online]. Available:
https://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/4884
81
[14] (2016, Feb.). TI E2E Forum: OMAP-L138 GPIO Interrupt. Texas
Instruments, TX. [Online]. Available:
https://e2e.ti.com/support/dsp/omap_applications_processors/f/42/t/4891
44
[15] S. Moran. (2015, May). Convolutional Encoding & Viterbi Decoder.
MATLAB. [Online]. Available: http://github.com/smoran1/matlab-
scripts/tree/master/convolutional-encoding.
[16] S. Moran & C. Yu. (2016, Mar.). Convolutional Encoder & Viterbi
Decoder in C. [Online]. Available:
https://github.com/smoran1/EE113DB-Design-
Project/blob/master/convolution_viterbi.c
[17] S. Moran & C. Yu. (2016, Mar.). Transmit Timer example code in C.
[Online]. Available: https://github.com/smoran1/EE113DB-Design-
Project/blob/master/transmit_timer.c
[18] (2012, Mar.). StarterWare-OMAPL138. Texas Instruments, TX.
[Online]. Available: http://software-
dl.ti.com/dsps/dsps_public_sw/c6000/starterware/01_10/index_FDS.htm
l
Steven Moran (BS’16) was born in San Jose, CA and
attended University of California, Los Angeles (UCLA) from
2012 to 2016. He studied electrical engineering, focusing in
integrated circuits and ultimately earned his Bachelor’s degree
in spring of 2016. He will be attending the UCLA Graduate
School of Engineering beginning in fall of 2016 with a
Departmental Fellowship, working towards both a Master’s
degree and Ph.D in Circuits and Embedded Systems.
Beginning fall of 2016, he will be working as a Research
Assistant in the UCLA Center for Heterogeneous Integration
and Performance Scaling (CHIPS).
Cheuk Yu (BS’16) was born in Hong Kong in 1993. He
attended University of California, Los Angeles (UCLA) from
2012 to 2016. He will be graduating with a Bachelor’s degree
in electrical engineering in fall of 2016, focusing in integrated
circuits and signal processing.
From 2014, he has been a Student Researcher of the
Electron Losses and Fields Investigation (ELFIN) under the
Earth, Planetary, and Space Sciences department (EPSS) at
UCLA. His role includes printed-circuit board design and
testing. The group is building UCLA’s first fully-built satellite
to study space weather, and it is expected to be launched in
2017.