locked
About in the IFFT64X function,but why we excute the 128 points IFFT in this way? RRS feed

  • Question

  • 
    __forceinline
    void IFFT64x(vcs * pcInput, vcs * pcOutput)
    {
        vcs temp[128 / vcs::size];
    
        memset(temp, 0, sizeof(temp));
        memcpy(temp, pcInput, 32 * sizeof(COMPLEX16));
        memcpy(temp + 96 / vcs::size, pcInput + 32 / vcs::size, 32 * sizeof(COMPLEX16));
        IFFTSSEEx<128>(temp);
    
        int i;
        for (i = 0; i < 128; i++)
            ((COMPLEX16*)pcOutput)[i] = ((COMPLEX16*)temp) [FFTLUTMapTable<128>(i)];
    
        for (i = 0; i < 128 / vcs::size; i++)
            pcOutput[i] = shift_left(pcOutput[i], 2);
    }
    

    we know the  sora hardware support 40Mbps samplerate not 20Mbps,so we need to have 160 complex16 in 4us,the problem lies in:

    1.why we apply the method above (insert 64 points zeros )while not add 64 points after the innital 64 points?

    2.why we apply 128 points IFFT in the send process,but 64 points FFT in the receive process?

    Tuesday, July 9, 2013 12:22 PM

Answers

  • 1. say, the sampling rate of transmission is 40MSPS. so, the baseband width is 40MHz. while u only uses the central 20MHz bandwidth, thus u need add 64 pt zeros. where to add? u may lookup the principle of FFT implementation. ideally, u need add 32 zeros to the left, say, [-64, -33] and 32 zeros to the right, say, [32, 63]. as in C/C++, there is no negative index, [-64, -33] are mod to 128 resulting [64, 95], so the negative sub-carriers are located in [96, 127].

    2. in the receive procedure, u have 40MSPS, too. in software implementation, samples are first down-sampled to 20MSPS (of course in software) to reduce the computation complexity. 


    Danial.F

    • Marked as answer by Qi LuoEditor Wednesday, July 10, 2013 5:53 AM
    Tuesday, July 9, 2013 12:38 PM

All replies

  • 1. say, the sampling rate of transmission is 40MSPS. so, the baseband width is 40MHz. while u only uses the central 20MHz bandwidth, thus u need add 64 pt zeros. where to add? u may lookup the principle of FFT implementation. ideally, u need add 32 zeros to the left, say, [-64, -33] and 32 zeros to the right, say, [32, 63]. as in C/C++, there is no negative index, [-64, -33] are mod to 128 resulting [64, 95], so the negative sub-carriers are located in [96, 127].

    2. in the receive procedure, u have 40MSPS, too. in software implementation, samples are first down-sampled to 20MSPS (of course in software) to reduce the computation complexity. 


    Danial.F

    • Marked as answer by Qi LuoEditor Wednesday, July 10, 2013 5:53 AM
    Tuesday, July 9, 2013 12:38 PM
  •  thank you very much for your perfect reply!

             at the same time,i want to make clear that when we add 64 points zeros before we excute  the 128 points IFFT ,

       does it means that we adjust (or increase ,more accurately)samplerate from 20Mbps to 40 Mbps in freqency domain 

       but not time domain?

            although i know that is not right,that is to say ,we are supposed to  finish the 20Mbps to 40 Mbps in timedomain,

      but i can not explain the program above clearly.could you explain this problem? 3q

    Tuesday, July 9, 2013 1:13 PM