Reply by Ray Andraka January 23, 20072007-01-23
Mr. Ken wrote:
> In the implement of dynamic scaling FFT(8k for DVB-T), a scaling factor is > incremented at the end of each stage if the maximum value of the stage is > large > enough to cause overflow in next stage and the data in the memory is scaled > down. > > In the end of the FFT, I will have a final scaling factor SF. > > That is to say, > > y0 = fft(x); // SF = 2; > y1 = fft(x/2); // SF = 1; > > y0 and y1 will be nearly identical, however scaling factor is different. How > would > I deal with this situation before feeding to ADC? > > Thanks > > >
That sounds like it is basically block floating point. The scale factor adjustments from each stage should be accumulated so that you have the scale factor available at the end. The scale factor will be a power of two that indicates how far the result has been right shifted. You will need to figure out what an appropriate overall scale factor for all the data sets pumped through, and shift the data appropriately so that it all has the same scale.
Reply by Mr. Ken January 22, 20072007-01-22
In the implement of dynamic scaling FFT(8k for DVB-T), a scaling factor is
incremented at the end of each stage if the maximum value of the stage is
large
enough to cause overflow in next stage and the data in the memory is scaled
down.

In the end of the FFT, I will have a final scaling factor SF.

That is to say,

y0 = fft(x);      // SF = 2;
y1 = fft(x/2);   // SF = 1;

y0 and y1 will be nearly identical, however scaling factor is different. How
would
I deal with this situation before feeding to ADC?

Thanks