I'm an Electrical Engineering graduate from UCLA. My area of focus was in digital signal processing with a technical breadth in computer science.
I have experience in C/C++, Python, MATLAB, PHP, SQL, HTML, CSS, and Javascript.
Tools
I have experience with lab instruments such as oscilloscopes, spectrum analyzers, power supplies, DMMs and function generators. I also have project experience with NI multisim, NI mydaq, LabView, CubeIDE, Altium, KiCad, Cadence, Ltspice, and Digilent AD2.
Some of my Projects
EEG Alpha Wave Detection
Geography
Iventory Management System
Tunnelman
LiPo USB Battery Charger
Contact Me
United States Geography Quiz Game
An interactive web application written in JavaScript that tests users on their U.S. geography. I used an SVG grid for the map, and then it was as simple as attaching event listeners to each state. Try it out
Database/Inventory Management System
I developed this web app specifically for a cellphone repair parts site. The backend was written in PHP and SQL. In addition, the app has AJAX functionality so updates to any fields can be made without a page reload.
Tunnelman Game
This was the final project for a C++ class I took. The goal is to tunnel through the earth and find all of the buried treasure. Enemies will populate and attack with varying levels of speed. Different items such as weapons and health packages will randomly appear during gameplay.
EEG Brainwave detection and Alpha Wave Classifier
This was my DSP capstone project. The idea was to detect a subject's brain waves via EEG, and then to classify them using a neural network according to their frequency characteristics.
This was achieved by first using a simple analog amplifier stage (shown in the figure above) that provided a gain of around 1000 (brain waves are on the order of 10uV, extremely small), and then feeding the output of this amplifier into an H7 nucleo board. In the context of this project, one "channel" constituted three electrodes. Two electrode inputs were fed into a differential amplifier, while the third electrode was used as a ground reference. The electrode placements were also just as important. In the next section this will be explained in more detail. In practice, a sampling rate of around 160Hz would be sufficient to satisfy Nyquist theorem (as the most interesting brain waves happen between 0-80 Hz) although for this project a sampling rate of 2kHz was chosen.
The next step would be processing. 60Hz noise was removed by implementing a digital filter. In addition, the signals were also normalized to zero mean and unit variance. The figures below plot the power spectral densities of myself with my eyes open, and eyes closed (Note this is before filtering out the 60Hz noise). These plots help to visualize the next step of the project, which was classification.
As you can see above, the power spectral densities are quite different depending on eye-state. This is due to the brain emitting signals with different frequency characteristics depending on the state that it is in. The occipital lobe, which controls the visual cortex, will produce waves with more power in the 8-12Hz band (alpha wave) when the eyes are closed compared to when the eyes are open. This doesn't mean the brain won't emit alpha content when the eyes are open, just that alpha waves dominate when the eyes are closed. As mentioned above, electrode placement was critical for this project. For the purposes of this project, two electrodes were placed on the forehead corresponding to locations Fp1 and Fp2 using the 10-20 EEG standard, while the third electrode was placed on the occipital lobe (O2).
Classification was done by training a neural network in MATLAB and implementing the network on the STM32. The idea was to extract the important features of the PSD's and feed these features into a neural network. As brain waves fall into distinct frequency bands (4-8Hz for theta, 9-13Hz for alpha, 14-30Hz for beta, 30Hz and above for Gamma) the first thought was to extract an average magnitude within these frequency bins, and these magnitudes would then be fed into a neural network for classification. This is essentially what we did, and the results of one of the initial networks trained is shown below. After retraining the model several times, eventually a high accuracy network was found. Only a two layer network was needed to classify with high accuracy. By doing feature extraction, a more complex network was not needed. The final step was to implement everything in C on the H7 nucleo board. This wasn't too difficult, as the rough framework was already done in MATLAB.
The final results were quite accurate when classifying in real time. My partner and I were able to achieve above 90% accuracy using ourselves as test subjects. Some important things to note however, is that electrode prep is critical. If the electrodes do not make adequate contact with the scalp, signal resolution is degraded. This can be mitigated by applying electrode paste, and wearing some form of cap to hold the electrodes in place during measurement. The next step for this project would be to implement more channels, and integrate the microcontroller and amplifier stage on one PCB.
LiPo USB Battery Charger
I worked on this project to gain exposure and experience with board layout and PCB design software. The goal of the project was to create the layout for a micro USB to JST LiPo battery charger. I used KiCad for the PCB design and schematic capture.
LiPo USB Battery Charger
I worked on this project to gain exposure and experience with board layout and PCB design software. The goal of the project was to create the layout for a micro USB to JST LiPo battery charger. I used KiCad for the PCB design and schematic capture.