| const q15_t sqrt_initial_lut_q15 [16] RISCV_DSP_TABLE_ATTRIBUTE |
Table for bit reversal process.
Q31 table for reciprocal.
q15 Twiddle factors Table
Q31 Twiddle factors Table.
Double Precision Floating-point Twiddle factors Table Generation.
- Pseudo code for Generation of Bit reversal Table is
for (l = 1; l <= N/4; l++)
{
for (i = 0; i< logN2; i++)
{
a[i] = l & (1 << i);
}
for (j = 0; j < logN2; j++)
{
if (a[j] != 0)
y[l] += (1 << ((logN2 - 1) - j));
}
y[l] = y[l] >> 1;
}
- where N = 4096, logN2 = 12
- N is the maximum FFT Size supported
- Example code for Double Precision Floating-point Twiddle factors Generation:
for (i = 0; i < N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(double)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(double)N);
}
- where N = 16, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Double Precision Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/N);
twiddleCoef[2*i+1] = sin(i * 2*PI/N);
}
- where N = 32, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Double Precision Floating-point Twiddle factors Generation:
for(i = 0; i < N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 64, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Double Precision Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 128, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Double Precision Floating-point Twiddle factors Generation:
for(i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 256, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Double Precision Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 512, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Double Precision Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 1024, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Double Precision Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 2048, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Double Precision Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 4096, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for (i = 0; i < N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 16, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 32, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for(i = 0; i < N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 64, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 128, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for(i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 256, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 512, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 1024, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 2048, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Floating-point Twiddle factors Generation:
for (i = 0; i< N/; i++)
{
twiddleCoef[2*i] = cos(i * 2*PI/(float)N);
twiddleCoef[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 4096, PI = 3.14159265358979
- Cos and Sin values are in interleaved fashion
- Example code for Q31 Twiddle factors Generation::
for(i = 0; i< 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 16, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for Q31 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 32, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for Q31 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 64, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for Q31 Twiddle factors Generation::
for (i = 0; i < 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 128, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for Q31 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 256, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for Q31 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 512, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for Q31 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 1024, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for Q31 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 2048, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for Q31 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefQ31[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefQ31[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 4096, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to Q31(Fixed point 1.31): round(twiddleCoefQ31(i) * pow(2, 31))
- Example code for q15 Twiddle factors Generation::
fori = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 16, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
- Example code for q15 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 32, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
- Example code for q15 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 64, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
- Example code for q15 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 128, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
- Example code for q15 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 256, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
- Example code for q15 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 512, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
- Example code for q15 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 1024, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
- Example code for q15 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 2048, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
- Example code for q15 Twiddle factors Generation::
for (i = 0; i< 3N/4; i++)
{
twiddleCoefq15[2*i] = cos(i * 2*PI/(float)N);
twiddleCoefq15[2*i+1] = sin(i * 2*PI/(float)N);
}
- where N = 4096, PI = 3.14159265358979
- Cos and Sin values are interleaved fashion
- Convert Floating point to q15(Fixed point 1.15): round(twiddleCoefq15(i) * pow(2, 15))
end of CFFT_CIFFT group
- Example code for Double Precision Floating-point RFFT Twiddle factors Generation:
TW = exp(pi/2*i-2*pi*i*[0:L/2-1]/L).'
- Real and Imag values are in interleaved fashion
- Example code for Floating-point RFFT Twiddle factors Generation:
TW = exp(pi/2*i-2*pi*i*[0:L/2-1]/L).'
- Real and Imag values are in interleaved fashion
- Generation of realCoefA array:
- n = 4096
for (i = 0; i < n; i++)
{
pATable[2 * i] = 0.5 * ( 1.0 - sin (2 * PI / (double) (2 * n) * (double) i));
pATable[2 * i + 1] = 0.5 * (-1.0 * cos (2 * PI / (double) (2 * n) * (double) i));
}
- Generation of realCoefB array:
- n = 4096
for (i = 0; i < n; i++)
{
pBTable[2 * i] = 0.5 * (1.0 + sin (2 * PI / (double) (2 * n) * (double) i));
pBTable[2 * i + 1] = 0.5 * (1.0 * cos (2 * PI / (double) (2 * n) * (double) i));
}
- Generation fixed-point realCoefAQ31 array in Q31 format:
- n = 4096
for (i = 0; i < n; i++)
{
pATable[2 * i] = 0.5 * ( 1.0 - sin (2 * PI / (double) (2 * n) * (double) i));
pATable[2 * i + 1] = 0.5 * (-1.0 * cos (2 * PI / (double) (2 * n) * (double) i));
}
- Convert to fixed point Q31 format round(pATable[i] * pow(2, 31))
- Generation of realCoefBQ31 array:
- n = 4096
for (i = 0; i < n; i++)
{
pBTable[2 * i] = 0.5 * (1.0 + sin (2 * PI / (double) (2 * n) * (double) i));
pBTable[2 * i + 1] = 0.5 * (1.0 * cos (2 * PI / (double) (2 * n) * (double) i));
}
- Convert to fixed point Q31 format round(pBTable[i] * pow(2, 31))
- Example code for the generation of the floating-point sine table:
tableSize = 512;
for (n = 0; n < (tableSize + 1); n++)
{
sinTable[n] = sin(2*PI*n/tableSize);
}
- where PI value is 3.14159265358979
- Table values are in Q31 (1.31 fixed-point format) and generation is done in three steps. First, generate sin values in floating point:
tableSize = 512;
for (n = 0; n < (tableSize + 1); n++)
{
sinTable[n] = sin(2*PI*n/tableSize);
}
where PI value is 3.14159265358979
- Second, convert floating-point to Q31 (Fixed point): (sinTable[i] * pow(2, 31))
- Finally, round to the nearest integer value: sinTable[i] += (sinTable[i] > 0 ? 0.5 : -0.5);
- Table values are in Q15 (1.15 fixed-point format) and generation is done in three steps. First, generate sin values in floating point:
tableSize = 512;
for (n = 0; n < (tableSize + 1); n++)
{
sinTable[n] = sin(2*PI*n/tableSize);
}
where PI value is 3.14159265358979
- Second, convert floating-point to Q15 (Fixed point): (sinTable[i] * pow(2, 15))
- Finally, round to the nearest integer value: sinTable[i] += (sinTable[i] > 0 ? 0.5 :-0.5);