SIT tones using Python or C#

Question:

Hello, I'm making an app that detects SIT tones ( https://en.wikipedia.org/wiki/Special_information_tones ). I understand very little of the mathematics involved in Fourier transforms and signal processing. What I'm trying to understand is how I can identify if these patterns occurred in a voip call. To test it, I'm using a recorded file. I've tried to understand some algorithms for identifying frequencies, but I need to get them as described in the wikipedia link. In other words: check if there were three rings with those specific frequencies in that specific duration, with that specific interval. All I've managed so far is to identify that the frequency occurs in the audio, but I haven't been able to figure out how to see if it occurred during the correct amount of time. (each code has a permuted sequence of the same frequencies) Does anyone have any idea how I could solve this?

Answer:

Frequency algorithms will show you what the fundamental frequency of the analyzed block is, you will need to know which frequencies make up the audio as a whole, I strongly recommend that you understand the math behind Fourier , you have two ways to identify the frequencies:

  • Apply FFT , use fixed size blocks, this size will tell you the duration of each analysis block, if a signal is sampled at 8000 Hz then a 4096 size analysis block will give you 4096/8000 = 512 ms of analysis, it may be computationally inefficient to do this for what you need, but this will give you an X-ray of all the frequencies contained in the signal inside this block, the frequencies you are looking for are sinusoids and in this case you should look inside the FFT return if the sinusoids of your interest have an amplitude greater than n dB and if all the other sinusoids are null or below a certain amplitude of your interest.
  • OK I showed you how to do this kind of brute force, the really efficient way to find your frequencies is to use the Goertzel algorithm, with it you will be looking exclusively at the frequencies of interest and not within the whole spectrum.

Python can really make things easy, using SciPy/NumPy will help you a lot in analysis.

Scroll to Top