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

📄 fftsg_h.c

📁 This is a package to calculate Discrete Fourier/Cosine/Sine Transforms of 1-dimensional sequences of
💻 C
📖 第 1 页 / 共 5 页
字号:
#endif#include <pthread.h>#include <stdio.h>#include <stdlib.h>#define cdft_thread_t pthread_t#define cdft_thread_create(thp,func,argp) { \    if (pthread_create(thp, NULL, func, (void *) argp) != 0) { \        fprintf(stderr, "cdft thread error\n"); \        exit(1); \    } \}#define cdft_thread_wait(th) { \    if (pthread_join(th, NULL) != 0) { \        fprintf(stderr, "cdft thread error\n"); \        exit(1); \    } \}#endif /* USE_CDFT_PTHREADS */#ifdef USE_CDFT_WINTHREADS#define USE_CDFT_THREADS#ifndef CDFT_THREADS_BEGIN_N#define CDFT_THREADS_BEGIN_N 32768#endif#ifndef CDFT_4THREADS_BEGIN_N#define CDFT_4THREADS_BEGIN_N 524288#endif#include <windows.h>#include <stdio.h>#include <stdlib.h>#define cdft_thread_t HANDLE#define cdft_thread_create(thp,func,argp) { \    DWORD thid; \    *(thp) = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, (LPVOID) argp, 0, &thid); \    if (*(thp) == 0) { \        fprintf(stderr, "cdft thread error\n"); \        exit(1); \    } \}#define cdft_thread_wait(th) { \    WaitForSingleObject(th, INFINITE); \    CloseHandle(th); \}#endif /* USE_CDFT_WINTHREADS */#ifndef CDFT_LOOP_DIV  /* control of the CDFT's speed & tolerance */#define CDFT_LOOP_DIV 32#endif#ifndef RDFT_LOOP_DIV  /* control of the RDFT's speed & tolerance */#define RDFT_LOOP_DIV 64#endif#ifndef DCST_LOOP_DIV  /* control of the DCT,DST's speed & tolerance */#define DCST_LOOP_DIV 64#endifvoid cftfsub(int n, double *a){    void bitrv2(int n, double *a);    void bitrv216(double *a);    void bitrv208(double *a);    void cftmdl1(int n, double *a);    void cftrec4(int n, double *a);    void cftleaf(int n, int isplt, double *a);    void cftfx41(int n, double *a);    void cftf161(double *a);    void cftf081(double *a);    void cftf040(double *a);    void cftx020(double *a);#ifdef USE_CDFT_THREADS    void cftrec4_th(int n, double *a);#endif /* USE_CDFT_THREADS */        if (n > 8) {        if (n > 32) {            cftmdl1(n, a);#ifdef USE_CDFT_THREADS            if (n > CDFT_THREADS_BEGIN_N) {                cftrec4_th(n, a);            } else #endif /* USE_CDFT_THREADS */            if (n > 512) {                cftrec4(n, a);            } else if (n > 128) {                cftleaf(n, 1, a);            } else {                cftfx41(n, a);            }            bitrv2(n, a);        } else if (n == 32) {            cftf161(a);            bitrv216(a);        } else {            cftf081(a);            bitrv208(a);        }    } else if (n == 8) {        cftf040(a);    } else if (n == 4) {        cftx020(a);    }}void cftbsub(int n, double *a){    void bitrv2conj(int n, double *a);    void bitrv216neg(double *a);    void bitrv208neg(double *a);    void cftb1st(int n, double *a);    void cftrec4(int n, double *a);    void cftleaf(int n, int isplt, double *a);    void cftfx41(int n, double *a);    void cftf161(double *a);    void cftf081(double *a);    void cftb040(double *a);    void cftx020(double *a);#ifdef USE_CDFT_THREADS    void cftrec4_th(int n, double *a);#endif /* USE_CDFT_THREADS */        if (n > 8) {        if (n > 32) {            cftb1st(n, a);#ifdef USE_CDFT_THREADS            if (n > CDFT_THREADS_BEGIN_N) {                cftrec4_th(n, a);            } else #endif /* USE_CDFT_THREADS */            if (n > 512) {                cftrec4(n, a);            } else if (n > 128) {                cftleaf(n, 1, a);            } else {                cftfx41(n, a);            }            bitrv2conj(n, a);        } else if (n == 32) {            cftf161(a);            bitrv216neg(a);        } else {            cftf081(a);            bitrv208neg(a);        }    } else if (n == 8) {        cftb040(a);    } else if (n == 4) {        cftx020(a);    }}void bitrv2(int n, double *a){    int j0, k0, j1, k1, l, m, i, j, k, nh;    double xr, xi, yr, yi;        m = 4;    for (l = n >> 2; l > 8; l >>= 2) {        m <<= 1;    }    nh = n >> 1;    if (l == 8) {        j0 = 0;        for (k0 = 0; k0 < m; k0 += 4) {            k = k0;            for (j = j0; j < j0 + k0; j += 4) {                xr = a[j];                xi = a[j + 1];                yr = a[k];                yi = a[k + 1];                a[j] = yr;                a[j + 1] = yi;                a[k] = xr;                a[k + 1] = xi;                j1 = j + m;                k1 = k + 2 * m;                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 += m;                k1 -= m;                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 += m;                k1 += 2 * m;                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 -= m;                k1 -= 2 * m;                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 -= m;                k1 += m;                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 -= m;                k1 -= 2 * m;                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 += m;                k1 += 2 * m;                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 += m;                k1 -= m;                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 += m;                k1 += 2 * m;                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 -= m;                k1 -= 2 * m;                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 -= m;                k1 += m;                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 -= m;                k1 -= 2 * m;                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;                for (i = nh >> 1; i > (k ^= i); i >>= 1);            }            k1 = j0 + k0;            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 += m;            k1 += 2 * m;            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 += m;            k1 -= m;            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 - m;            k1 += 2 * m - 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;            for (i = nh >> 1; i > (j0 ^= i); i >>= 1);        }    } else {        j0 = 0;        for (k0 = 0; k0 < m; k0 += 4) {            k = k0;            for (j = j0; j < j0 + k0; j += 4) {                xr = a[j];                xi = a[j + 1];                yr = a[k];                yi = a[k + 1];                a[j] = yr;                a[j + 1] = yi;                a[k] = xr;                a[k + 1] = xi;                j1 = j + m;                k1 = k + m;                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 -= m;                k1 -= m;                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 += m;                k1 += m;                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 -= m;                k1 -= m;                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;                for (i = nh >> 1; i > (k ^= i); i >>= 1);            }            k1 = j0 + k0;            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 += m;            k1 += m;            xr = a[j1];            xi = a[j1 + 1];

⌨️ 快捷键说明

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