Detecting a three-tone signal in real-time I'm new to digital signal processing, and I've been looking into FFT, filtering, Matlab etc. What I'd like is to build a program which will detect when a certain BEEP is transmitted through a trunked voice channel (it signifies an impending critical message) being received via SDR. Through FFT I have ascertained it consists of three frequencies (500Hz, 600Hz and 700Hz). In essence -- somewhat like a phone call with DTMF -- I'd like to monitor audio for the presence of this beeeeep tone and have the software recognize when this is occurring.

My concern is that voice transmissions will cause these three frequencies to peak, making it difficult to determine whether it is due to the alert beep or somebody speaking. 

I believe this might be accomplished through some means of measuring the length of the beeps, however this may be a misunderstanding through my inexperience in the field.

I'd appreciate any advice, and if my question isn't directly answerable, please push me in the right direction.



Edit: Here is a temporal frequency analysis of the series from WavePad
The approach I'm familiar with has been used for quite some time in broadcast situations. You mentioned your concern with voice signal "peaking" the frequencies of interest. From that statement, I am assuming that you can transmit your signal in-between periods of voice activity.

Here is the method:

On the generation side:


arrange for the signal to play for twice as long as the analysis.


On the analysis side:


Setup non-overlapped FFTs of a length that is 1/2 of the stimulus. This ensures that one of your FFTs will eventually contain an entire signal.
On each FFT, compute the power sum of the tone bins (including adjacent bins as a result of windowing), the power sum of the non-tone bins, and ratio the result to provide a SNR. 
If the ratio is above some threshold, then you have detected your signal. You can determine your threshold using your prior knowledge of the noise floor and transmitted tone levels.  


A couple of things you can do to improve:


Adjust the phases of the generated signal to reduce the crest factor.
Choose the 3 signal frequencies and/or the FFT length so that the frequencies fall in the centers of the FFT bins. If your generator and analyzer are synchronous, this would allow you to avoid windowing for FFT altogether.