Project 8 Audio Recorder and Player

Setting up Audio Recorder and player for the Blackboard



In this project, you will learn about Audio and Pulse Density Modulation (PDM). Then you will create an IP Core for this system and drive it through the Xilinx SDK.


Refer to background information for material that will help you go through this project.


1. Create a PDM to PCM Converter

Setup a PDM to PCM converter based on the background material and use your Sigma Delta Modulator together with the FIFO from your previous project to play the microphone data. You may reconfigure the sigma delta modulator as necessary.

2. Create a my_MIC IP

Your my_MIC IP should have an enable MIC functionality. Your code should be able to record audio from the MIC for at least 4 seconds. Thus, at 8kHz sample rate and 8 bit data you should be able to store 4 seconds worth of data in a block RAM. Make sure the block RAM is configured as two-way since you need write into it and then read the data for playback. Your register map for the IP should look as follows:

Address Name Bits used Function
0x4BB03000 Enable_MIC 0:0 Enable HPH out Left (Bit 0) and Right (Bit 1)
0x4BB03004 Start Recording 0:0 Record for 4 seconds
0x4BB03008 Start Playback 0:0 Play recorded audio

3. Increase Sample Rate

Increase the sample rate of the PDM to 44kHz by taking 4 samples in the time period you had earlier. For example, if you sent out one sample every 256 PDM signals earlier, then now you can modify the code so that you send out one sample (8bits) every 64 PDM signals (or at 44kHz). You should be able to notice a significant difference in the sound quality.

4. Store Recorded data in DDR Memory

Find a way to transfer your recorded data directly to the DDR Memory. You can use addresses 0x00900000 and above confidently to store over 30 seconds of data.


1. Create an SDK Terminal Application to control your my_MIC IP

Create an SDK Terminal Application using UART1 that is able to:

  • Turn on/off Left Speaker
  • Turn on/off Right Speaker
  • Start Recording
  • Start/Stop the Playback

2. Filter Recorded Data using a Simple Low Pass Filter in C

Use the data that you stored in DDR memory and filter it with a simple Low Pass Filter before playing it back. You can use the formula below to accomplish this.

filtered_output = (a) * (previous_filtered_output) + (1-a) * (raw_data)

where 0<a<1.