📄 fft8g.c
字号:
l >>= 1; for (j = 0; j < m; j++) { ip[m + j] = ip[j] + l; } m <<= 1; } m2 = 2 * m; if ((m << 3) == l) { for (k = 0; k < m; k++) { for (j = 0; j < k; j++) { j1 = 2 * j + ip[k]; k1 = 2 * k + ip[j]; xr = a[j1]; xi = -a[j1 + 1]; yr = a[k1]; yi = -a[k1 + 1]; a[j1] = yr; a[j1 + 1] = yi; a[k1] = xr; a[k1 + 1] = xi; j1 += m2; k1 += 2 * m2; xr = a[j1]; xi = -a[j1 + 1]; yr = a[k1]; yi = -a[k1 + 1]; a[j1] = yr; a[j1 + 1] = yi; a[k1] = xr; a[k1 + 1] = xi; j1 += m2; k1 -= m2; xr = a[j1]; xi = -a[j1 + 1]; yr = a[k1]; yi = -a[k1 + 1]; a[j1] = yr; a[j1 + 1] = yi; a[k1] = xr; a[k1 + 1] = xi; j1 += m2; k1 += 2 * m2; xr = a[j1]; xi = -a[j1 + 1]; yr = a[k1]; yi = -a[k1 + 1]; a[j1] = yr; a[j1 + 1] = yi; a[k1] = xr; a[k1 + 1] = xi; } k1 = 2 * k + ip[k]; a[k1 + 1] = -a[k1 + 1]; j1 = k1 + m2; k1 = j1 + m2; xr = a[j1]; xi = -a[j1 + 1]; yr = a[k1]; yi = -a[k1 + 1]; a[j1] = yr; a[j1 + 1] = yi; a[k1] = xr; a[k1 + 1] = xi; k1 += m2; a[k1 + 1] = -a[k1 + 1]; } } else { a[1] = -a[1]; a[m2 + 1] = -a[m2 + 1]; for (k = 1; k < m; k++) { for (j = 0; j < k; j++) { j1 = 2 * j + ip[k]; k1 = 2 * k + ip[j]; xr = a[j1]; xi = -a[j1 + 1]; yr = a[k1]; yi = -a[k1 + 1]; a[j1] = yr; a[j1 + 1] = yi; a[k1] = xr; a[k1 + 1] = xi; j1 += m2; k1 += m2; xr = a[j1]; xi = -a[j1 + 1]; yr = a[k1]; yi = -a[k1 + 1]; a[j1] = yr; a[j1 + 1] = yi; a[k1] = xr; a[k1 + 1] = xi; } k1 = 2 * k + ip[k]; a[k1 + 1] = -a[k1 + 1]; a[k1 + m2 + 1] = -a[k1 + m2 + 1]; } }}void cftfsub(int n, double *a, double *w){ void cft1st(int n, double *a, double *w); void cftmdl(int n, int l, double *a, double *w); int j, j1, j2, j3, l; double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; l = 2; if (n >= 16) { cft1st(n, a, w); l = 16; while ((l << 3) <= n) { cftmdl(n, l, a, w); l <<= 3; } } if ((l << 1) < n) { for (j = 0; j < l; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x0r - x2r; a[j2 + 1] = x0i - x2i; a[j1] = x1r - x3i; a[j1 + 1] = x1i + x3r; a[j3] = x1r + x3i; a[j3 + 1] = x1i - x3r; } } else if ((l << 1) == n) { for (j = 0; j < l; j += 2) { j1 = j + l; x0r = a[j] - a[j1]; x0i = a[j + 1] - a[j1 + 1]; a[j] += a[j1]; a[j + 1] += a[j1 + 1]; a[j1] = x0r; a[j1 + 1] = x0i; } }}void cftbsub(int n, double *a, double *w){ void cft1st(int n, double *a, double *w); void cftmdl(int n, int l, double *a, double *w); int j, j1, j2, j3, j4, j5, j6, j7, l; double wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i; l = 2; if (n > 16) { cft1st(n, a, w); l = 16; while ((l << 3) < n) { cftmdl(n, l, a, w); l <<= 3; } } if ((l << 2) < n) { wn4r = w[2]; for (j = 0; j < l; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; j4 = j3 + l; j5 = j4 + l; j6 = j5 + l; j7 = j6 + l; x0r = a[j] + a[j1]; x0i = -a[j + 1] - a[j1 + 1]; x1r = a[j] - a[j1]; x1i = -a[j + 1] + a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; y0r = x0r + x2r; y0i = x0i - x2i; y2r = x0r - x2r; y2i = x0i + x2i; y1r = x1r - x3i; y1i = x1i - x3r; y3r = x1r + x3i; y3i = x1i + x3r; x0r = a[j4] + a[j5]; x0i = a[j4 + 1] + a[j5 + 1]; x1r = a[j4] - a[j5]; x1i = a[j4 + 1] - a[j5 + 1]; x2r = a[j6] + a[j7]; x2i = a[j6 + 1] + a[j7 + 1]; x3r = a[j6] - a[j7]; x3i = a[j6 + 1] - a[j7 + 1]; y4r = x0r + x2r; y4i = x0i + x2i; y6r = x0r - x2r; y6i = x0i - x2i; x0r = x1r - x3i; x0i = x1i + x3r; x2r = x1r + x3i; x2i = x1i - x3r; y5r = wn4r * (x0r - x0i); y5i = wn4r * (x0r + x0i); y7r = wn4r * (x2r - x2i); y7i = wn4r * (x2r + x2i); a[j1] = y1r + y5r; a[j1 + 1] = y1i - y5i; a[j5] = y1r - y5r; a[j5 + 1] = y1i + y5i; a[j3] = y3r - y7i; a[j3 + 1] = y3i - y7r; a[j7] = y3r + y7i; a[j7 + 1] = y3i + y7r; a[j] = y0r + y4r; a[j + 1] = y0i - y4i; a[j4] = y0r - y4r; a[j4 + 1] = y0i + y4i; a[j2] = y2r - y6i; a[j2 + 1] = y2i - y6r; a[j6] = y2r + y6i; a[j6 + 1] = y2i + y6r; } } else if ((l << 2) == n) { for (j = 0; j < l; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = -a[j + 1] - a[j1 + 1]; x1r = a[j] - a[j1]; x1i = -a[j + 1] + a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i - x2i; a[j2] = x0r - x2r; a[j2 + 1] = x0i + x2i; a[j1] = x1r - x3i; a[j1 + 1] = x1i - x3r; a[j3] = x1r + x3i; a[j3 + 1] = x1i + x3r; } } else { for (j = 0; j < l; j += 2) { j1 = j + l; x0r = a[j] - a[j1]; x0i = -a[j + 1] + a[j1 + 1]; a[j] += a[j1]; a[j + 1] = -a[j + 1] - a[j1 + 1]; a[j1] = x0r; a[j1 + 1] = x0i; } }}void cft1st(int n, double *a, double *w){ int j, k1; double wn4r, wtmp, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i, wk4r, wk4i, wk5r, wk5i, wk6r, wk6i, wk7r, wk7i; double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i; wn4r = w[2]; x0r = a[0] + a[2]; x0i = a[1] + a[3]; x1r = a[0] - a[2]; x1i = a[1] - a[3]; x2r = a[4] + a[6]; x2i = a[5] + a[7]; x3r = a[4] - a[6]; x3i = a[5] - a[7]; y0r = x0r + x2r; y0i = x0i + x2i; y2r = x0r - x2r; y2i = x0i - x2i; y1r = x1r - x3i; y1i = x1i + x3r; y3r = x1r + x3i; y3i = x1i - x3r; x0r = a[8] + a[10]; x0i = a[9] + a[11]; x1r = a[8] - a[10]; x1i = a[9] - a[11]; x2r = a[12] + a[14]; x2i = a[13] + a[15]; x3r = a[12] - a[14]; x3i = a[13] - a[15]; y4r = x0r + x2r; y4i = x0i + x2i; y6r = x0r - x2r; y6i = x0i - x2i; x0r = x1r - x3i; x0i = x1i + x3r; x2r = x1r + x3i; x2i = x1i - x3r; y5r = wn4r * (x0r - x0i); y5i = wn4r * (x0r + x0i); y7r = wn4r * (x2r - x2i); y7i = wn4r * (x2r + x2i); a[2] = y1r + y5r; a[3] = y1i + y5i; a[10] = y1r - y5r; a[11] = y1i - y5i; a[6] = y3r - y7i; a[7] = y3i + y7r; a[14] = y3r + y7i; a[15] = y3i - y7r; a[0] = y0r + y4r; a[1] = y0i + y4i; a[8] = y0r - y4r; a[9] = y0i - y4i; a[4] = y2r - y6i; a[5] = y2i + y6r; a[12] = y2r + y6i; a[13] = y2i - y6r; if (n > 16) { wk1r = w[4]; wk1i = w[5]; x0r = a[16] + a[18]; x0i = a[17] + a[19]; x1r = a[16] - a[18]; x1i = a[17] - a[19]; x2r = a[20] + a[22]; x2i = a[21] + a[23]; x3r = a[20] - a[22]; x3i = a[21] - a[23]; y0r = x0r + x2r; y0i = x0i + x2i; y2r = x0r - x2r; y2i = x0i - x2i; y1r = x1r - x3i; y1i = x1i + x3r; y3r = x1r + x3i; y3i = x1i - x3r; x0r = a[24] + a[26]; x0i = a[25] + a[27]; x1r = a[24] - a[26]; x1i = a[25] - a[27]; x2r = a[28] + a[30]; x2i = a[29] + a[31]; x3r = a[28] - a[30]; x3i = a[29] - a[31]; y4r = x0r + x2r; y4i = x0i + x2i; y6r = x0r - x2r; y6i = x0i - x2i; x0r = x1r - x3i; x0i = x1i + x3r; x2r = x1r + x3i; x2i = x3r - x1i; y5r = wk1i * x0r - wk1r * x0i; y5i = wk1i * x0i + wk1r * x0r; y7r = wk1r * x2r + wk1i * x2i; y7i = wk1r * x2i - wk1i * x2r; x0r = wk1r * y1r - wk1i * y1i; x0i = wk1r * y1i + wk1i * y1r; a[18] = x0r + y5r; a[19] = x0i + y5i; a[26] = y5i - x0i; a[27] = x0r - y5r; x0r = wk1i * y3r - wk1r * y3i; x0i = wk1i * y3i + wk1r * y3r; a[22] = x0r - y7r; a[23] = x0i + y7i; a[30] = y7i - x0i; a[31] = x0r + y7r; a[16] = y0r + y4r; a[17] = y0i + y4i; a[24] = y4i - y0i; a[25] = y0r - y4r; x0r = y2r - y6i; x0i = y2i + y6r; a[20] = wn4r * (x0r - x0i); a[21] = wn4r * (x0i + x0r); x0r = y6r - y2i; x0i = y2r + y6i; a[28] = wn4r * (x0r - x0i); a[29] = wn4r * (x0i + x0r); k1 = 4; for (j = 32; j < n; j += 16) { k1 += 4; wk1r = w[k1]; wk1i = w[k1 + 1]; wk2r = w[k1 + 2]; wk2i = w[k1 + 3]; wtmp = 2 * wk2i; wk3r = wk1r - wtmp * wk1i; wk3i = wtmp * wk1r - wk1i; wk4r = 1 - wtmp * wk2i; wk4i = wtmp * wk2r; wtmp = 2 * wk4i; wk5r = wk3r - wtmp * wk1i; wk5i = wtmp * wk1r - wk3i; wk6r = wk2r - wtmp * wk2i; wk6i = wtmp * wk2r - wk2i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -