This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

How to set parameters of static scaling on dsp 6670?

After the input data have been dealt by FFTC, the power of output data have a maximum at a point.

If we use dynamic scaling configuration, it would lead to the difference in the power of every symbol of a frame data.

And it would also lead to fault demodulation at receiver. Now we wanna use static scaling configuration. For 256 sample points FFT,

if we wanna get the same power at the output of FFTC,how should we set the parameter of Stage-i-scaling?

And what's the twiddle factors of every stage?

Looking forward to your instant reply.

  • The overall scaling in the FFTC  is given by the equation

       2^3 * 2^-SUM(si) * 2^-sout * 2^-S_LTE * (output_scaling * 2^-7)  {output scaling entered in Q1.7}

      For static scaling disable 'dynamic scaling and setup the the scaling factors for each stage (stages 0 through 3 for 256 point FFT).

    Unfortunately the twiddle factors are proprietary and cannot be published.

    Sudhanand.

  •    An additional note is that typically the scaling factor is set to be 1/sqrt(butterfly size of stage). For eg for 256 FFT the four stages are 4-butterfly stages, so the scaling factor should be 1/sqrt(4) = 1/2. So the register setting for s0 - s3 should be 1 (Right shift by 1). For 3-butterfly you set it to 1 as well.

        The size of stages for the various supported sizes is listed in the users guide.

  • Dear Sudhanand,

           Hello!

          I have a question when I  do the FFT in 2048 size (6 stage). 

          1)  You said "the scaling factor should be 1/sqrt(4) = 1/2 when in 256 size". Then , in 2048 size (6 stage), 1/sqrt(6) is not the the power of 2, cna I treat it as 1/sqrt(16) or 1/sqrt(9);

        2)  when in 2048 size, i set the parameter as following:

    bDynamicScaleEnable:0
    radixScalingValLast:0
    radixScalingVal[0]:2
    radixScalingVal[1]:2
    radixScalingVal[2]:1
    radixScalingVal[3]:1
    radixScalingVal[4]:1
    radixScalingVal[5]:1
    radixScalingVal[6]:0

    The result does not fit to  what the sample project give in the dynamic scaling (max error reach to more than 50).

    2^3 * 2^-SUM(si) * 2^-sout * 2^-S_LTE * (output_scaling * 2^-7)

    SUM(si) =8   sout=0  if not counting the (-7), the (3-8=-5) is correspongding to the block exponent (5) when in dynamic sclaing.

    Can you give som e advise when the fft size is 2048?

     3) 2^3 * 2^-SUM(si) * 2^-sout * 2^-S_LTE * (output_scaling * 2^-7)  {output scaling entered in Q1.7}

    Can I understand this word as " when output sclaing is not 128, the result of the formula of static scaling is equal to 0"?

    Thanks in advanced!

                                        Alan

  • Dear Sudhanand,

     Can you help me more on the IFFT ?  If I set the same static parameter in the ifft &fft and use the dft results, can fftc sample project gives back the same data I put in the fft?

    Thnaks again!

    Alan

  • Hi,


    I am working on evm 6670. In my project, I am taking ifft of 2048 points at regular intervals. But to keep the same output power at each instance, i am using the static scaling. As per the above explaination i understand that fftc scaling factor at different stages should be like:

    STAGE_1 = Radix 4, scaling factor = 2
    STAGE_2 = Radix 4, scaling factor = 2
    STAGE_3 = Radix 4, scaling factor = 2
    STAGE_4 = Radix 4, scaling factor = 2
    STAGE_5 = Radix 4, scaling factor = 1
    STAGE_6 = Radix 4, scaling factor = 2

    Using these configuarion my system works fine for most input combinations. But i have scenario when clipping is detected. Using dynamic scaling i got the block exponent value equal to 10 which is greater than static scaling configuration. Is this possible to have such a block exponent? Input which i have fed is for first half of input samples IQ samples are 25000+25000i. For second half they are (-25000-25000i).

    Can somebody help in selecting the suitable static scaling parameters?

    Regards
    Naveen

  • chen xie said:

    Dear Sudhanand,

           Hello!

          I have a question when I  do the FFT in 2048 size (6 stage). 

          1)  You said "the scaling factor should be 1/sqrt(4) = 1/2 when in 256 size". Then , in 2048 size (6 stage), 1/sqrt(6) is not the the power of 2, cna I treat it as 1/sqrt(16) or 1/sqrt(9);

        2)  when in 2048 size, i set the parameter as following:

    bDynamicScaleEnable:0
    radixScalingValLast:0
    radixScalingVal[0]:2
    radixScalingVal[1]:2
    radixScalingVal[2]:1
    radixScalingVal[3]:1
    radixScalingVal[4]:1
    radixScalingVal[5]:1
    radixScalingVal[6]:0

    The result does not fit to  what the sample project give in the dynamic scaling (max error reach to more than 50).

    2^3 * 2^-SUM(si) * 2^-sout * 2^-S_LTE * (output_scaling * 2^-7)

    SUM(si) =8   sout=0  if not counting the (-7), the (3-8=-5) is correspongding to the block exponent (5) when in dynamic sclaing.

    Can you give som e advise when the fft size is 2048?

     3) 2^3 * 2^-SUM(si) * 2^-sout * 2^-S_LTE * (output_scaling * 2^-7)  {output scaling entered in Q1.7}

    Can I understand this word as " when output sclaing is not 128, the result of the formula of static scaling is equal to 0"?

    Thanks in advanced!

                                        Alan



    Hi Chen,

    Here static scatic scaling are not chosen depending on the number of radix stages. Instead they are selected as the raidx stage value at partical radix stage.

    For 2048 points FFT. Static scaling parameters should be selected as sqrt(1/Radix points at this stage). For 2048 points we have following 6 radix stages: 4, 4, 4, 4, 2, 4. So you should select scaling values as 2, 2, 2, 2, 1, 2.

    But as per my previous post i am still getting clipping even using these scaling values.

    Regards
    Naveen

  • Naveen,

       When static scaling is used the assumption is that the input data is expected to fall in an acceptable dynamic range. So if there are extreme cases for e.g.input signal is a sine wave which makes the o/p level higher that when multiple carriers exists you will experience clipping.

      I do not think it is possible to have a set of scaling values that can guarantee no clipping for all signals. You either set your scaling values for your extreme case which would result in other signals getting highly attenuated or you set for average conditions which will result in clipping in extreme coditions.