All Projects → tino1b2be → DTMF-Decoder

tino1b2be / DTMF-Decoder

Licence: MIT License
A Java program to implement a DMTF Decoder.

Programming Languages

java
68154 projects - #9 most used programming language
HTML
75241 projects
matlab
3953 projects
shell
77523 projects
Batchfile
5799 projects
CSS
56736 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to DTMF-Decoder

dsp-kit
A digital signal processing library in Javascript
Stars: ✭ 32 (+14.29%)
Mutual labels:  dsp, fourier, fft, digital-signal-processing
ooura
Javascript port of Ooura FFT implementation
Stars: ✭ 23 (-17.86%)
Mutual labels:  signal-processing, dsp, fast-fourier-transform, fft
Edsp
A cross-platform DSP library written in C++ 11/14. This library harnesses the power of C++ templates to implement a complete set of DSP algorithms.
Stars: ✭ 116 (+314.29%)
Mutual labels:  signal-processing, dsp, signal, audio-processing
intfftk
Fully pipelined Integer Scaled / Unscaled Radix-2 Forward/Inverse Fast Fourier Transform (FFT) IP-core for newest Xilinx FPGAs (Source language - VHDL / Verilog). GNU GPL 3.0.
Stars: ✭ 43 (+53.57%)
Mutual labels:  dsp, fast-fourier-transform, fft, digital-signal-processing
math
Useful m-scripts for DSP (CIC, FIR, FFT, Fast convolution, Partial Filters etc.)
Stars: ✭ 15 (-46.43%)
Mutual labels:  dsp, fast-fourier-transform, fft, digital-signal-processing
RTspice
A real-time netlist based audio circuit plugin
Stars: ✭ 51 (+82.14%)
Mutual labels:  signal-processing, dsp, digital-signal-processing, audio-processing
dsp-theory
Theory of digital signal processing (DSP): signals, filtration (IIR, FIR, CIC, MAF), transforms (FFT, DFT, Hilbert, Z-transform) etc.
Stars: ✭ 643 (+2196.43%)
Mutual labels:  dsp, fast-fourier-transform, fft, digital-signal-processing
Fourier
Fast Fourier transforms (FFTs) in Rust
Stars: ✭ 206 (+635.71%)
Mutual labels:  dsp, fft, audio-processing
RpiANC
Active Noise Control on Raspberry Pi
Stars: ✭ 49 (+75%)
Mutual labels:  signal-processing, dsp, digital-signal-processing
Planeverb
Project Planeverb is a CPU based real-time wave-based acoustics engine for games. It comes with an integration with the Unity Engine.
Stars: ✭ 22 (-21.43%)
Mutual labels:  dsp, digital-signal-processing, audio-processing
8d Audio
Some dsp to make songs "8D"
Stars: ✭ 43 (+53.57%)
Mutual labels:  signal-processing, dsp, wav
old-audiosync
First implementation of the audio synchronization feature for Vidify, now obsolete
Stars: ✭ 16 (-42.86%)
Mutual labels:  fft, digital-signal-processing, audio-processing
Nwaves
.NET library for 1D signal processing focused specifically on audio processing
Stars: ✭ 151 (+439.29%)
Mutual labels:  dsp, wav, signal
Kfr
Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Stars: ✭ 985 (+3417.86%)
Mutual labels:  dsp, fft, audio-processing
spafe
🔉 spafe: Simplified Python Audio Features Extraction
Stars: ✭ 310 (+1007.14%)
Mutual labels:  signal-processing, dsp, frequencies
SpleeterRT
Real time monaural source separation base on fully convolutional neural network operates on Time-frequency domain.
Stars: ✭ 111 (+296.43%)
Mutual labels:  signal-processing, dsp, audio-processing
python-soxr
Fast and high quality sample-rate conversion library for Python
Stars: ✭ 25 (-10.71%)
Mutual labels:  signal-processing, dsp, audio-processing
FftSharp
A .NET Standard library for computing the Fast Fourier Transform (FFT) of real or complex data
Stars: ✭ 132 (+371.43%)
Mutual labels:  signal-processing, signal, fft
audiowmark
Audio Watermarking
Stars: ✭ 101 (+260.71%)
Mutual labels:  signal-processing, fft
signals-and-systems
Interactive visualizations for Dr. Richard Baraniuk's open-source "Signals and Systems" textbook. R / Shiny.
Stars: ✭ 31 (+10.71%)
Mutual labels:  dsp, digital-signal-processing

DTMF Decoder

For the project page click here.

What is DTMF?

DTMF stands for Dual Tone Multi Frequency. This is an in-band telecommunication signalling system using voice-frequency band over telephone lines between telephone equipment and other communications devices and switching centres. DTMF is used to represent up to 16 keys (most telephones only use 12 of these). Each key is represented by two different frequencies. The first bin (lower frequencies) consist of frequencies under 1kHz and the second bin (Upper bin) consists of frequencies above 1.2kHz. The combination of the two tones will be distinctive and different from tones of other keys and these tones cannot be mimicked by voice or random signals.

DTMF-Decoder

The intent of this project is to design a DTMF Decoder and create a Java API for a it. I started this project while I was on a short internship at VASTech during the December 2015-January 2016 UCT vacation break. My mentor for this project was Albert Visagie (@avisagie).

DTMF-Decoder API Specifications

The API is designed for use in programs where a DTMF signal needs to be decoded (given it is in a valid form of .mp3 file, .wav file or as an array of sample points; either as double[] (mono) or as double[2][] (stereo)).

  • DTMF Decoder for .wav and .mp3 files or when given an array of sample points. (double[] / double[2][]).
  • The API can decode only mono and stereo channeled audio signals. It separately decodes and returns the DTMF tones found in each channel.
  • Has an audio file interface which can be implemented for more audio file types (ogg, wma, etc...)
  • DTMF Tone/Sequence Generator that can export to .wav files.
  • Goertzel Class which can be used independently with arrays of sample points representing a signal.
  • The API includes a GUI Application (Java Swing) which can decode DTMF .mp3 and .wav files and also generate DTMF tone sequences.

Possible Improvements

  • Optimising the Goertzel Class to improve on speed and performance.
  • Coming up with a more efficient way to detect noise and human speech to improve rejection and minimise false hits when decoding random noise files.
  • Decoder could give a precise location (time) of detected tones within the audio file.
  • Implement signal processing techniques that improve detection like correlation to boost the SNR, window functions to reduce spectral leakage, etc... (I hadn't studied these at the time of this project)

Usage

Check out this small CMD program that uses the decoder. To use this decoder in your code, import com.tino1b2be.dtmfdecoder.DTMFUtil;

For .mp3 or .wav files

If you have a signal you want to decoded that is saved as a .mp3 or .wav , it can be decoded this way:

DTMFUtil dtmf = new DTMFUtil(filename);
dtmf.decode();
String left_channel = dtmf.getDecoded()[0];
String right_channel = dtmf.getDecoded()[1]; // only works if it exists else it throws an indexing error

Where filename is the path to the .mp3 or .wav file. More file types can be implemented using the AudioFile interface but only these two are implemented so far.

For a given array of samples

This is particularly useful if you are decoding an audio (or any signal) stream. If you have an array of samples of the signal ( from -1 to 1 with a mean of 0) and where Fs is the sampling frequency of the signal, the decoder can be used this way:

For 1 channel signal (mono)

int Fs = 8000;
double[] samples = {/* array of samples */}
DTMFUtil dtmf = new DTMFUtil(samples, Fs);
dtmf.decode();
String sequence = dtmf.getDecoded()[0];

For 2 channel signal (stereo)

int Fs = 8000;
double[][] samples = {{/* array of samples from first channel */},{/* array of samples from second channel */}}
DTMFUtil dtmf = new DTMFUtil(samples, Fs);
dtmf.decode();
String[] sequence = dtmf.getDecoded();
String first_channel = sequence[0];
String second_channel = sequence[1];

Support or Contact

A PDF version of the full report on this project can be viewed here. This report covers everything from the research made in the project, the pseudo code and algorithms used along with the motivations for using them, testing and much more. You can contact me for more information on my email ([email protected]). To find out more about me please visit my website.

Licence

The project is licensed under the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].