After our demo, our team decided that ensuring we could integrate is our highest priority considering our timelines. According to our Gantt Chart, we were to be done integrating by the end of this week. We are grateful for having budgeted sufficient slack time to work through our project. Thus, along with working on the ethics assignment this week, I focused my energy on porting my MatLab code to C++. This is essential for integration purposes.
Akash’s Status Report for 4/11
This week I have been working on converting the song selection algorithm code to Java so we can integrate it in the app. During our demo Professor Sullivan and Jens gave us some ideas about testing and other features to try with the song selection algorithm. The one that I think would be cool to work on is the having the users enter their ranks or preferences for songs that will be like a score booster when the songs are being selected.
Team Status Report for 4/4
Next week is the demo of our project. We will be showing each of our subsystems to Professor Sullivan and Jens.
-Mayur aims to have preliminary implementations of each part of his subsystem (the phone app)
-Akash aims to have a roughly close-to-done implementation on the song selector algorithm
-Arushi wants to have progress on the Wavelet algorithm to show.
We look forward to the feedback we will receive, and we think it will help us moving forward.
Mayur’s Status Report for 4/4
This week saw a bit of a pivot for me. Originally, my plan was to add music to the app and show that it was possible to run C code (call a function) from within the codebase.
First, I did the former. Indeed, I can play “Africa” by Toto with a WAV file when a user clicks the Play button. And, I can stop it when the user presses the Pause button. At this point, adding more music is fairly straightforward.
The pivot comes in from the second goal. Arushi was able to write a Vocoder in Matlab, and she found a link about how to run MatLab on Android. My network was really bad, and it took me 10 hours to download the Matlab software to my computer. I am hoping to investigate the possibility of using Matlab instead of C on Android using the suggestions at this link: https://www.mathworks.com/matlabcentral/answers/417602-can-matlab-code-is-used-in-android-studio-for-application. This way, I can explain the progress during the demo and maybe allow Arushi an easier time in developing the Wavelet code.
Next week is the Demo, for which my subsystem should be close to done. The idea is to have each part done to some degree (C/Matlab code, UI, music playability), so that all that is left is to polish the parts and integrate it with the other subsystems. Hence, that is my goal for the next week (to make sure the subparts have a preliminary implementation).
Akash’s Status Report for 4/4
This week I worked on the song selection algorithm. I got something basic working in Python. I created a list of song objects and the algorithm goes through as specified in the Design Document and scores the songs and picks the best one to play. The next step is to get this working with actual music and write it so it is compatible with Android Studio.
Aarushi’s Status Report for 4/4
I had the phase vocoder based on an STFT working on a monophonic signal last week. I tried playing a snipper of a polyphonic song that may be used while running. I used the intro of “Eye of the Tiger”. This did not directly work. The main problem was that the song’s signal as an array was too long to play on MatLab online. Despite having been able to complete my advanced signals classes with the online version, it seemed necessary for me to download the software on my laptop so that I could ACTUALLY test songs. I started this process, but ran into issues here because my mac is 8GB and has been low on storage/disk space for 3 years now. I spent a few hours to moving large folders and files online but still did not have enough space for the software. As a result, I was unable to download the software program. However, I have a new laptop coming in within the week. I will be able to test full songs on matlab on that.
In the meantime, I still wanted to make relevant progress this week. I passed a smaller snippet of the polyphonic signal through the phase vocoder based on stft.
I also deconstructed & reconstructed a signal with DTCWT. I did this with DWT last week. However, DWT results in shift invariance post reconstruction. DTCWT incurs a drastically lesser shift invariance. I tested this out to find this concept to be true.
Team Status Report for 3/28
Status Report
—
Risk Management Update (most remains the same)
We have built risk management into our project in a couple ways. First in terms of the schedule, as we mentioned before, we added slack time into the schedule to make sure we can account for any issues we run into as we develop our project. This allows us to work out these issues without running out of time at the end of the semester.
From the design side, we have backups for potential problems that will come up while working on the project. We have four specific cases for our metrics that we laid out earlier. The main risk factor is using the Dual-Tree Complex Wavelet Transform Phase Vocoder. If it does not work, we will fall back on using the STFT based Phase Vocoder that we know works well for music. We may attempt to implement our own, or use a library on GitHub. We have done our research and are putting most of our time into this aspect of the project since it is the focus point that differentiates us from other apps like this, while also being the primary risk factor.
The second biggest risk factor is the accuracy of the step detection from the smartphones. We have done testing and seen that the phone meets our accuracy requirements, so hopefully this will not be an issue, but if we find out during implementation and testing that the accuracy is not as good as we thought, we are going to order a pedometer that we can collect the data from instead.
The only change in our risk management is to account for lost time and lost ability to work physically together. This may deter integration, and full system testing capabilities. This is because we decided to use the Samsung S9 as our base test device since it had sufficient step count accuracy. With our new situation, Akash is the only member who has access to this device and he was not an initial test subject of our running data. Our discussion with our professor, Professor Sullivan, and TA, Jens, helped generate a reasonable plan to possibly adjust. This will serve as our backup plan. We will each write our individual parts, test them independently, and create deliverables that convey their functionalities. The latter mentioned deliverable is a new addition to our project. This new addition is to account for the case that we are not able to integrate the individual components. Thus, while we will aim to integrate the components, it will be a challenge and stretch goal.
The smaller risk factors involve the timing of the application, which will involve us widening the timing windows for our refresh rate, and minimizing the time it takes for the app to start when initially opened.
In terms of budget, we have not run into any issues yet, and do not plan on, since we have most everything we need already.
Mayur’s Status Report for 3/28
My goal for last week was to finish off the basic step counting functionality of the app so that Akash could run… and I finished! I downloaded the app to my phone before sending it to Akash. After pressing a “play” button, the app begins counting steps. Instead of using the step counter sensor, I am currently using the step detector. From our discussion with Professor Sullivan, we decided to gather data every second so that we could test the limits of the warping algorithm. As described in our research phase, the step counter takes multiple extra seconds to gather its measurements. This is in order for it to filter out false positives (which takes extra processing time). When I tried it out with the app, I found that I wasn’t getting any measurements for the first 6-9 seconds after starting up the app. Since the step counter took a variable number of multiple seconds to gather data that we wanted at the granularity of a second, it was not possible to use it in this case. If we switch back to the granularity of 60 or 90 seconds, we will switch back to it then.
Initially, I displayed the step counts on the screen in the form of an alert dialog. This did not work out for two reasons. The first was that I was unsure if there was a limit to the character count of a dialog box. The second was that I could not find a way to copy the text of the dialog into an email program. As a solution, I implemented code that brought up a ready-filled email to send out the step counts.
My goal for next week is to play music off the phone. As a stretch goal, I would want to call some function in C/C++ just as a proof-of-concept. Admittedly, the UI looks hideous at the moment. This is something else I can fix.
Pictures:
<– The UI
<– Automatically pulls up email with pre-filled body after user presses pause button
Akash’s Status Report for 3/28
This week I worked on starting the song selection algorithm and getting some step detection data so we can use it for the future. My goal with the song selection algorithm is to get it working without music to make sure that the actual math and selection of songs works properly. I am using Python for this right now, but the final one might be in Java.
We are collecting step data in case we do not have the ability to finally integrate everything into one app, we have the data to use, even if not in real-time. My goal for the next week is to finish the basic song selection algorithm.
Mayur’s Status Report for 3/21
As I described in last week’s report, the outbreak of COVID-19 has forced all classes online. Our group wrote a Statement of Work that describes how we plan on dividing the project (see the team status report for this week). Essentially, we will be continuing with our initial division of labor, with small modifications to compensate for the difficulty of integrating our individual portions. During this next week, I will be creating the framework that allows Android to record step counts. I will be writing an app that will allow Akash to record his pace at 90 seconds intervals during a 30 minute run. Currently, my plan is to emit the recorded data as a list and send it in an email with a hard-coded address. This is subject to change, however. Aarushi will be using the data we gather to test out her time warping implementation.
In regards to the implementation of the project this week, I spent time attempting to work with the Native C/C++ App with Android Studio. Before, I was working with an Empty Activity instead. As it turns out, there were many more problems than I initially anticipated with setting up the new app. Right from the start, I received errors when Android Studio tried to build the project. Specifically, I received errors because I had not accepted certain licenses. I attempted to follow the solutions in this link https://stackoverflow.com/questions/54273412/failed-to-install-the-following-android-sdk-packages-as-some-licences-have-not-b to solve the problem. But, I got an error along the way that told me the JAVA_HOME environment variable had not been set. I was confused at first, since I assumed that Android Studio would just set it to the JDK (actually JRE) that came embedded with the program (apparently not). To solve the issue, I downloaded the latest version of Java (jdk-14) and set my environment variables manually. Surprisingly, Android Studio does not support versions of Java above 8, and so I had to uninstall it. Then, I found out that there are GUI issues with using the default shell with Windows when trying to accept the licenses. As a response, I downloaded Git Bash. Eventually, this was my solution on how to fix the issues I had:
- Download Git Bash
- Navigate to ~/AppData/Local/Android/Sdk/tools/bin
- Run $ export JAVA_HOME=”C:\Program Files\Android\Android Studio\jre”
- Run $ ./sdkmanager.bat –licenses
- Reply yes to every prompt
- Reload Android Studio and attempt to re-build the project
- Accept every prompt to resolve issues related to getting/using a C/C++ compiler
