Portfolio

Below you will find a selection of previous work from academic courses and personal projects. Where applicable, links are provided.

 
 

Signal Replay System

This project encompasses well over 150 hours of development work. It’s the perfect example of the work I hope to do in industry: hardware-software codesign. I used the Digilent Zybo development board and designed custom IP in Verilog using the FPGA resources. I also wrote some low level C code for the 32bit ARM processor to interface with the hardware at a higher level of abstraction. There’s a lot that went into this project, so the best way to get an idea of what it’s about is to check out the report (link below with a lot of pictures). In short, this system is able to record, replay, and generate arbitrary digital signals. The basic idea is to hook the system up to a target device, have the system record known “good” inputs to the target device, manipulate those inputs in some way (glitching, frequency or phase shifts, etc.), and feed them back into the target device while observing the outputs of that target device. Based on those outputs, the system attempts to determine some timing properties of the system. A trivial example might be determining the debounce time of a button.


LabVIEW Audio Processor

This project is from a DSP course I took during the winter 2018 quarter. Prior to this project, I had little experience with LabVIEW, and the experience I had was not enjoyable. Through this project, I started to see the power of having a GUI object automatically attached to each functional block. In short, this project was a playground for implementing various audio effects from faders and filters to delay lines and flangers. It took place over the course of several weeks broken into four major milestones. It started with a simple VI that took a path to a sound file, broke into frames, and wrote output to the sound card. By the end of the term, the project had a simple but extensible audio plugin architecture, looping functionality, overlap add processing, and much, much more. This is certainly a project I’d like to expand on in the future. There are many more effects I want to implement, and as a DJ, I have no shortage of cool ideas for a project like this one.


space2433.png

FPGA Space invaders

For a final project in an advanced Verilog design course I took in the fall of 2018, students were given source for a simple FPGA pong game. We were tasked with writing a more portable VGA driver, adding sound, a scoreboard, and other features of our choice. It was a good place to start to get an idea of how a game mechanics (collisions, entities, etc.) could be implemented on an FPGA, but I was interested to go deeper than what the project required, so I decided to spin my own game: SPACE INVADERS! The VGA driver and underlying circuitry was easily portable from the pong implementation, but I added custom graphics that drew images stored in RAM including a ship I drew and custom high score screen and a custom title screen. I was really happy with where things ended up. I still implemented the required features, but I got to do it in a unique way and learned a lot along the way.


MATLAB For SPICe sims?

As I’ve gone through my undergraduate education, I’ve learned about many different tools. My favorite, by far, is MATLAB. I try to use it for everything I can. After finally getting fed up with the OrCad GUI, I decided to seek out other ways simulate circuits. I came across ngspice, and being a huge fan of open source projects, was immediately intrigued. I liked the idea of writing netlists instead of drawing out schematics and connecting wires on a clunky interface. So, the ngspice command line tool took care of the simulation, but what about visually representing the data on a plot? Enter MATLAB. I came across an excellent MATLAB script from Iain Robinson that parsed the ngspice output into an easy to use MATLAB struct. From there, I was free to use all of MATLAB’s bells and whistles. The image to the left is a simple example of this, but this workflow has become invaluable, and the plots are gorgeous. Furthermore, being able to attack the problem with different approaches but in the same environment boosts my efficiency. If you expand the image, you’ll see two methods of solution: solving a system of equations that describe the circuit and of course, the spice simulation.


Scooby Stacks

This is a top-level view of the “Scooby Stacks” processor I designed in the spring of 2017 with a team of four others as the final project for Computer Architecture I at Rose-Hulman. It’s a 16-bit stack-based processor designed to be able to run Euclid’s algorithm as a performance benchmark. This project reinforced my decision to pursue computer engineering. Once I started to learn how HDL worked, I was hooked. Having the ability to build circuits at my fingertips was powerful. I’ve been hooked since. As I’ve gone back and looked through the source, I chuckle when I think about how advanced I thought the implementation was. However, given the experience I’ve had since, I’d love to have the opportunity to go back and redevelop this project with some of the insights I’ve gained.


network_prof_comm.png

Networking and professional communication

This video presentation is for a group project spanning three weeks of an online technical communication course; it was completed in July 2017. The assignment was to research areas of networking and professional communication and relay this information to our fellow classmates. I was part of a five person team which met virtually for several meetings throughout the duration of the project. This provided its own challenges, but I found that swift and clear communication was the way to avoid potential pitfalls of remote work. I was tasked with the introduction which runs for the first minute and a half of the video. The presentation demonstrates my capacity to clearly communicate ideas while providing a broad context and tailoring content to a specific audience; in this case, fellow students preparing for the Rose-Hulman Career Fair. In addition, the video illustrates my design sensibilities and showcases my ability to present information in a dynamic and engaging way. With aspirations to work in industry as a project leader, this skill will be important as I will inevitably have to communicate with company heads as well as team members.


First successful push of RGB scheme to Neopixel

Visual Equalizer

This report, from February 2017, is for the final project of an introductory embedded systems course. It was compiled to communicate sequential stages of development to the course instructor. It documents the design process from beginning to end while highlighting project milestones. Students worked in pairs over the course of several weeks with the end goal of demonstrating required features in addition to supplemental implementations. I was responsible for most of the software design. A top level view illustrating the program control flow is on page eight. It it works well by abstracting details and providing labels for each stage of data processing and peripheral manipulation. Aside from applying what I learned in the course, this project provided an opportunity for my academic studies and personal interests to meet. As a deejay, being able to manipulate sound and light effects is invaluable, and in this project, I was able to see how that worked from the ground up. Additionally, with only three weeks to complete, my ability to manage time and meet tight deadlines was challenged and as a result, refined. Projects like this bring together technical and nontechnical aspects of engineering while developing habits that will translate seamlessly to industry. 


voltage_base_and_hit.jpg

Signal Processing in matlab

This figure is from a MATLAB script I first created in 2015. It reads the voltage of system and uses that information to track the rate at which someone hits a boxing speedbag. As a huge boxing fan and hobbyist, I was motivated to design something I could use myself and potentially bring to market. The project makes use of an Arduino UNO microcontroller and MATLAB’s Digital Signal Processing toolbox in addition to a sensor I built from conductive foam. The peaks on the figure correspond to strikes on the speedbag. The biggest challenge with this project is developing a reliable system for peak detection. I overcome this using various filtering methods to reduce the overall noise in the system. The first time I tried to make this work, I used a simple running average to try and limit false positives. Currently, it uses debouncing methods to address this issue. This is an ongoing project with many stages of development that I revisit when I have time. The end goal is to interface this device with a smartphone application that will be used to display the user's statistics. What I love about this project is that I am able to improve the design as I advance in my engineering coursework. I have provided a link to download the collection of MATLAB scripts and figures associated with this project.