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

📄 transforms.cc

📁 各种工程计算的库函数
💻 CC
📖 第 1 页 / 共 5 页
字号:
        }        nw0 = 0;        while (nwh > 2) {            nw1 = nw0 + nwh;            nwh >>= 1;            w[nw1] = 1;            w[nw1 + 1] = wn4r;            if (nwh == 4) {                wk1r = w[nw0 + 4];                wk1i = w[nw0 + 5];                w[nw1 + 2] = wk1r;                w[nw1 + 3] = wk1i;            } else if (nwh > 4) {                wk1r = w[nw0 + 4];                wk3r = w[nw0 + 6];                w[nw1 + 2] = 0.5f / wk1r;                w[nw1 + 3] = 0.5f / wk3r;                for (j = 4; j < nwh; j += 4) {                    wk1r = w[nw0 + 2 * j];                    wk1i = w[nw0 + 2 * j + 1];                    wk3r = w[nw0 + 2 * j + 2];                    wk3i = w[nw0 + 2 * j + 3];                    w[nw1 + j] = wk1r;                    w[nw1 + j + 1] = wk1i;                    w[nw1 + j + 2] = wk3r;                    w[nw1 + j + 3] = wk3i;                }            }            nw0 = nw1;        }    }}void clTransformS::makect(long nc, long *ip, float *c){    long j, nch;    float delta;        ip[1] = nc;    if (nc > 1) {        nch = nc >> 1;#       ifndef TRANSFORM_EXT_PREC        delta = atanf(1.0f) / nch;        c[0] = cosf(delta * nch);#       else        delta = (float) atan(1.0) / nch;        c[0] = (float) cos(delta * nch);#       endif        c[nch] = 0.5f * c[0];        for (j = 1; j < nch; j++) {#           ifndef TRANSFORM_EXT_PREC            c[j] = 0.5f * cosf(delta * j);            c[nc - j] = 0.5f * sinf(delta * j);#           else            c[j] = (float) (0.5 * cos(delta * j));            c[nc - j] = (float) (0.5 * sin(delta * j));#           endif        }    }}/* -------- child routines -------- */void clTransformS::cftfsub(long n, float *a, long *ip, long nw, float *w){    if (n > 8) {        if (n > 32) {            cftf1st(n, a, &w[nw - (n >> 2)]);#           ifdef USE_CDFT_THREADS            if (n > CDFT_THREADS_BEGIN_N) {                cftrec4_th(n, a, nw, w);            } else #           endif /* USE_CDFT_THREADS */            if (n > 512) {                cftrec4(n, a, nw, w);            } else if (n > 128) {                cftleaf(n, 1, a, nw, w);            } else {                cftfx41(n, a, nw, w);            }            bitrv2(n, ip, a);        } else if (n == 32) {            cftf161(a, &w[nw - 8]);            bitrv216(a);        } else {            cftf081(a, w);            bitrv208(a);        }    } else if (n == 8) {        cftf040(a);    } else if (n == 4) {        cftx020(a);    }}void clTransformS::cftbsub(long n, float *a, long *ip, long nw, float *w){    if (n > 8) {        if (n > 32) {            cftb1st(n, a, &w[nw - (n >> 2)]);#           ifdef USE_CDFT_THREADS            if (n > CDFT_THREADS_BEGIN_N) {                cftrec4_th(n, a, nw, w);            } else #           endif /* USE_CDFT_THREADS */            if (n > 512) {                cftrec4(n, a, nw, w);            } else if (n > 128) {                cftleaf(n, 1, a, nw, w);            } else {                cftfx41(n, a, nw, w);            }            bitrv2conj(n, ip, a);        } else if (n == 32) {            cftf161(a, &w[nw - 8]);            bitrv216neg(a);        } else {            cftf081(a, w);            bitrv208neg(a);        }    } else if (n == 8) {        cftb040(a);    } else if (n == 4) {        cftx020(a);    }}TS_INLINE void clTransformS::bitrv2(long n, long *ip, float *a){    long j, j1, k, k1, l, m, nh, nm;    float xr, xi, yr, yi;        m = 1;    for (l = n >> 2; l > 8; l >>= 2) {        m <<= 1;    }    nh = n >> 1;    nm = 4 * m;    if (l == 8) {        for (k = 0; k < m; k++) {            for (j = 0; j < k; j++) {                j1 = 4 * j + 2 * ip[m + k];                k1 = 4 * k + 2 * ip[m + 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 += nm;                k1 += 2 * nm;                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 += nm;                k1 -= nm;                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 += nm;                k1 += 2 * nm;                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 += nh;                k1 += 2;                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 -= nm;                k1 -= 2 * nm;                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 -= nm;                k1 += nm;                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 -= nm;                k1 -= 2 * nm;                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 += 2;                k1 += nh;                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 += nm;                k1 += 2 * nm;                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 += nm;                k1 -= nm;                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 += nm;                k1 += 2 * nm;                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 -= nh;                k1 -= 2;                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 -= nm;                k1 -= 2 * nm;                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 -= nm;                k1 += nm;                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 -= nm;                k1 -= 2 * nm;                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 = 4 * k + 2 * ip[m + k];            j1 = k1 + 2;            k1 += nh;            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 += nm;            k1 += 2 * nm;            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 += nm;            k1 -= nm;            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 -= 2;            k1 -= nh;            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 += nh + 2;            k1 += nh + 2;            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 -= nh - nm;            k1 += 2 * nm - 2;            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;        }    } else {        for (k = 0; k < m; k++) {            for (j = 0; j < k; j++) {                j1 = 4 * j + ip[m + k];                k1 = 4 * k + ip[m + 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 += nm;                k1 += nm;                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 += nh;                k1 += 2;                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 -= nm;                k1 -= nm;                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 += 2;                k1 += nh;                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 += nm;                k1 += nm;                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 -= nh;                k1 -= 2;                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 -= nm;                k1 -= nm;                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 = 4 * k + ip[m + k];            j1 = k1 + 2;            k1 += nh;            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 += nm;            k1 += nm;            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;        }    }}TS_INLINE void clTransformS::bitrv2conj(long n, long *ip, float *a){    long j, j1, k, k1, l, m, nh, nm;    float xr, xi, yr, yi;        m = 1;    for (l = n >> 2; l > 8; l >>= 2) {        m <<= 1;    }    nh = n >> 1;    nm = 4 * m;    if (l == 8) {        for (k = 0; k < m; k++) {            for (j = 0; j < k; j++) {                j1 = 4 * j + 2 * ip[m + k];                k1 = 4 * k + 2 * ip[m + j];                xr = a[j1];                xi = -a[j1 + 1];

⌨️ 快捷键说明

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