Month: December 2019
Roshan Nair – Weekly Status Update #11
Since this is the last week before the public demo it has mostly been about wrapping up on effects and cleaning any minor bugs so far. Delay/Echoing is complete with a variable delay however it seems to clip very briefly when changing from a short delay to a very large delay for some reason. I am still looking into fixing that. Additionally the goal is to also add Reverb which I am currently working on now. These will require the addition logic to the memory controller to arbitrate between requests since it is shared between modules.
Team A0 – Weekly Status Update #11
This week we are finalizing our project for demo day. We’ve recently expanded our effects list to include band pass filters, pitch shifting, and echoing. As a result we now have most of the effects we planned on implementing which is a success for us. Before demo day we want to make sure that any amplification to specifically quiet effects is done so that they can all be heard clearly on demo day.
Nick Saizan – Weekly Status Update #11
This week I made the framework for a chorus effect module. This effect involves the addition of the original audio with a delayed version of the audio. The delay however is variable, and in this case modulated by a triangle wave. They delay is achieved using a BRAM instantiation since a maximum of 30ms of audio is required. Currently I am in the process of running simulations on the module to make sure it behaves as expected, afterwards I plan on doing synthesis tests to see how it sounds, once I’m sure the datapath is working correctly.
Nick Paiva – Weekly Status Update #11
This week I worked on frequency filtering, pitch shifting, and a sine function look up table.
The frequency filtering is a 512-point FIR filter, and as such the cutoff frequencies are pretty sharp. I’ve calibrated the filters to isolate different parts of the audio track. It leads to some very interesting effects. I generate the impulse response using MATLAB, and then turn it into a lookup table for the FPGA to use. Here is a plot of the filters I am using:
Pitch shifting is a basic time domain implementation. I used the BRAM to set up a ring buffer. Data goes into the ring buffer at the audio sampling frequency, but the output pointer moves slower or faster depending on the pitch shifting selected. Linear interpolation is used for fractional samples. I did not expect this implementation to sound very good, but it actually works pretty well. Using the filtering block to filter out the lowest frequencies of the track before shifting makes it sound even better.
The sine function LUT is going to be used to make a new amplitude modulation effect. It is almost complete, but the interpolation between samples is not quite working just yet. When it works, the new effect should be trivial to implement.