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

📄 fft4f2d.c

📁 2维fft程序
💻 C
📖 第 1 页 / 共 4 页
字号:
    double xr, xi;        ip[0] = 0;    l = n;    m = 1;    while ((m << 1) < l) {        l >>= 1;        for (j = 0; j <= m - 1; j++) {            ip[m + j] = ip[j] + l;        }        m <<= 1;    }    if ((m << 1) > l) {        for (k = 1; k <= m - 1; k++) {            for (j = 0; j <= k - 1; j++) {                j1 = j + ip[k];                k1 = k + ip[j];                for (i = 0; i <= n2 - 2; i += 2) {                    xr = a[j1][i];                    xi = a[j1][i + 1];                    a[j1][i] = a[k1][i];                    a[j1][i + 1] = a[k1][i + 1];                    a[k1][i] = xr;                    a[k1][i + 1] = xi;                }            }        }    } else {        for (k = 1; k <= m - 1; k++) {            for (j = 0; j <= k - 1; j++) {                j1 = j + ip[k];                k1 = k + ip[j];                for (i = 0; i <= n2 - 2; i += 2) {                    xr = a[j1][i];                    xi = a[j1][i + 1];                    a[j1][i] = a[k1][i];                    a[j1][i + 1] = a[k1][i + 1];                    a[k1][i] = xr;                    a[k1][i + 1] = xi;                }                j1 += m;                k1 += m;                for (i = 0; i <= n2 - 2; i += 2) {                    xr = a[j1][i];                    xi = a[j1][i + 1];                    a[j1][i] = a[k1][i];                    a[j1][i + 1] = a[k1][i + 1];                    a[k1][i] = xr;                    a[k1][i + 1] = xi;                }            }        }    }}void cftbcol(int n1, int n, double **a, double *w){    int i, j, j1, j2, j3, k, k1, ks, l, m;    double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;    double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;        for (i = 0; i <= n1 - 1; i++) {        l = 2;        while ((l << 1) < n) {            m = l << 2;            for (j = 0; j <= l - 2; j += 2) {                j1 = j + l;                j2 = j1 + l;                j3 = j2 + l;                x0r = a[i][j] + a[i][j1];                x0i = a[i][j + 1] + a[i][j1 + 1];                x1r = a[i][j] - a[i][j1];                x1i = a[i][j + 1] - a[i][j1 + 1];                x2r = a[i][j2] + a[i][j3];                x2i = a[i][j2 + 1] + a[i][j3 + 1];                x3r = a[i][j2] - a[i][j3];                x3i = a[i][j2 + 1] - a[i][j3 + 1];                a[i][j] = x0r + x2r;                a[i][j + 1] = x0i + x2i;                a[i][j2] = x0r - x2r;                a[i][j2 + 1] = x0i - x2i;                a[i][j1] = x1r - x3i;                a[i][j1 + 1] = x1i + x3r;                a[i][j3] = x1r + x3i;                a[i][j3 + 1] = x1i - x3r;            }            if (m < n) {                wk1r = w[2];                for (j = m; j <= l + m - 2; j += 2) {                    j1 = j + l;                    j2 = j1 + l;                    j3 = j2 + l;                    x0r = a[i][j] + a[i][j1];                    x0i = a[i][j + 1] + a[i][j1 + 1];                    x1r = a[i][j] - a[i][j1];                    x1i = a[i][j + 1] - a[i][j1 + 1];                    x2r = a[i][j2] + a[i][j3];                    x2i = a[i][j2 + 1] + a[i][j3 + 1];                    x3r = a[i][j2] - a[i][j3];                    x3i = a[i][j2 + 1] - a[i][j3 + 1];                    a[i][j] = x0r + x2r;                    a[i][j + 1] = x0i + x2i;                    a[i][j2] = x2i - x0i;                    a[i][j2 + 1] = x0r - x2r;                    x0r = x1r - x3i;                    x0i = x1i + x3r;                    a[i][j1] = wk1r * (x0r - x0i);                    a[i][j1 + 1] = wk1r * (x0r + x0i);                    x0r = x3i + x1r;                    x0i = x3r - x1i;                    a[i][j3] = wk1r * (x0i - x0r);                    a[i][j3 + 1] = wk1r * (x0i + x0r);                }                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 - 2; j += 2) {                        j1 = j + l;                        j2 = j1 + l;                        j3 = j2 + l;                        x0r = a[i][j] + a[i][j1];                        x0i = a[i][j + 1] + a[i][j1 + 1];                        x1r = a[i][j] - a[i][j1];                        x1i = a[i][j + 1] - a[i][j1 + 1];                        x2r = a[i][j2] + a[i][j3];                        x2i = a[i][j2 + 1] + a[i][j3 + 1];                        x3r = a[i][j2] - a[i][j3];                        x3i = a[i][j2 + 1] - a[i][j3 + 1];                        a[i][j] = x0r + x2r;                        a[i][j + 1] = x0i + x2i;                        x0r -= x2r;                        x0i -= x2i;                        a[i][j2] = wk2r * x0r - wk2i * x0i;                        a[i][j2 + 1] = wk2r * x0i + wk2i * x0r;                        x0r = x1r - x3i;                        x0i = x1i + x3r;                        a[i][j1] = wk1r * x0r - wk1i * x0i;                        a[i][j1 + 1] = wk1r * x0i + wk1i * x0r;                        x0r = x1r + x3i;                        x0i = x1i - x3r;                        a[i][j3] = wk3r * x0r - wk3i * x0i;                        a[i][j3 + 1] = wk3r * x0i + wk3i * x0r;                    }                }            }            l = m;        }        if (l < n) {            for (j = 0; j <= l - 2; j += 2) {                j1 = j + l;                x0r = a[i][j] - a[i][j1];                x0i = a[i][j + 1] - a[i][j1 + 1];                a[i][j] += a[i][j1];                a[i][j + 1] += a[i][j1 + 1];                a[i][j1] = x0r;                a[i][j1 + 1] = x0i;            }        }    }}void cftbrow(int n, int n2, double **a, double *w){    int i, j, j1, j2, j3, k, k1, ks, l, m;    double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;    double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;        l = 1;    while ((l << 1) < n) {        m = l << 2;        for (j = 0; j <= l - 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] = 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] = x2i - x0i;                    a[j2][i + 1] = x0r - x2r;                    x0r = x1r - x3i;                    x0i = x1i + x3r;                    a[j1][i] = wk1r * (x0r - x0i);                    a[j1][i + 1] = wk1r * (x0r + x0i);                    x0r = x3i + x1r;                    x0i = x3r - x1i;                    a[j3][i] = wk1r * (x0i - x0r);                    a[j3][i + 1] = wk1r * (x0i + x0r);                }            }            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 cftfcol(int n1, int n, double **a, double *w){    int i, j, j1, j2, j3, k, k1, ks, l, m;    double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;    double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;        for (i = 0; i <= n1 - 1; i++) {        l = 2;        while ((l << 1) < n) {            m = l << 2;            for (j = 0; j <= l - 2; j += 2) {                j1 = j + l;                j2 = j1 + l;                j3 = j2 + l;                x0r = a[i][j] + a[i][j1];                x0i = a[i][j + 1] + a[i][j1 + 1];                x1r = a[i][j] - a[i][j1];                x1i = a[i][j + 1] - a[i][j1 + 1];                x2r = a[i][j2] + a[i][j3];                x2i = a[i][j2 + 1] + a[i][j3 + 1];                x3r = a[i][j2] - a[i][j3];                x3i = a[i][j2 + 1] - a[i][j3 + 1];                a[i][j] = x0r + x2r;                a[i][j + 1] = x0i + x2i;                a[i][j2] = x0r - x2r;                a[i][j2 + 1] = x0i - x2i;                a[i][j1] = x1r + x3i;                a[i][j1 + 1] = x1i - x3r;                a[i][j3] = x1r - x3i;                a[i][j3 + 1] = x1i + x3r;            }            if (m < n) {                wk1r = w[2];                for (j = m; j <= l + m - 2; j += 2) {                    j1 = j + l;                    j2 = j1 + l;                    j3 = j2 + l;                    x0r = a[i][j] + a[i][j1];                    x0i = a[i][j + 1] + a[i][j1 + 1];                    x1r = a[i][j] - a[i][j1];                    x1i = a[i][j + 1] - a[i][j1 + 1];                    x2r = a[i][j2] + a[i][j3];                    x2i = a[i][j2 + 1] + a[i][j3 + 1];                    x3r = a[i][j2] - a[i][j3];                    x3i = a[i][j2 + 1] - a[i][j3 + 1];                    a[i][j] = x0r + x2r;                    a[i][j + 1] = x0i + x2i;                    a[i][j2] = x0i - x2i;                    a[i][j2 + 1] = x2r - x0r;                    x0r = x1r + x3i;                    x0i = x1i - x3r;                    a[i][j1] = wk1r * (x0i + x0r);                    a[i][j1 + 1] = wk1r * (x0i - x0r);                    x0r = x3i - x1r;                    x0i = x3r + x1i;                    a[i][j3] = wk1r * (x0r + x0i);                    a[i][j3 + 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 - 2; j += 2) {                        j1 = j + l;                        j2 = j1 + l;                        j3 = j2 + l;                        x0r = a[i][j] + a[i][j1];                        x0i = a[i][j + 1] + a[i][j1 + 1];                        x1r = a[i][j] - a[i][j1];                        x1i = a[i][j + 1] - a[i][j1 + 1];                        x2r = a[i][j2] + a[i][j3];                        x2i = a[i][j2 + 1] + a[i][j3 + 1];                        x3r = a[i][j2] - a[i][j3];                        x3i = a[i][j2 + 1] - a[i][j3 + 1];                        a[i][j] = x0r + x2r;                        a[i][j + 1] = x0i + x2i;                        x0r -= x2r;                        x0i -= x2i;                        a[i][j2] = wk2r * x0r + wk2i * x0i;                        a[i][j2 + 1] = wk2r * x0i - wk2i * x0r;                        x0r = x1r + x3i;                        x0i = x1i - x3r;                        a[i][j1] = wk1r * x0r + wk1i * x0i;                        a[i][j1 + 1] = wk1r * x0i - wk1i * x0r;                        x0r = x1r - x3i;                        x0i = x1i + x3r;                        a[i][j3] = wk3r * x0r + wk3i * x0i;                        a[i][j3 + 1] = wk3r * x0i - wk3i * x0r;                    }                }            }            l = m;        }        if (l < n) {            for (j = 0; j <= l - 2; j += 2) {                j1 = j + l;                x0r = a[i][j] - a[i][j1];                x0i = a[i][j + 1] - a[i][j1 + 1];                a[i][j] += a[i][j1];                a[i][j + 1] += a[i][j1 + 1];                a[i][j1] = x0r;                a[i][j1 + 1] = x0i;            }        }    }}void cftfrow(int n, int n2, double **a, double *w){    int i, j, j1, j2, j3, k, k1, ks, l, m;    double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;    double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;        l = 1;    while ((l << 1) < n) {        m = l << 2;        for (j = 0; j <= l - 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];

⌨️ 快捷键说明

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