Time Domain FIR Filtering

In the previous posts, we went through the basic exercise of reading audio samples through the ADC and outputting them to the DAC without manipulating the samples. This time, we’re going to kick things up a notch and add a filter to our audio processing chain.

Audio Sample with no Filtering

Audio Sample with Low Pass Filtering


If you like math and haven’t yet seen 3blue1brown’s video on space-filling curves, I suggest you check it out.

At the start of the video, a problem is given: provided an image, map each pixel to an audible frequency. The collection of unique frequencies of each pixel would then be summed, resulting in some waveform.


Audio Buffers

In the previous post, we created a very basic example that read a sample of audio from some input and routed it directly to output. At a sample rate of 40 kHz, this sequence of events repeated every 25 usec.

This is fine, provided that any processing you do on the sample does not last longer than 25 usec. Apply any heavier processing however and you run the risk of having your audio sound something like this:


Coding Environment

The last post went into the hardware details for our audio project. In this post, we’re going to cover the coding environment. Aside from the basics, there are some neat features in the microcontroller that we definitely want to use and that’s going to need some extra configuration.

The extra configuration steps sent me on a bit of a wild goose chase throughout the internet so I hope that by compiling most of what I learned into one post, you can get started more quickly.

Here’s what we’re going to cover:

  • Simplicity Studio IDE Introduction
  • Creating a New Project
  • Using EMLIB libraries
  • Enabling FPU and CMSIS DSP Extensions

Hardware Setup

There are a lot of musically savvy engineers who, after their first signal processing course, use their newfound knowledge to build an effects pedal of sorts. I definitely put myself in this category.

Over the next while, I will be messing around with different audio processing methods like filtering, reverberation, wavetables and whatever I feel like playing around with.

For this post, I am going to go through the hardware setup. The firmware setup will be covered in the next post.

The analog front end schematic and a physical implementation example is provided below.

Analog Front End Schematic


Like many others, I have been interested in visiting Japan and experiencing some of the culture. So recently, I decided to finally take a trip there. There is so much to write about Japan. So much so that condensing my two short weeks of visiting the country into one short blog post will be next to impossible. From its populous vending machines to cat cafes and lush green islands to concrete jungles, if a complete sensory overload is what you’re looking for then consider paying a visit to Japan.



Last year I created the seisMeowmeter project which unfortunately didn’t see full completion and so it collected dust as a prototype while I continued on with other projects. However, while building the seisMeowmeter, the geophone showed me that the ground was, in a way, a lot like jello than something completely rigid. The geophone picked up footsteps from upstairs, it picked up cars driving by my house and it even picked up the tiny vibrations that were coming from the transformer in my oscilloscope. The fact that the ground could transfer movements over a considerable distance was something very, very profound to me.

Given how amazed I was over what a small can with a magnet inside could do, it persisted in residing in a spot in my mind as I worked through other projects. I couldn’t let this one go and I just had to do something more with it.


FullSizeRender 3

Over the years that I’ve made PCBs, I’ve used two main fab houses, APC and Advanced Circuits. For a while, I’ve been hearing some good things about OSH Park so I decided to give them a try for my latest project (which I will be talking about in a later post!). For those of you not in the know, OSH Park is a company that takes in gerber files from people who want their boards fabricated, panelizes those boards into one big board then ships it off to a fab house. Once the panels are made, each individual boards are cut out and sent to their respective customers.