⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft4f2d.c

📁 2维fft程序
💻 C
📖 第 1 页 / 共 4 页
字号:
                x3r = a[j2][i] - a[j3][i];                x3i = a[j2][i + 1] - a[j3][i + 1];                a[j][i] = x0r + x2r;                a[j][i + 1] = x0i + x2i;                a[j2][i] = x0r - x2r;                a[j2][i + 1] = x0i - x2i;                a[j1][i] = x1r + x3i;                a[j1][i + 1] = x1i - x3r;                a[j3][i] = x1r - x3i;                a[j3][i + 1] = x1i + x3r;            }        }        if (m < n) {            wk1r = w[2];            for (j = m; j <= l + m - 1; j++) {                j1 = j + l;                j2 = j1 + l;                j3 = j2 + l;                for (i = 0; i <= n2 - 2; i += 2) {                    x0r = a[j][i] + a[j1][i];                    x0i = a[j][i + 1] + a[j1][i + 1];                    x1r = a[j][i] - a[j1][i];                    x1i = a[j][i + 1] - a[j1][i + 1];                    x2r = a[j2][i] + a[j3][i];                    x2i = a[j2][i + 1] + a[j3][i + 1];                    x3r = a[j2][i] - a[j3][i];                    x3i = a[j2][i + 1] - a[j3][i + 1];                    a[j][i] = x0r + x2r;                    a[j][i + 1] = x0i + x2i;                    a[j2][i] = x0i - x2i;                    a[j2][i + 1] = x2r - x0r;                    x0r = x1r + x3i;                    x0i = x1i - x3r;                    a[j1][i] = wk1r * (x0i + x0r);                    a[j1][i + 1] = wk1r * (x0i - x0r);                    x0r = x3i - x1r;                    x0i = x3r + x1i;                    a[j3][i] = wk1r * (x0r + x0i);                    a[j3][i + 1] = wk1r * (x0r - x0i);                }            }            k1 = 1;            ks = -1;            for (k = (m << 1); k <= n - m; k += m) {                k1++;                ks = -ks;                wk1r = w[k1 << 1];                wk1i = w[(k1 << 1) + 1];                wk2r = ks * w[k1];                wk2i = w[k1 + ks];                wk3r = wk1r - 2 * wk2i * wk1i;                wk3i = 2 * wk2i * wk1r - wk1i;                for (j = k; j <= l + k - 1; j++) {                    j1 = j + l;                    j2 = j1 + l;                    j3 = j2 + l;                    for (i = 0; i <= n2 - 2; i += 2) {                        x0r = a[j][i] + a[j1][i];                        x0i = a[j][i + 1] + a[j1][i + 1];                        x1r = a[j][i] - a[j1][i];                        x1i = a[j][i + 1] - a[j1][i + 1];                        x2r = a[j2][i] + a[j3][i];                        x2i = a[j2][i + 1] + a[j3][i + 1];                        x3r = a[j2][i] - a[j3][i];                        x3i = a[j2][i + 1] - a[j3][i + 1];                        a[j][i] = x0r + x2r;                        a[j][i + 1] = x0i + x2i;                        x0r -= x2r;                        x0i -= x2i;                        a[j2][i] = wk2r * x0r + wk2i * x0i;                        a[j2][i + 1] = wk2r * x0i - wk2i * x0r;                        x0r = x1r + x3i;                        x0i = x1i - x3r;                        a[j1][i] = wk1r * x0r + wk1i * x0i;                        a[j1][i + 1] = wk1r * x0i - wk1i * x0r;                        x0r = x1r - x3i;                        x0i = x1i + x3r;                        a[j3][i] = wk3r * x0r + wk3i * x0i;                        a[j3][i + 1] = wk3r * x0i - wk3i * x0r;                    }                }            }        }        l = m;    }    if (l < n) {        for (j = 0; j <= l - 1; j++) {            j1 = j + l;            for (i = 0; i <= n2 - 2; i += 2) {                x0r = a[j][i] - a[j1][i];                x0i = a[j][i + 1] - a[j1][i + 1];                a[j][i] += a[j1][i];                a[j][i + 1] += a[j1][i + 1];                a[j1][i] = x0r;                a[j1][i + 1] = x0i;            }        }    }}void rftbcol(int n1, int n, double **a, int nc, double *c){    int i, j, k, kk, ks;    double wkr, wki, xr, xi, yr, yi;        ks = (nc << 2) / n;    for (i = 0; i <= n1 - 1; i++) {        kk = 0;        for (k = (n >> 1) - 2; k >= 2; k -= 2) {            j = n - k;            kk += ks;            wkr = 0.5 - c[kk];            wki = c[nc - kk];            xr = a[i][k] - a[i][j];            xi = a[i][k + 1] + a[i][j + 1];            yr = wkr * xr - wki * xi;            yi = wkr * xi + wki * xr;            a[i][k] -= yr;            a[i][k + 1] -= yi;            a[i][j] += yr;            a[i][j + 1] -= yi;        }    }}void rftfcol(int n1, int n, double **a, int nc, double *c){    int i, j, k, kk, ks;    double wkr, wki, xr, xi, yr, yi;        ks = (nc << 2) / n;    for (i = 0; i <= n1 - 1; i++) {        kk = 0;        for (k = (n >> 1) - 2; k >= 2; k -= 2) {            j = n - k;            kk += ks;            wkr = 0.5 - c[kk];            wki = c[nc - kk];            xr = a[i][k] - a[i][j];            xi = a[i][k + 1] + a[i][j + 1];            yr = wkr * xr + wki * xi;            yi = wkr * xi - wki * xr;            a[i][k] -= yr;            a[i][k + 1] -= yi;            a[i][j] += yr;            a[i][j + 1] -= yi;        }    }}void dctbsub(int n1, int n2, double **a, int nc, double *c){    int kk1, kk2, ks1, ks2, n1h, j1, k1, k2;    double w1r, w1i, wkr, wki, wjr, wji, x0r, x0i, x1r, x1i;        ks1 = nc / n1;    ks2 = nc / n2;    n1h = n1 >> 1;    kk1 = ks1;    for (k1 = 1; k1 <= n1h - 1; k1++) {        j1 = n1 - k1;        w1r = 2 * c[kk1];        w1i = 2 * c[nc - kk1];        kk1 += ks1;        kk2 = ks2;        for (k2 = 2; k2 <= n2 - 2; k2 += 2) {            x0r = w1r * c[kk2];            x0i = w1i * c[kk2];            x1r = w1r * c[nc - kk2];            x1i = w1i * c[nc - kk2];            wkr = x0r - x1i;            wki = x0i + x1r;            wji = x0r + x1i;            wjr = x0i - x1r;            kk2 += ks2;            x0r = wkr * a[k1][k2] - wki * a[k1][k2 + 1];            x0i = wkr * a[k1][k2 + 1] + wki * a[k1][k2];            x1r = wjr * a[j1][k2] - wji * a[j1][k2 + 1];            x1i = wjr * a[j1][k2 + 1] + wji * a[j1][k2];            a[k1][k2] = x0r + x1i;            a[k1][k2 + 1] = x0i - x1r;            a[j1][k2] = x1r + x0i;            a[j1][k2 + 1] = x1i - x0r;        }        wkr = w1r * 0.5;        wki = w1i * 0.5;        wjr = w1r * c[kk2];        wji = w1i * c[kk2];        x0r = a[k1][0] + a[j1][0];        x0i = a[k1][1] - a[j1][1];        x1r = a[k1][0] - a[j1][0];        x1i = a[k1][1] + a[j1][1];        a[k1][0] = wkr * x0r - wki * x0i;        a[k1][1] = wkr * x0i + wki * x0r;        a[j1][0] = -wjr * x1r + wji * x1i;        a[j1][1] = wjr * x1i + wji * x1r;    }    w1r = 2 * c[kk1];    kk2 = ks2;    for (k2 = 2; k2 <= n2 - 2; k2 += 2) {        wkr = 2 * c[kk2];        wki = 2 * c[nc - kk2];        wjr = w1r * wkr;        wji = w1r * wki;        kk2 += ks2;        x0i = wkr * a[0][k2 + 1] + wki * a[0][k2];        a[0][k2] = wkr * a[0][k2] - wki * a[0][k2 + 1];        a[0][k2 + 1] = x0i;        x0i = wjr * a[n1h][k2 + 1] + wji * a[n1h][k2];        a[n1h][k2] = wjr * a[n1h][k2] - wji * a[n1h][k2 + 1];        a[n1h][k2 + 1] = x0i;    }    a[0][1] *= w1r;    a[n1h][0] *= w1r;    a[n1h][1] *= 0.5;}void dctfsub(int n1, int n2, double **a, int nc, double *c){    int kk1, kk2, ks1, ks2, n1h, j1, k1, k2;    double w1r, w1i, wkr, wki, wjr, wji, x0r, x0i, x1r, x1i;        ks1 = nc / n1;    ks2 = nc / n2;    n1h = n1 >> 1;    kk1 = ks1;    for (k1 = 1; k1 <= n1h - 1; k1++) {        j1 = n1 - k1;        w1r = 2 * c[kk1];        w1i = 2 * c[nc - kk1];        kk1 += ks1;        kk2 = ks2;        for (k2 = 2; k2 <= n2 - 2; k2 += 2) {            x0r = w1r * c[kk2];            x0i = w1i * c[kk2];            x1r = w1r * c[nc - kk2];            x1i = w1i * c[nc - kk2];            wkr = x0r - x1i;            wki = x0i + x1r;            wji = x0r + x1i;            wjr = x0i - x1r;            kk2 += ks2;            x0r = a[k1][k2] - a[j1][k2 + 1];            x0i = a[j1][k2] + a[k1][k2 + 1];            x1r = a[j1][k2] - a[k1][k2 + 1];            x1i = a[k1][k2] + a[j1][k2 + 1];            a[k1][k2] = wkr * x0r + wki * x0i;            a[k1][k2 + 1] = wkr * x0i - wki * x0r;            a[j1][k2] = wjr * x1r + wji * x1i;            a[j1][k2 + 1] = wjr * x1i - wji * x1r;        }        x0r = 2 * c[kk2];        wjr = x0r * w1r;        wji = x0r * w1i;        x0r = w1r * a[k1][0] + w1i * a[k1][1];        x0i = w1r * a[k1][1] - w1i * a[k1][0];        x1r = -wjr * a[j1][0] + wji * a[j1][1];        x1i = wjr * a[j1][1] + wji * a[j1][0];        a[k1][0] = x0r + x1r;        a[k1][1] = x1i + x0i;        a[j1][0] = x0r - x1r;        a[j1][1] = x1i - x0i;    }    w1r = 2 * c[kk1];    kk2 = ks2;    for (k2 = 2; k2 <= n2 - 2; k2 += 2) {        wkr = 2 * c[kk2];        wki = 2 * c[nc - kk2];        wjr = w1r * wkr;        wji = w1r * wki;        kk2 += ks2;        x0i = wkr * a[0][k2 + 1] - wki * a[0][k2];        a[0][k2] = wkr * a[0][k2] + wki * a[0][k2 + 1];        a[0][k2 + 1] = x0i;        x0i = wjr * a[n1h][k2 + 1] - wji * a[n1h][k2];        a[n1h][k2] = wjr * a[n1h][k2] + wji * a[n1h][k2 + 1];        a[n1h][k2 + 1] = x0i;    }    w1r *= 2;    a[0][0] *= 2;    a[0][1] *= w1r;    a[n1h][0] *= w1r;}void dstbsub(int n1, int n2, double **a, int nc, double *c){    int kk1, kk2, ks1, ks2, n1h, j1, k1, k2;    double w1r, w1i, wkr, wki, wjr, wji, x0r, x0i, x1r, x1i;        ks1 = nc / n1;    ks2 = nc / n2;    n1h = n1 >> 1;    kk1 = ks1;    for (k1 = 1; k1 <= n1h - 1; k1++) {        j1 = n1 - k1;        w1r = 2 * c[kk1];        w1i = 2 * c[nc - kk1];        kk1 += ks1;        kk2 = ks2;        for (k2 = 2; k2 <= n2 - 2; k2 += 2) {            x0r = w1r * c[kk2];            x0i = w1i * c[kk2];            x1r = w1r * c[nc - kk2];            x1i = w1i * c[nc - kk2];            wkr = x0r - x1i;            wki = x0i + x1r;            wji = x0r + x1i;            wjr = x0i - x1r;            kk2 += ks2;            x0r = wkr * a[k1][k2] - wki * a[k1][k2 + 1];            x0i = wkr * a[k1][k2 + 1] + wki * a[k1][k2];            x1r = wjr * a[j1][k2] - wji * a[j1][k2 + 1];            x1i = wjr * a[j1][k2 + 1] + wji * a[j1][k2];            a[k1][k2] = x1i - x0r;            a[k1][k2 + 1] = x1r + x0i;            a[j1][k2] = x0i - x1r;            a[j1][k2 + 1] = x0r + x1i;        }        wkr = w1r * 0.5;        wki = w1i * 0.5;        wjr = w1r * c[kk2];        wji = w1i * c[kk2];        x0r = a[k1][0] + a[j1][0];        x0i = a[k1][1] - a[j1][1];        x1r = a[k1][0] - a[j1][0];        x1i = a[k1][1] + a[j1][1];        a[k1][1] = wkr * x0r - wki * x0i;        a[k1][0] = wkr * x0i + wki * x0r;        a[j1][1] = -wjr * x1r + wji * x1i;        a[j1][0] = wjr * x1i + wji * x1r;    }    w1r = 2 * c[kk1];    kk2 = ks2;    for (k2 = 2; k2 <= n2 - 2; k2 += 2) {        wkr = 2 * c[kk2];        wki = 2 * c[nc - kk2];        wjr = w1r * wkr;        wji = w1r * wki;        kk2 += ks2;        x0i = wkr * a[0][k2 + 1] + wki * a[0][k2];        a[0][k2 + 1] = wkr * a[0][k2] - wki * a[0][k2 + 1];        a[0][k2] = x0i;        x0i = wjr * a[n1h][k2 + 1] + wji * a[n1h][k2];        a[n1h][k2 + 1] = wjr * a[n1h][k2] - wji * a[n1h][k2 + 1];        a[n1h][k2] = x0i;    }    a[0][1] *= w1r;    a[n1h][0] *= w1r;    a[n1h][1] *= 0.5;}void dstfsub(int n1, int n2, double **a, int nc, double *c){    int kk1, kk2, ks1, ks2, n1h, j1, k1, k2;    double w1r, w1i, wkr, wki, wjr, wji, x0r, x0i, x1r, x1i;        ks1 = nc / n1;    ks2 = nc / n2;    n1h = n1 >> 1;    kk1 = ks1;    for (k1 = 1; k1 <= n1h - 1; k1++) {        j1 = n1 - k1;        w1r = 2 * c[kk1];        w1i = 2 * c[nc - kk1];        kk1 += ks1;        kk2 = ks2;        for (k2 = 2; k2 <= n2 - 2; k2 += 2) {            x0r = w1r * c[kk2];            x0i = w1i * c[kk2];            x1r = w1r * c[nc - kk2];            x1i = w1i * c[nc - kk2];            wkr = x0r - x1i;            wki = x0i + x1r;            wji = x0r + x1i;            wjr = x0i - x1r;            kk2 += ks2;            x0r = a[j1][k2 + 1] - a[k1][k2];            x0i = a[k1][k2 + 1] + a[j1][k2];            x1r = a[k1][k2 + 1] - a[j1][k2];            x1i = a[j1][k2 + 1] + a[k1][k2];            a[k1][k2] = wkr * x0r + wki * x0i;            a[k1][k2 + 1] = wkr * x0i - wki * x0r;            a[j1][k2] = wjr * x1r + wji * x1i;            a[j1][k2 + 1] = wjr * x1i - wji * x1r;        }        x0r = 2 * c[kk2];        wjr = x0r * w1r;        wji = x0r * w1i;        x0r = w1r * a[k1][1] + w1i * a[k1][0];        x0i = w1r * a[k1][0] - w1i * a[k1][1];        x1r = -wjr * a[j1][1] + wji * a[j1][0];        x1i = wjr * a[j1][0] + wji * a[j1][1];        a[k1][0] = x0r + x1r;        a[k1][1] = x1i + x0i;        a[j1][0] = x0r - x1r;        a[j1][1] = x1i - x0i;    }    w1r = 2 * c[kk1];    kk2 = ks2;    for (k2 = 2; k2 <= n2 - 2; k2 += 2) {        wkr = 2 * c[kk2];        wki = 2 * c[nc - kk2];        wjr = w1r * wkr;        wji = w1r * wki;        kk2 += ks2;        x0i = wkr * a[0][k2] - wki * a[0][k2 + 1];        a[0][k2] = wkr * a[0][k2 + 1] + wki * a[0][k2];        a[0][k2 + 1] = x0i;        x0i = wjr * a[n1h][k2] - wji * a[n1h][k2 + 1];        a[n1h][k2] = wjr * a[n1h][k2 + 1] + wji * a[n1h][k2];        a[n1h][k2 + 1] = x0i;    }    w1r *= 2;    a[0][0] *= 2;    a[0][1] *= w1r;    a[n1h][0] *= w1r;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -