Dynamic Point Size - 2023.2 English

Vitis Libraries

Release Date
2023.2 English

The FFT Window supports dynamic (run-time controlled) point sizes. This feature is available when the template parameter TP_DYN_PT_SIZE is set to 1.

When set to 0 (static point size) all data will be expected in frames of TP_POINT_SIZE data samples, though multiple frames may be input together using TP_WINDOW_VSIZE which is an integer multiple of TP_POINT_SIZE.

When set to 1 (dynamic point size) each _window_ must be preceded by a 256bit header to describe the run-time parameters of that window. Note that TP_WINDOW_VSIZE describes the number of samples in a window so does not include this header.

The format of the header is described in the below table. When TP_DYN_PT_SIZE = 1, TP_POINT_SIZE describes the maximum point size which may be input.

Table 48 Header Format
Field name Location (TT_DATA sample) Description
Direction 0 (real part) 0 (inverse FFT) 1 (forward FFT)
Point size (radix2 stages) 1 (real part) Point size described as a power of 2. E.g. 5 described a point size of 32.
Reserved 2 OR 6 for TT_DATA=cint16 reserved
Status (output only) 3 (real part) OR 7 for TT_DATA=cint16 0 = legal point size, 1 = illegal point size

The locations are set to suit TT_DATA type. That is, for TT_DATA=cint16, direction is described in the first cint16 (real part) of the 256 bit header and point size is described in the real part of the second cint16 value. Similarly, for TT_DATA=cint32, the real part of the first cint32 value in the header holds the direction field and the real part of second cint32 value holds the Point size (radix2) field.

Note that for TT_DATA=cfloat, the values in the header are expected as cfloat and are value-cast (not reinterpret-cast) to integers internally. The output window also has a header. This is copied from the input header except for the status field, which is inserted. The status field is ignored on input. If an illegal point size is entered, the output header will have this field set to a non-zero value and the remainder of the output window is undefined.

For dynamic operation (TP_DYN_PT_SIZE = 1), the window will operate on frames of TP_POINT_SIZE or TP_POINT_SIZE/2^N down to 16. Since the window values cannot be faithfully determined by sampling or interpolating from the provided parent array, it is necessary when in this mode to provide an array holding the window values for each point size. Since this is full array is TP_POINT_SIZE*(1+ 1/2 + 1/4 + ...) the overall table size provided must be TP_POINT_SIZE * 2. For example, for TP_POINT_SIZE = 64, the values of the window coefficients for point size 64 will occupy array indices 0 to 63. The coefficients for point size 32 will occupy indices 64 thru 95, and those for point size 16 will occupy 96 thru 111.