Hello!I'm modeling two variants of Altera's fft (FFT IP Core) in Matlab, one - for block floating point and second - for fixed point. As a result I see block floating point heavily depends on level of input signal. Good results are given only for signals with amplitude near or equal to full scale, unlike fixed point fft. Why is it so? is that right that for block floating point fft best result are if data scaled for all dynamic range? or what is my mistake? What is the advantage to use block floating point instead of fixed point? Pictures with modeling results are attached (created with matlab scripts generated by Altera). Any help is greatly appreceated.
fft depends heavily on bit resolution and is best if done using standard floating point. This is due to cascaded computations and internal bit growth/truncation issues.Fixed point is less efficient unless bitwidth is high enough and input uses good dynamic range. Altera's block floating point is an attempt to bridge this gap between fixed point and true floating point by changing the decimal point per block rather than per computation leaving the varying (decimal point) output exponent for the user to apply it. The user can apply exponent for unity as x2^(-exp) or modify exponent for own scaling e.g. x2^(-exp+3) if it helps as unity is not always needed. That could help improve resolution if you are cascading multiple ffts. Both fixed point and altera's block floating point depend heavily on good dynamic range from input stage but actual result depends on bitwidth, frame size, nature of signal and the secret ip design...etc.