# Strange behavior in fixed-point FFT

This is a problem I encountered some time ago while doing my thesis, which still now, I am not sure to understand.

By then, I was implementing the circular correlation in an FPGA using this Xilinx FFT IP core as the acquisition block for a GNSS receiver. Aiming at reducing the required FPGA resources, I studied the impact of some of the IP configurations (scaling and truncation), and of different input signal amplitudes (but with a fixed data width of 8 bits) on the correlation in terms of distortion and SNR reduction.

I computed the FFT of a clean GPS C/A code using the Xilinx IP core, and then I computed its auto-correlation (ACF) with Matlab (i.e. $$ACF=|IFFT_{Matlab}\left(FFT_{Xilinx} \cdot FFT_{Xilinx}^* \right)|$$). Similarly, I computed the FFT of a different GPS C/A code using the Xilinx IP core, and then I computed the cross-correlation (XCF) with the previous code, also using Matlab .

The impact on the auto-correlation (Fig. 8.12) was what I expected, an increase of the "noise floor" caused (I believe) by the accumulated quantization noise generated after each butterfly stage of the FFT. However, for two IP configurations, the cross-correlation also showed a peak (Figs. 8.12c and 8.12d). Although it's true that these cross-correlation peaks are very small (probably well below the thermal noise of a real signal), a non present GPS satellite could be flag as present if the SNR is large enough, or if a lot incoherent averaging is performed.

So my question is, can the truncation/rounding in a fixed-point FFT cause a deterministic signal that is common in signals with similar statistics (as the C/A codes are)? If this is not the cause, what do you think it is?

Thanks in advance.

• yer doing FFTs on 8-bit words????!!!!!!!!!!!!!! h*** f****** s*** ! 16-bit fixed-point words are not wide enough. what are you doing about overflow? are you saturating or wrap-around? – robert bristow-johnson Aug 4 at 17:40
• First tip : there are too may images. Select 4 1 Matlab and 1 from Xilinx where the outputs match 1 Matlab and 1 from Xilinx where the outputs don't match Identify which are which – Ben Aug 4 at 17:40
• @robertbristow-johnson the 8 bit-word 1024-point FFT was intended just for the clean replica generated in the FPGA. The clean C/A has just two symbols. The FFT output by using a signal encoded with +/-127 was virtually the same as the one from MATLAB. For the sampled data, I used a16 bit-word FFT – danipascual Aug 4 at 18:43
• @Ben my goal was not to compare the Xilinx FFTs with those of Matlab, but to use Matlab to compare different configurations of the Xilinx FFT. I could indeed perform the whole circular correlation in the FPGA, but then I would have the impact not only of the FFT, but also of the complex product and of the IFFT. I will adapt the figures thought – danipascual Aug 4 at 18:43
• Using only 8 bits might cause some DC bias. I think this DC bias is what you see in your cross-correlation. – Ben Aug 4 at 18:49