3
Hello, I’m making an app that detects SIT tones (https://en.wikipedia.org/wiki/Special_information_tones). I understand very little the mathematics involved in Fourier transforms and signal processing. What I’m trying to do is figure out how to identify if these patterns occurred in a voip call. To test, I’m using a recorded file. I’ve tried to understand some algorithms for frequency identification, but I need to take it as described in the wikipedia link. That is, to check if there were three taps with those specific frequencies at that specific duration, with that specific interval. All I’ve been able to do so far is identify that the frequency occurs in the audio, but I couldn’t figure out how to see if it occurred during the correct time period. (Each code has a permuted sequence of the same frequencies) Does anyone have any idea how I could solve this?
Hello, @ederwander. I have already made an attempt using goertzel, but it informs the frequency and all its occurrences (I do not know how the distribution of occurrences works), not the duration of this frequency or the intervals. From what little I understand of Fourier, he picks up a wave and decomposes it into senoids of different sizes and/or occurrence points. As I need to identify if there was a touch of three distinct frequencies with specific duration and interval, I believe I need to take the two points where the senoid touches the x-axis (time?) for a specific frequency. Ideas?
– Diogo Paschoal
I used this python script to check if the frequency occurs or not: https://gist.github.com/sebpiq/4128537. It returns all frequency occurrences to me.
– Diogo Paschoal
I did a test with this same algorithm using two different files. One that has the tones and one that does not. For both cases, he returned coefficients greater than zero. Even, I was thinking that these tones (SIT) are not like the DTMF that are the sum of two frequencies. SIT is a sequence of three specific tones.
– Diogo Paschoal
hi @Diogopaschoal yes Goertzel is very used to find Dtmfs, for your case it will work very well, one of the ways to trace more or less the duration of a certain frequency is to separate the signal in blocks of fixed sizes for example
2048/8000 = 256ms
, ie send 2048(256ms) samples to goertzel by the end of all your signal, you will have to go walking with a for, repaired who 256ms is below the time neededShort duration = 276 ms
that is to say q in the next sample you will still have to search if you still have the previous frequency and a new .– ederwander
I gave example of sending
2048
samples, but if their signal is sampled at 8000hz the size1024
will work very well for what you need. let’s go to the calculations.8000/1024 = 128ms
this means that the same frequency inShort duration
have to appear twice when sending two samples in a row128+128 = 256ms
, and a frequency inLong duration
has to appear 3 times in a row128*3 = 384ms
, do not forget to consider the silences in your calculations there...– ederwander
Thank you, @ederwander. I’m already studying a material I found in http://professor.ufabc.edu.br/marcio.eisencraft/pds/pds.htm to understand, but your explanation of how to obtain the samples has already helped a lot. I’ll try to apply with what I’ve already found.
– Diogo Paschoal