Fourier Transform: why do all segments generate the same magnitude response?!

183 Views Asked by At

I'm working on a DTMF program, and what I've done is to break the one long input signal I initially receive into a bunch of smaller components. I perform an FFT on each of the small components and then check the magnitude response of the specific bin component that I'm interested in. My question is, WHY ON EARTH is every segment no matter how small, of a component which contains a piece of, say, the signal for the number 1, (697 * 1209 Hz), look the same as all the other small components?!

Have I phrased that lucidly enough for general comprehension? If not, let me know & I'll try to be more explicit.

2

There are 2 best solutions below

0
On BEST ANSWER
    for (int xx=0; xx < totalLength; xx+=400)
    {
        if(xx < totalLength - 400)
        {
            float[] c = Arrays.copyOfRange(dtmfSignal, xx, xx+205);

            CVector fft = FFT1D.fft(new Vector(c), 205);


            Vector mag = fft.getMagnitude();

So as you can see it's divided up into smaller components and then the relevent frequency bin is examined in order to determine a response above a certain threshold.

Would you, could you, please help me to understand exactly why it makes no different which one of the 205 sample segment, so long as it is sliced from the same cloth as a different part of the signal that is also composed of the similar two inputs, it will yield the same magnitude response, no matter which part of the wave it's come from.

0
On

I tried this code with a random signal of 1600 length and could get different magnitude for a particular frequency 'f'. Not sure why you get same magnitude response for all segment? Can you try removing mean from the signal before taking it's FFT use Vector d = new VectorStatistics().deMean(c);

Apart for this; check your code. Try plotting the magnitude response to check if they are indeed same or different. Do mag.plot("Frequency Response","mag");