Personal Accomplishments
Over the last week, I spent my time working on implementing the logic for converting signal processing to lighting attributes. Parts of the functionality were shown during the interim demo, where we were able to change the intensity and the saturation of the colors. After that, I worked on modularizing the code and implementing other parameters such as rotation, strobe, UV, etc. To accomplish this, I analyzed different signal processing outputs and cleaned the data using running averages, outlier detection, and normalization. I also helped with refining and debugging the lighting engine and the signal processing subsystems.
On Track?
We were able to make up for lost time from the previous week, and overall progress was on track. We were able to test each function independently and in conjunction with each other, and everything appears to be functioning correctly as showcased in the interim demo. While I ran into some issues with dependencies and libraries, I was able to implement a significant portion of the logic. I am confident that I can make more headways in integration going forward.
Goals for Next Week
My primary goal for next week is to wrap up the logic. This will involve implementing functionality for light selection, function selection, and parameter finetuning. While I have some idea of how to implement this, I will spend more time next week fleshing it out. Further, considering the time constraints, I need to test the functionality of the logic I have implemented until now with the lights. This will help me finetune the logic in the coming weeks.
Testing Plan
Given that I have been working on logic, I have implemented various functions that each control a different part of the lighting rig – light selection, effect selection, effect duration, rotation speed, colors, UV, etc. I have tried to make my code modular, splitting it into various small functions that I have been testing using unit tests on the go. Once I am satisfied with the local tests, I send the calls produced by these functions to the lights and look at their effect on the rig. This approach has helped me save time while fine-tuning the functions. An example of this can be the color selection function for the strobe lights. The color can be white or UV which we determine based on energy thresholding. In order to implement this, I created various helpers to read the energy over time, remove large outliers, normalize the energy on a 0 to 1 scale, and then threshold it to determine the color. All these functions were unit tested and the final output from the function was tested using the plot shown below, before playing it with the music on the lights.