Skip to content

aebarthyi/CSE228Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CSE228Project

Andrew and Omkar's CSE228 Final Project

Description

In this project, we aim to make a chisel generator for a hardware digital signal processing audio filter that allows for audio frequency spectrum analysis. Our entire signal processing pipeline will consist of hardware implementations of a fast fourier transform (to convert a analog signal to digital), weighted audio filters(to apply weights/filters to the binned analog signals) and an inverse fast fourier transform (to convert the edited digital signal back to a digital form). We will be using the Cooley-Tukey algorithm, more specifically the radix-2 method to give us a fast performing implementation of an FFT. At the very least, we aim to provide CD quality audio using our audio filter, i.e. 44.1 kHZ/16-bit audio resolution with a 1024 point FFT (simulating a 1024 point FFT and IFFT chews up many gb of RAM and crashes, but testing up to 256 does work). Furthermore, we also aim to provide parameterizable FFT block lengths to resize the transformation resolution as well as to provide parameterizable bit depth for the input audio.

Prerequisites

Make sure you have sbt installed on the machine you are planning to use.
If you haven't installed it before, follow the directions from this link

Getting Started

Clone the repo to your machine, and run the following commands in order:

  1. cd CSE228Project
  2. sbt
  3. compile

After following these steps you will have compiled the project

Things that work:

  1. Complex Multiplier and Tester
  2. Butterfly Unit and Tester
  3. Twiddle Factor ROM and Tester
  4. Bit Reverse model (for use to test the AGU) and Tester
  5. Memory and Tester
  6. Address Generation Unit and Tester
  7. Forward FFT blocks and Tester (Works for real signals, currently has a bug in loading both real and imaginary values together)
  8. Filters (Hardcoded low-pass, high-pass, band-pass and band-stop) and Tester
  9. Inverse FFT blocks and Tester (Works for real signals, currently has a bug in loading both real and imaginary values together)
  10. DSPPipeline (Top module encapsulating the pipeline, connecting stages together)

Work in progress:

  1. Debugging issues with loading real and imaginary values together for forward FFT and inverse FFT
  2. Parameterized butterfly units for parallelism
  3. More complicated filters

How to test

Once the sbt kernel is opened up (Done by step 2 of Getting Started), you can test all of the created tests by running the test command.
If you want to test individual components you can do so by running the testOnly *testClass command in the sbt kernel instead.
The test classes that are currently supported are:

  1. BitReversalTester
  2. ButterflyUnitTester
  3. ComplexMulModelTester
  4. TwiddleFactorTester
  5. RAMTester
  6. AddressGenerationTester
  7. FFTTester
  8. FilterTester
  9. IFFTTester
  10. DSPPipelineTester

About

Andrew and Omkar's CSE228 Final Project

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages