Reply by Mikolaj July 16, 20082008-07-16
On 13-07-2008 at 22:05:36 Burgos <4burgos@gmail.com> wrote:

> First of all: Hello, everybody! > > I have a problem that I can't figure myself, so I'm kindly asking you for > help. My application consists of two parts: the first one, which is > generating clean sin tone for a given frequency, and the second one, > which > is used to detect signal freq. > > I have used FFT to find frequency of input sound, but it seems to > expensive for me, because all I need is to test single freq., rather than > whole bandwidth. Is there any cheaper way (in resources thinking) than > that > I've mentioned? > > Thank you. >
If you want just to detect appearance of the tone at specific frequency maybe simple filtering would be enough. How about filter matched tu sine wave or notch filter or any bandpass filter? And than some slicer/amplitude detector/integrator-discriminator somthing. -- Mikolaj
Reply by Burgos July 14, 20082008-07-14
Hm... 

Now I've looked around and I think that I need to implement noise gate,
too, because what I do is capturing data from LineIn, rather than reading
pcm data from file.
Reply by Burgos July 14, 20082008-07-14
I don't know C#, and I am pretty new in DSP, sorry, don't be ironic :(. 

However, thank you for your great suggestion, I think that will do the
trick :). 

Thank you!
Greetings for Serbia
Reply by Vladimir Vassilevsky July 13, 20082008-07-13

Burgos wrote:

> @Vladimir V. > > I think it is not possible for me to develop frequency counter in C++ :(.
How wonderful. So, you can't just count the number of samples between the two zero crossings of the signal. Is this because of C++, or C# pehaps? Vladimir Vassilevsky DSP and Mixed Signal Design Consultant http://www.abvolt.com
Reply by Burgos July 13, 20082008-07-13
"You say that I can detect tone frequency with that algorithm? "

What I meant to say is "sound frequency." Sorry :(.


Reply by Burgos July 13, 20082008-07-13
@namespace

I have made tone generator, using DSound buffers and simply cos(2*pi*f*t)
and I know what frequency is. 

I've looked around and I've found Goertzel's algorithm, but I didn't use
it because of DTMF structure (as I remember, it was the sum of two sin
signals). You say that I can detect tone frequency with that algorithm? 

@Vladimir V.

I think it is not possible for me to develop frequency counter in C++ :(.

Thank you, both.
Reply by Vladimir Vassilevsky July 13, 20082008-07-13

Burgos wrote:
> First of all: Hello, everybody! > > I have a problem that I can't figure myself, so I'm kindly asking you for > help. My application consists of two parts: the first one, which is > generating clean sin tone for a given frequency, and the second one, which > is used to detect signal freq. > > I have used FFT to find frequency of input sound, but it seems to > expensive for me, because all I need is to test single freq., rather than > whole bandwidth. Is there any cheaper way (in resources thinking) than that > I've mentioned?
How about a frequency counter? Vladimir Vassilevsky DSP and Mixed Signal Design Consultant http://www.abvolt.com
Reply by namespace July 13, 20082008-07-13
>generating clean sin tone for a given frequency
Simply evaluate x = sin(2 * pi * f * t), where f is your frequency in Hz and t is the time in seconds at which you wish to calculate x. The sine wave amplitudes will be in x. To generate an actual tone that you can use, you will have to find some way to convert the amplitudes to a usable signal. This depends on the hardware that you have. If you have a DAC, then you might write a program to output the amplitudes as an analog signal. Using Matlab, you can generate a sine tone with the following program: fs = 96000; period = 1/fs; timemax = 1; t = 0:period:(1-period); freq = 1000; x = sin(2*pi*freq*t); You could also write the program in a language such as C. To determine a signal frequency, the Fast Fourier Transform (FFT) is the most widely-used method to determine spectral content (which is good if you have a signal with a power-of-two signal length). However, if you know the signal frequency which you want to match, you can detect the frequency by algorithms particular to DTMF signalling. Of particular interest is the Goertzel algorithm; you can find some information here: http://en.wikipedia.org/wiki/Goertzel_algorithm
Reply by Burgos July 13, 20082008-07-13
First of all: Hello, everybody!

I have a problem that I can't figure myself, so I'm kindly asking you for
help. My application consists of two parts: the first one, which is
generating clean sin tone for a given frequency, and the second one, which
is used to detect signal freq. 

I have used FFT to find frequency of input sound, but it seems to
expensive for me, because all I need is to test single freq., rather than
whole bandwidth. Is there any cheaper way (in resources thinking) than that
I've mentioned?

Thank you.