📄 digitrev_index.c
字号:
/***************************************************************************
Use This Routine To Generate the Index Table for
Bit/Digit Reversing of Radix-2 and Radix-4 Routines
This routine calculates the index for digitrev of
length n (length of index is 2^(radix*ceil(k/radix)) where n = 2^k
in otherwords
Either: sqrt(n) when n=2^even# Or: sqrt(2)*sqrt(n) when n=2^odd# [radix 2]
sqrt(n) when n=4^even# Or: sqrt(4)*sqrt(n) when n=4^odd# [radix 4]
Note: the variable "radix" is 2 for radix-2 and 4 for radix-4
****************************************************************************/
#pragma CODE_SECTION(digitrev_index,"SBSRAM_PROG_MEM");
void digitrev_index(short *index, int n, int radix)
{
int i,j,k;
short nbits, nbot, ntop, ndiff, n2, raddiv2;
nbits = 0;
i = n;
while (i > 1)
{
i = i >> 1;
nbits++;
}
raddiv2 = radix >> 1;
nbot = nbits >> raddiv2;
nbot = nbot << raddiv2 - 1;
ndiff = nbits & raddiv2;
ntop = nbot + ndiff;
n2 = 1 << ntop;
index[0] = 0;
for ( i = 1, j = n2/radix + 1; i < n2 - 1; i++)
{
index[i] = j - 1;
for (k = n2/radix; k*(radix-1) < j; k /= radix)
j -= k*(radix-1);
j += k;
}
index[n2 - 1] = n2 - 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -