📄 fft8g.c
字号:
wk7r = wk1r - wtmp * wk3i; wk7i = wtmp * wk3r - wk1i; x0r = a[j] + a[j + 2]; x0i = a[j + 1] + a[j + 3]; x1r = a[j] - a[j + 2]; x1i = a[j + 1] - a[j + 3]; x2r = a[j + 4] + a[j + 6]; x2i = a[j + 5] + a[j + 7]; x3r = a[j + 4] - a[j + 6]; x3i = a[j + 5] - a[j + 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[j + 8] + a[j + 10]; x0i = a[j + 9] + a[j + 11]; x1r = a[j + 8] - a[j + 10]; x1i = a[j + 9] - a[j + 11]; x2r = a[j + 12] + a[j + 14]; x2i = a[j + 13] + a[j + 15]; x3r = a[j + 12] - a[j + 14]; x3i = a[j + 13] - a[j + 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); x0r = y1r + y5r; x0i = y1i + y5i; a[j + 2] = wk1r * x0r - wk1i * x0i; a[j + 3] = wk1r * x0i + wk1i * x0r; x0r = y1r - y5r; x0i = y1i - y5i; a[j + 10] = wk5r * x0r - wk5i * x0i; a[j + 11] = wk5r * x0i + wk5i * x0r; x0r = y3r - y7i; x0i = y3i + y7r; a[j + 6] = wk3r * x0r - wk3i * x0i; a[j + 7] = wk3r * x0i + wk3i * x0r; x0r = y3r + y7i; x0i = y3i - y7r; a[j + 14] = wk7r * x0r - wk7i * x0i; a[j + 15] = wk7r * x0i + wk7i * x0r; a[j] = y0r + y4r; a[j + 1] = y0i + y4i; x0r = y0r - y4r; x0i = y0i - y4i; a[j + 8] = wk4r * x0r - wk4i * x0i; a[j + 9] = wk4r * x0i + wk4i * x0r; x0r = y2r - y6i; x0i = y2i + y6r; a[j + 4] = wk2r * x0r - wk2i * x0i; a[j + 5] = wk2r * x0i + wk2i * x0r; x0r = y2r + y6i; x0i = y2i - y6r; a[j + 12] = wk6r * x0r - wk6i * x0i; a[j + 13] = wk6r * x0i + wk6i * x0r; } }}void cftmdl(int n, int l, double *a, double *w){ int j, j1, j2, j3, j4, j5, j6, j7, k, k1, m; 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; m = l << 3; 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; } if (m < n) { wk1r = w[4]; wk1i = w[5]; for (j = m; j < l + m; 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 = 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[j1] = x0r + y5r; a[j1 + 1] = x0i + y5i; a[j5] = y5i - x0i; a[j5 + 1] = x0r - y5r; x0r = wk1i * y3r - wk1r * y3i; x0i = wk1i * y3i + wk1r * y3r; a[j3] = x0r - y7r; a[j3 + 1] = x0i + y7i; a[j7] = y7i - x0i; a[j7 + 1] = x0r + y7r; a[j] = y0r + y4r; a[j + 1] = y0i + y4i; a[j4] = y4i - y0i; a[j4 + 1] = y0r - y4r; x0r = y2r - y6i; x0i = y2i + y6r; a[j2] = wn4r * (x0r - x0i); a[j2 + 1] = wn4r * (x0i + x0r); x0r = y6r - y2i; x0i = y2r + y6i; a[j6] = wn4r * (x0r - x0i); a[j6 + 1] = wn4r * (x0i + x0r); } k1 = 4; for (k = 2 * m; k < n; k += m) { 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; wk7r = wk1r - wtmp * wk3i; wk7i = wtmp * wk3r - wk1i; for (j = k; j < l + k; 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); x0r = y1r + y5r; x0i = y1i + y5i; a[j1] = wk1r * x0r - wk1i * x0i; a[j1 + 1] = wk1r * x0i + wk1i * x0r; x0r = y1r - y5r; x0i = y1i - y5i; a[j5] = wk5r * x0r - wk5i * x0i; a[j5 + 1] = wk5r * x0i + wk5i * x0r; x0r = y3r - y7i; x0i = y3i + y7r; a[j3] = wk3r * x0r - wk3i * x0i; a[j3 + 1] = wk3r * x0i + wk3i * x0r; x0r = y3r + y7i; x0i = y3i - y7r; a[j7] = wk7r * x0r - wk7i * x0i; a[j7 + 1] = wk7r * x0i + wk7i * x0r; a[j] = y0r + y4r; a[j + 1] = y0i + y4i; x0r = y0r - y4r; x0i = y0i - y4i; a[j4] = wk4r * x0r - wk4i * x0i; a[j4 + 1] = wk4r * x0i + wk4i * x0r; x0r = y2r - y6i; x0i = y2i + y6r; a[j2] = wk2r * x0r - wk2i * x0i; a[j2 + 1] = wk2r * x0i + wk2i * x0r; x0r = y2r + y6i; x0i = y2i - y6r; a[j6] = wk6r * x0r - wk6i * x0i; a[j6 + 1] = wk6r * x0i + wk6i * x0r; } } }}void rftfsub(int n, double *a, int nc, double *c){ int j, k, kk, ks, m; double wkr, wki, xr, xi, yr, yi; m = n >> 1; ks = 2 * nc / m; kk = 0; for (j = 2; j < m; j += 2) { k = n - j; kk += ks; wkr = 0.5 - c[nc - kk]; wki = c[kk]; xr = a[j] - a[k]; xi = a[j + 1] + a[k + 1]; yr = wkr * xr - wki * xi; yi = wkr * xi + wki * xr; a[j] -= yr; a[j + 1] -= yi; a[k] += yr; a[k + 1] -= yi; }}void rftbsub(int n, double *a, int nc, double *c){ int j, k, kk, ks, m; double wkr, wki, xr, xi, yr, yi; a[1] = -a[1]; m = n >> 1; ks = 2 * nc / m; kk = 0; for (j = 2; j < m; j += 2) { k = n - j; kk += ks; wkr = 0.5 - c[nc - kk]; wki = c[kk]; xr = a[j] - a[k]; xi = a[j + 1] + a[k + 1]; yr = wkr * xr + wki * xi; yi = wkr * xi - wki * xr; a[j] -= yr; a[j + 1] = yi - a[j + 1]; a[k] += yr; a[k + 1] = yi - a[k + 1]; } a[m + 1] = -a[m + 1];}void dctsub(int n, double *a, int nc, double *c){ int j, k, kk, ks, m; double wkr, wki, xr; m = n >> 1; ks = nc / n; kk = 0; for (j = 1; j < m; j++) { k = n - j; kk += ks; wkr = c[kk] - c[nc - kk]; wki = c[kk] + c[nc - kk]; xr = wki * a[j] - wkr * a[k]; a[j] = wkr * a[j] + wki * a[k]; a[k] = xr; } a[m] *= c[0];}void dstsub(int n, double *a, int nc, double *c){ int j, k, kk, ks, m; double wkr, wki, xr; m = n >> 1; ks = nc / n; kk = 0; for (j = 1; j < m; j++) { k = n - j; kk += ks; wkr = c[kk] - c[nc - kk]; wki = c[kk] + c[nc - kk]; xr = wki * a[k] - wkr * a[j]; a[k] = wkr * a[k] + wki * a[j]; a[j] = xr; } a[m] *= c[0];}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -