Skip to content

Digital Channelizier and some general notes (Summer 2025)

Ivar Nilsson edited this page Jul 26, 2025 · 5 revisions

⚠️ DISCLAIMER: This project have changed a lot over the years, therefore some documentation is old and outdated. This is the most recent documentation available (as of summer 2025) and if there are differences compared to other parts of the repo, please treat this as the source of truth.

This page is dedicate to briefly explain the digital channelizers and the current state of the repo. The channelizers are are implemented to lower the data rate by selecting only part of the acoustic spectrum. Two versions are available, one time domain band-pass filter implementation and another that works in the frequency domain. The recommended version is the FFT implementation because of higher resolution and overall better design. 🥇

The channelizers are both implemeted to filter out noise outside of the most "active" region. The FFT implementation separates the incoming sound signal and then uses a EMA-filter (Exponentiation Moving Average) to determine the most active region in the sound spectrum. The microphones have problem with noise in the low frequencies range and therefore signals in the lowest bins are always discarded. The new signal containing a narrow band of the full spectrum with the active range is then sent to the computer. Checkout the recordings to get a understanding of the microphone format. Basically one sub-band of one sample for all microphones are sent in each Ethernet packet. The sub-band number is indicated in the header(when we say header we don't mean the actual Ethernet header but a custom header in the start of the payload). There are currently no working beamforming implementation using the digital channelizers 😞 so please help convert the old one to handle the FFT data and the dynamically selected sub-bans.

The band-pass sub-band channelizer is available in the branch: legacy_bandpass_channelizer

The FFT channelizer is available in the main branch: main

Some block diagrams of the channelizer architectures are found under: block diagrams etc.

General get started info: To build the project make sure to install all the software, when this is done the activation script should pass without warnings or errors. Then simply write: build, in the terminal.

To build the simulated array, simply write build --simulated array in the terminal.

Simulations are executed using: run_test --wave tb_aw_top (example for running tb_aw_top)

pl directory

Here is all the RTL code located (pl=programmable logic). Some files might be slightly badly commented but the block-diagrams in the doc folder can help a lot with understanding the src code. The scripts are well done and properly maintained and to the best of my knowledge all of the work 👍. gen_vhdl_ls_toml.py is used to generate toml files for the vhdl-ls extension in vs-code (pretty cool if you ask me 😏)

ps directory

The PS (processing system) folder contain the code to run the UDP socket on the Arm core of the Zynq SoC. Please only modify main.c if you don't know what your doing 🤔. The main.c sets the mic order received by the PC.

python_scripts directory (some are not in python 🙃):

  • Record data using the alias save_and_plot it uses the udp_reciver.cpp script to receive data and save it to a .bin file. Make sure you have the correct folders to not get any errors. The save_and_plot alias also calls the analyze_simple.py script that quickly gives a overview of the data.

  • analyze_two_simple.py the script compares the frequency spectrum of two recordings.

  • post_process_recording.py converts the .bin file to a .txt that is readable.

  • sound_player.py play the sound from a recording, dont work with the channelizers (since data is in frequency domain, by doing inverse fft this can be fixed).

  • gen_array_data.py used to generate data for the simulated array.

  • ./python_scripts/calibration contains Jakob's thesis scripts.

  • ./python_scripts/phase_scripts contains Jakob's thesis scripts.

  • ./python_scripts/channelizer contains Ivar's thesis scripts.

  • ./python_scripts/fft contains Ivar's thesis scripts.

  • ./python_scripts/filter_test contains Ivar's thesis scripts.

Most(but not all) of these thesis scripts are outdated or redundant.

Clone this wiki locally