Skip to content

Audio analysis multitool on a Nexys Video board, made for ECE532 Digital Systems Design

Notifications You must be signed in to change notification settings

Stewmath/ECE532-Audio-Analyzer

Repository files navigation

About

This is an audio analysis multitool that runs on a Nexys Video board, supporting live waveform, pitch graph, and spectrogram displays over HDMI. Developed with Vivado 2018.3.

This was our course project for ECE532 - Digital Systems Design.

See it in action: https://www.youtube.com/watch?v=KJVU2bFoxcI

For technical details, see our final report.

Authors

Screenshots

Waveform view:

Pitch graph:

Spectrogram view:

Usage

The SDK files have a pre-generated bitstream you can use. The simplest way to test the project would be to load Vivado, click on "Launch SDK", and program the board in the SDK.

Connect the following peripherals to the Nexys Video board:

  • A USB keyboard supporting PS/2 fallback mode (may need an older keyboard)
  • An audio input source:
    • A mic (to mic input jack), or
    • (Preferably) A direct connection to the line-in jack
  • An audio output device connected to the headphone jack
  • An HDMI monitor

Keyboard controls:

  • 1: Switch to waveform display
  • 2: Switch to pitch graph display
  • 3: Switch to spectrogram display
  • m: Switch to mic input
  • l: Switch to line input
  • up: Increase audio input amplification
  • down: Decrease audio input amplification
  • [: Decrease audio output level
  • ]: Increase audio output level
  • Backspace: Reset pitch graph or spectrogram

In pitch graph mode:

  • Enter: Begin or pause pitch recording
  • Space: Play back recorded pitch graph in the form of square waves

Design Tree

audio_analyzer
├── 3rd_party_files
│   └── myI2STx_v1_0.v
├── audio_analyzer.sdk
│   ├── design_1_wrapper.hdf
│   ├── design_1_wrapper_hw_platform_1 // Hardware platform
│   ├── hdmi_bsp_2 // Board support package (auto-generated)
│   └── main
│	   ├── Debug
│	   └── src	// C Source files are here
├── audio_analyzer.srcs
│   ├── constrs_1
│   │   └── imports
│   │   	└── new
│   │       	└── hdmi.xdc // Constraints file
│   └── sources_1
│   	├── bd
│   	│   └── design_1 // Top-level block diagram
│   	├── imports
│   	└── ip_repo // Generated files from IP blocks
├── audio_analyzer.xpr
├── doc
│   └── Final Group Report.pdf
├── examples
│   └── video_testbench.sv
├── ip_repo
│   ├── axis_splitter // AXI Stream splitter module
│   ├── cepstrum_ip   // Cepstrum pitch detector module
│   ├── keyboard_ip   // Keyboard input module
│   ├── myI2STx_1.0   // I2S module
│   └── video_system  // Video module
├── python_tools  // Miscellaneous python scripts
└── README.md

Top-level folders:

  • 3rd_party_files: Contains the original version of the I2S module that we found online.
  • audio_analyzer.sdk: Contains C source files for the microblaze.
  • audio_analyzer.srcs: Contains the vivado project, consisting mostly of one large block design which uses custom IP blocks from the ip_repo directory.
  • doc: Documentation (contains our final report)
  • examples: Contains a standalone video testbench, based on the one in our “video_system” submodule, that can be used to help develop verilog-based graphics.
  • ip_repo: Sources for the IP blocks that are imported into the main project. All of our custom verilog code is here, along with the 3rd-party code we used.
  • python_tools: Miscellaneous python scripts used for research and to support development of the verilog modules.

About

Audio analysis multitool on a Nexys Video board, made for ECE532 Digital Systems Design

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published