Intro: Digital Low Bit-rate Voice Communication
The "Digital low bit-rate voice communication" provides a solution for communications problem when a critical situation appears. A critical situation could be a wildfire, a military action or a natural disaster. That would be the moment when normal voice transmissions stop to satisfy our needs and this is why I came with the idea of this system.
The base of this project consists of MELP (mixed Excitation Linear Prediction) algorithm and it is used to compress voice signal in order to transmit it using a low bit-rate channel.
(Here is a description of the algorithm: https://en.wikipedia.org/wiki/Mixed-excitation_lin... )
Starting from an existing C implementation of this algorithm I implemented a complete system used communicate between two locations using a serial transmission.
I suppose that you can imagine that the transmission of voice signal without a compression - using a serial channel - would be impossible because the maximum transmission rate would be 115200 bps which is not sufficient to satisfy this scenario.
In this project description I will show you how to reproduce this system and how to use it if you want to test different scenarios of voice communication.
- 2 X ZedBoard Zynq-7000 ARM/FPGA SoC Development Board
- Xilinux OS
- 1 microphone
- 1 speaker (connected through a 3.5 mm jack)
- 3 x USB Cables (USB 2.0 to micro USB)
- 2 x VGA monitors
- 2 x mouses
- 2 x keyboards
- 2 x USB hub with 2 or more entries
For installing Xilinux OS on ZedBoards I recommend you to read the information from the official web site of Xillybus:
On this web site you will find links to all software components you need.
I attached here two .rar files which contain the source code for this project.
transmitter.rar - the source code corresponding to the transmitter board
receiver.rar - the source code corresponding to the receiver board
Step 1: Install Xilinux OS
Go to http://xillybus.com/xillinux and perform the actions described there.
After that connect your VGA monitor, USB mouse and keyboard to each ZedBoard as it is presented on the indicated web site.
Step 2: Prepare Source Code
Extract receiver.rar and copy all files to a folder created in the Xilinux file system from one of the ZedBoards.
Extract transmitter.rar and copy all files to a folder created in Xilinux file system from the other ZedBoard.
Open a bash terminal (on each ZedBoard) and go to the folder which contains copied files(receiver or transmitter - depends on the board).
Step 3: Configure Serial Connection
Connect an USB cable like this: on the receiver board connect it to the OTG micro USB port and on the transmitter connect it to the UART port.
On receiver terminal run command:
ls /dev/ | grep ttyACM for identifying the name of the port corresponding to serial connection.
On transmitter terminal run command:
ls /dev/ | grep ttyPS for identifying the name of the port corresponding to serial connection.
On configSerialCh file from each board you will find a bash script which contains the configuration of serial ports parametters. In my case the ports names were: ttyACM0 - for receiver and ttyPS0 - for transmitter serial port. If you have another values please modify them and also modify the file melp.c FROM EACH BOARD with these values for serial ports names(line 129 for receiver melp.c file and line 128 for transmitter melp.c file).
Next, give to this script file execution rights: chmod +x configSerialCh
and execute it: ./configSerialCh .
!!! Important: Perform these actions for each system(ZedBoard).
Step 4: Build the Executable ./melp
For each board run these commands to build the project and to obtain the ./melp executable:
!!! Important: Before running these commands be sure that the date and time are correctly set.
If they are not, use this command to set them:
date -s "DD MMM YYYY"
ex.: date -s "10 Apr 2016"
Step 5: Run the Program
Connect an USB cable from a board to the other one as it follows:
- for the RECEIVER board use OTG micro USB port
- for the TRANSMITTER board use the UART microUSB port
After that, connect the microphone to the TRANSMITTER ZedBoard and the speaker to the RECEIVER ZedBoard.
Run ./melp like this:
- FIRSTLY from the RECEIVER
- secondly from the TRANSMITTER
Step 6: Start Using the System
Now the system is ready to transmit your voice from the transmitter ZedBoard to the receiver one.