This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

FFT and IFFT using CMSIS DSP library, q15 fractional format

Hello,

I am currently trying to use the CMSIS DSP library to implement DSP functionality, by doing FFT or IFFT.

I don't have an embedded Floating point Unit, thus I would like to use the fixed q15 fractional format.
By reading the CMSIS documentation html page, it is specified that the FFT/IFFT output format is different from the input one...
For example, for a FFT length of 256, the input format is q15 (1.15) and the output format is 9.7. With 8 bits to upscale.
If I want to perform an FFT and directly fllowed by an IFFT, I have to convert output FFT data  which are in 9.7 into a q15 for IFFT Input format...

My question is, from my understanding, the conversion from q15 to 9.7 or the reverse, would be just done by a simple shift of 8 bits...?
But, I guess that data may be lost between each conversion...?
It is very confused to me...

Could someone help me ...?

Thanks!

PjEmY
Parents
  • Note: This was originally posted on 3rd July 2012 at http://forums.arm.com

    Hi,

    I'm currently using CMSIS DSP Lib for my STM32F105R8T6 (Cortex - M3). I tried to run Q15 CIFFT Radix-2 function but the result is quite weird ( max value = 11 ??? while my input signal's amplitude = 1 ( 32767 in Q15 format )). This is my code :




    status = arm_cfft_radix2_init_q15(&CFFT_R2_Q15, CfftLen, CifftFlagOFF, bitRevf) ;  // instance for calculating fft(x)
    arm_cfft_radix2_q15(&CFFT_R2_Q15, x) ;           // calculate fft
    
    
    status = arm_cfft_radix2_init_q15(&CIFFT_R2_Q15, CifftLen, CifftFlagON, bitRevi) ;  // instance for calculating ifft(x)
    arm_cfft_radix2_q15(&CIFFT_R2_Q15, x) ;           //calculate ifft




    x : array of 4096 element (real, image interleaved)
    fftsize = 2048
    Because the Real FFT function cost too much ROM space so I have to use Complex FFT to calculate real signal ( complex signal with image part = 0 ).

    I hope someone could help me with this CIFFT function.

    Thank you !
Reply
  • Note: This was originally posted on 3rd July 2012 at http://forums.arm.com

    Hi,

    I'm currently using CMSIS DSP Lib for my STM32F105R8T6 (Cortex - M3). I tried to run Q15 CIFFT Radix-2 function but the result is quite weird ( max value = 11 ??? while my input signal's amplitude = 1 ( 32767 in Q15 format )). This is my code :




    status = arm_cfft_radix2_init_q15(&CFFT_R2_Q15, CfftLen, CifftFlagOFF, bitRevf) ;  // instance for calculating fft(x)
    arm_cfft_radix2_q15(&CFFT_R2_Q15, x) ;           // calculate fft
    
    
    status = arm_cfft_radix2_init_q15(&CIFFT_R2_Q15, CifftLen, CifftFlagON, bitRevi) ;  // instance for calculating ifft(x)
    arm_cfft_radix2_q15(&CIFFT_R2_Q15, x) ;           //calculate ifft




    x : array of 4096 element (real, image interleaved)
    fftsize = 2048
    Because the Real FFT function cost too much ROM space so I have to use Complex FFT to calculate real signal ( complex signal with image part = 0 ).

    I hope someone could help me with this CIFFT function.

    Thank you !
Children
No data