{"id":1819,"date":"2023-08-14T19:59:23","date_gmt":"2023-08-14T11:59:23","guid":{"rendered":"https:\/\/www.huangrongzhen.ink\/?p=1819"},"modified":"2023-08-31T20:30:23","modified_gmt":"2023-08-31T12:30:23","slug":"c-%e8%af%ad%e8%a8%80-fft","status":"publish","type":"post","link":"https:\/\/www.huangrongzhen.ink\/?p=1819","title":{"rendered":"C \u8bed\u8a00 &#8211; FFT"},"content":{"rendered":"<div class=\"wp-block-post-excerpt\"><p class=\"wp-block-post-excerpt__excerpt\">\u7b97\u6cd5\u7b14\u8bb0 <\/p><\/div>\n\n\n<p>C \u8bed\u8a00\u5b9e\u73b0\u79bb\u6563\u5085\u5229\u53f6\u53d8\u6362\uff08DFT\uff09\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a DFT\n* \u51fd\u6570\u529f\u80fd\uff1a \u79bb\u6563\u5085\u5229\u53f6\u53d8\u6362\uff08DFT\uff09\n* \u8f93\u5165\u53c2\u6570\uff1a x\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5b58\u653e\u8981\u53d8\u6362\u6570\u636e\u7684\u5b9e\u90e8\u3002\n*            y\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5b58\u653e\u8981\u53d8\u6362\u6570\u636e\u7684\u865a\u90e8\u3002\n*            a\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u5b9e\u90e8\u3002\n*            b\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u865a\u90e8\u3002\n*            n\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u6570\u636e\u957f\u5ea6\n*            sign\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u5f53 sign=1 \u65f6\uff0c\u5b50\u51fd\u6570 DFT() \u8ba1\u7b97\u79bb\u6563\u5085\u5229\u53f6\u6b63\u53d8\u6362\uff1b\u5f53 sign=-1 \u65f6\uff0c\u505a\u53cd\u53d8\u6362\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670814\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid DFT(double* x, double* y, double* a, double* b, int n, int sign)\n{\n  int i, k;\n  double c, d, q, w, s;\n  q = 6.28318530718 \/ (double)n;\n  for (k = 0; k &lt; n; k++)\n  {\n    w = k * q;\n    a[k] = b[k] = 0.0;\n    for (i = 0; i &lt; n; i++)\n    {\n      d = i * w;\n      c = cos(d);\n      s = sin(d) * sign;\n      a[k] += c * x[i] + s * y[i];\n      b[k] += c * y[i] - s * x[i];\n    }\n  }\n  if (sign == -1)\n  {\n    c = 1.0 \/ (double)n;\n    for (k = 0; k &lt; n; k++)\n    {\n      a[k] = c * a[k];\n      b[k] = c * b[k];\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p>C \u8bed\u8a00\u5b9e\u73b0\u5feb\u901f\u5085\u5229\u53f6\u53d8\u6362\uff08FFT\uff09\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a FFT\n* \u51fd\u6570\u529f\u80fd\uff1a \u5feb\u901f\u5085\u5229\u53f6\u53d8\u6362\n* \u8f93\u5165\u53c2\u6570\uff1a x\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5f00\u59cb\u65f6\u5b58\u653e\u8981\u53d8\u6362\u6570\u636e\u7684\u5b9e\u90e8\uff0c\u6700\u540e\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u5b9e\u90e8\u3002\n*            y\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5f00\u59cb\u65f6\u5b58\u653e\u8981\u53d8\u6362\u6570\u636e\u7684\u865a\u90e8\uff0c\u6700\u540e\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u865a\u90e8\u3002\n*            n\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u6570\u636e\u957f\u5ea6\u3002\u5fc5\u987b\u662f 2 \u7684\u6574\u6570\u6b21\u5e42\uff0c\u5373 n=2^m \u3002\n*            sign\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u5f53 sign=1 \u65f6\uff0c\u5b50\u51fd\u6570 FFT() \u8ba1\u7b97\u79bb\u6563\u5085\u5229\u53f6\u6b63\u53d8\u6362\uff1b\u5f53 sign=-1 \u65f6\uff0c\u505a\u53cd\u53d8\u6362\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670814\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid FFT(double* x, double* y, int n, int sign)\n{\n  int i, j, k, l, m, n1, n2;\n  double c, c1, e, s, s1, t, tr, ti;\n  for (j = 1, i = 1; i &lt; 16; i++)\n  {\n    m = i;\n    j = 2 * j;\n    if (j == n)\n    {\n      break;\n    }\n  }\n  n1 = n - 1;\n  for (j = 0, i = 0; i &lt; n1; i++)\n  {\n    if (i &lt; j)\n    {\n      tr = x[j];\n      ti = y[j];\n      x[j] = x[i];\n      y[j] = y[i];\n      x[i] = tr;\n      y[i] = ti;\n    }\n    k = n \/ 2;\n    while (k &lt; (j + 1))\n    {\n      j = j - k;\n      k = k \/ 2;\n    }\n    j = j + k;\n  }\n  n1 = 1;\n  for (l = 1; l &lt;= m; l++)\n  {\n    n1 = 2 * n1;\n    n2 = n1 \/ 2;\n    e = 3.14159265359 \/ n2;\n    c = 1.0;\n    s = 0.0;\n    c1 = cos(e);\n    s1 = -sign * sin(e);\n    for (j = 0; j &lt; n2; j++)\n    {\n      for (i = j; i &lt; n; i += n1)\n      {\n        k = i + n2;\n        tr = c * x[k] - s * y[k];\n        ti = c * y[k] + s * x[k];\n        x[k] = x[i] - tr;\n        y[k] = y[i] - ti;\n        x[i] = x[i] + tr;\n        y[i] = y[i] + ti;\n      }\n      t = c;\n      c = c * c1 - s * s1;\n      s = t * s1 + s * c1;\n    }\n  }\n  if (sign == -1)\n  {\n    for (i = 0; i &lt; n; i++)\n    {\n      x[i] \/= n;\n      y[i] \/= n;\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>\u5206\u88c2\u57fa\u5feb\u901f\u5085\u5229\u53f6\u53d8\u6362\u4ee3\u7801\u5982\u4e0b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a SRFFT\n* \u51fd\u6570\u529f\u80fd\uff1a \u5206\u88c2\u57fa\u5feb\u901f\u5085\u5229\u53f6\u53d8\u6362\n* \u8f93\u5165\u53c2\u6570\uff1a x\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5f00\u59cb\u65f6\u5b58\u653e\u8981\u53d8\u6362\u6570\u636e\u7684\u5b9e\u90e8\uff0c\u6700\u540e\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u5b9e\u90e8\u3002\n*            y\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5f00\u59cb\u65f6\u5b58\u653e\u8981\u53d8\u6362\u6570\u636e\u7684\u865a\u90e8\uff0c\u6700\u540e\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u865a\u90e8\u3002\n*            n\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u6570\u636e\u957f\u5ea6\u3002\u5fc5\u987b\u662f 2 \u7684\u6574\u6570\u6b21\u5e42\uff0c\u5373 n=2^m \u3002\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670818\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid SRFFT(double* x, double* y, int n)\n{\n  int i, j, k, m, i1, i2, i3, n1, n2, n4, id, is;\n  double a, e, a3, r1, r2;\n  double s1, s2, s3, cc1, cc3, ss1, ss3;\n  for (j = 1, i = 1; i &lt; 16; i++)\n  {\n    m = i;\n    j = 2 * j;\n    if (j == n)\n    {\n      break;\n    }\n  }\n  n2 = 2 * n;\n  for (k = 1; k &lt; m; k++)\n  {\n    n2 = n2 \/ 2;\n    n4 = n2 \/ 4;\n    e = 6.28318530718 \/ n2;\n    a = 0;\n    for (j = 0; j &lt; n4; j++)\n    {\n      a3 = 3 * a;\n      cc1 = cos(a);\n      ss1 = sin(a);\n      cc3 = cos(a3);\n      ss3 = sin(a3);\n      a = ((double)j + 1.0) * e;\n      is = j;\n      id = 2 * n2;\n      do\n      {\n        for (i = is; i &lt; (n - 1); i = i + id)\n        {\n          i1 = i + n4;\n          i2 = i1 + n4;\n          i3 = i2 + n4;\n          r1 = x[i] - x[i2];\n          x[i] = x[i] + x[i2];\n          r2 = x[i1] - x[i3];\n          x[i1] = x[i1] + x[i3];\n          s1 = y[i] - y[i2];\n          y[i] = y[i] + y[i2];\n          s2 = y[i1] - y[i3];\n          y[i1] = y[i1] + y[i3];\n          s3 = r1 - s2;\n          r1 = r1 + s2;\n          s2 = r2 - s1;\n          r2 = r2 + s1;\n          x[i2] = r1 * cc1 - s2 * ss1;\n          y[i2] = -s2 * cc1 - r1 * ss1;\n          x[i3] = s3 * cc3 + r2 * ss3;\n          y[i3] = r2 * cc3 - s3 * ss3;\n        }\n        is = 2 * id - n2 + j;\n        id = 4 * id;\n      }while(is &lt; (n - 1));\n    }\n  }\n  is = 0;\n  id = 4;\n  do\n  {\n    for (i = is; i &lt; n; i = i + id)\n    {\n      i1 = i + 1;\n      r1 = x[i];\n      r2 = y[i];\n      x[i] = r1 + x[i1];\n      y[i] = r2 + y[i1];\n      x[i1] = r1 - x[i1];\n      y[i1] = r2 - y[i1];\n    }\n    is = 2 * id - 2;\n    id = 4 * id;\n  }while(is &lt; (n - 1));\n  n1 = n - 1;\n  for (j = 0, i = 0; i &lt; n1; i++)\n  {\n    if (i &lt; j)\n    {\n      r1 = x[j];\n      s1 = y[j];\n      x[j] = x[i];\n      y[j] = y[i];\n      x[i] = r1;\n      y[i] = s1;\n    }\n    k = n \/ 2;\n    while (k &lt; (j + 1))\n    {\n      j = j - k;\n      k = k \/ 2;\n    }\n    j = j + k;\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u5b9e\u5e8f\u5217\u5feb\u901f\u5085\u5229\u53f6\u53d8\u6362\uff08\u4e00\uff09\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a RFFT\n* \u51fd\u6570\u529f\u80fd\uff1a \u5b9e\u5e8f\u5217\u5feb\u901f\u5085\u5229\u53f6\u53d8\u6362\uff08\u4e00\uff09\n* \u8f93\u5165\u53c2\u6570\uff1a x\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5f00\u59cb\u65f6\u5b58\u653e\u8981\u53d8\u6362\u7684\u5b9e\u6570\u636e\uff0c\u6700\u540e\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u524d (n\/2)+1 \u4e2a\u503c\u3002\n*               \u5b58\u50a8\u987a\u5e8f\u4e3a\uff1a[Re(0),Re(1),...,Re(n\/2),Im((n\/2)-1),...,Im(1)]\u3002\n*               \u5176\u4e2d Re(0)=X(0)\uff0cRe(n\/2)=X(n\/2)\u3002\u6839\u636e X(k) \u7684\u5171\u8f6d\u5bf9\u79f0\u6027\uff0c\u5f88\u5bb9\u6613\u5199\u51fa\u540e\u534a\u90e8\u5206\u7684\u503c\n*            n\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u6570\u636e\u957f\u5ea6\u3002\u5fc5\u987b\u662f 2 \u7684\u6574\u6570\u6b21\u5e42\uff0c\u5373 n=2^m \u3002\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670818\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid RFFT(double* x, double n)\n{\n  int i, j, k, m, i1, i2, i3, i4, n1, n2, n4;\n  double a, e, cc, ss, xt, t1, t2;\n  for (j = 1, i = 1; i &lt; 16; i++)\n  {\n    m = i;\n    j = 2 * j;\n    if (j == n)\n    {\n      break;\n    }\n  }\n  n1 = n - 1;\n  for (j = 0, i = 0; i &lt; n1; i++)\n  {\n    if (i &lt; j)\n    {\n      xt = x[j];\n      x[j] = x[i];\n      x[i] = xt;\n    }\n    k = n \/ 2;\n    while (k &lt; (j + 1))\n    {\n      j = j - k;\n      k = k \/ 2;\n    }\n    j = j + k;\n  }\n  for (i = 0; i &lt; n; i += 2)\n  {\n    xt = x[i];\n    x[i] = xt + x[i + 1];\n    x[i + 1] = xt - x[i + 1];\n  }\n  n2 = 1;\n  for (k = 2; k &lt;= m; k++)\n  {\n    n4 = n2;\n    n2 = 2 * n4;\n    n1 = 2 * n2;\n    e = 6.28318530718 \/ n1;\n    for (i = 0; i &lt; n; i += n1)\n    {\n      xt = x[i];\n      x[i] = xt + x[i + n2];\n      x[i + n2] = xt - x[i + n2];\n      x[i + n2 + n4] = -x[i + n2 + n4];\n      a = e;\n      for (j = 1; j &lt;= (n4 - 1); j++)\n      {\n        i1 = i + j;\n        i2 = i - j + n2;\n        i3 = i + j + n2;\n        i4 = i - j + n1;\n        cc = cos(a);\n        ss = sin(a);\n        a = a + e;\n        t1 = cc * x[i3] + ss * x[i4];\n        t2 = ss * x[i3] - cc * x[i4];\n        x[i4] = x[i2] - t2;\n        x[i3] = -x[i2] - t2;\n        x[i2] = x[i1] - t1;\n        x[i1] = x[i1] + t1;\n      }\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u5b9e\u5e8f\u5217\u5feb\u901f\u5085\u5229\u53f6\u53d8\u6362\uff08\u4e8c\uff09\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a RLFFT\n* \u51fd\u6570\u529f\u80fd\uff1a \u5b9e\u5e8f\u5217\u5feb\u901f\u5085\u5229\u53f6\u53d8\u6362\uff08\u4e8c\uff09\n* \u8f93\u5165\u53c2\u6570\uff1a x\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u957f\u5ea6\u4e3a n\u3002\u5f00\u59cb\u65f6\u5b58\u653e\u8981\u53d8\u6362\u7684\u5b9e\u6570\u636e\uff0c\u6700\u540e\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u524d (n\/2)+1 \u4e2a\u503c\u3002\n*               \u5b58\u50a8\u987a\u5e8f\u4e3a\uff1a[Re(0),Re(1),...,Re(n\/2),Im((n\/2)-1),...,Im(1)]\u3002\n*               \u5176\u4e2d Re(0)=X(0)\uff0cRe(n\/2)=X(n\/2)\u3002\u6839\u636e X(k) \u7684\u5171\u8f6d\u5bf9\u79f0\u6027\uff0c\u5f88\u5bb9\u6613\u5199\u51fa\u540e\u534a\u90e8\u5206\u7684\u503c\n*            n\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u6570\u636e\u957f\u5ea6\u3002\u5fc5\u987b\u662f 2 \u7684\u6574\u6570\u6b21\u5e42\uff0c\u5373 n=2^m \u3002\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670818\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid RLFFT(double* x, int n)\n{\n  int i, n1;\n  double a, c, e, s, fr, fi, gr, gi, *f, *g;\n  f = malloc((n \/ 2) * sizeof(double));\n  g = malloc((n \/ 2) * sizeof(double));\n  n1 = n\/ 2;\n  e = 3.141592653589793 \/ n1;\n  for (i = 0; i &lt; n1; i++)\n  {\n    f[i] = x[2 * i];\n    g[i] = x[2 * i + 1];\n  }\n  FFT(f, g, n1, 1);\n  x[0] = f[0] + g[0];\n  x[n1] = f[0] - g[0];\n  for (i = 1; i &lt; n1; i++)\n  {\n    fr = (f[i] + f[n1 - i]) \/ 2;\n    fi = (g[i] - g[n1 - i]) \/ 2;\n    gr = (g[n1 - i] + g[i]) \/ 2;\n    gi = (f[n1 - i] - f[i]) \/ 2;\n    a = i * e;\n    c = cos(a);\n    s = sin(a);\n    x[i] = fr + c * gr + s * gi;\n    x[n - i] = fi + c * gi - s * gr;\n  }\n  free(f);\n  free(g);\n}<\/code><\/pre>\n\n\n\n<p>Chirp Z \u53d8\u6362\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include \"math.h\"\n#include \"stdlib.h\"\n#include \"malloc.h\"\n\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a CZT\n* \u51fd\u6570\u529f\u80fd\uff1a Chirp Z \u53d8\u6362\n* \u8f93\u5165\u53c2\u6570\uff1a xr\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u5176\u957f\u5ea6\u5927\u4e8e\u6216\u7b49\u4e8e\uff08n + m - 1\uff09\uff0c\u4e14\u662f 2 \u7684 \u6574\u6570\u6b21\u5e42\u3002\n*                \u5f00\u59cb\u65f6\u5b58\u653e\u8f93\u5165\u6570\u636e\u7684\u5b9e\u90e8\uff0c\u6700\u540e\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u5b9e\u90e8\u3002\n*            xi\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u4e00\u7ef4\u6570\u7ec4\uff0c\u5176\u957f\u5ea6\u5927\u4e8e\u6216\u7b49\u4e8e\uff08n + m - 1\uff09\uff0c\u4e14\u662f 2 \u7684 \u6574\u6570\u6b21\u5e42\u3002\n*                \u5f00\u59cb\u65f6\u5b58\u653e\u8f93\u5165\u6570\u636e\u7684\u865a\u90e8\uff0c\u6700\u540e\u5b58\u653e\u53d8\u6362\u7ed3\u679c\u7684\u865a\u90e8\u3002\n*            n\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u8f93\u5165\u6570\u636e\u7684\u957f\u5ea6\u3002\n*            m\uff1a\u6574\u5f62\u53d8\u91cf\u3002\u8f93\u51fa\u6570\u636e\u7684\u957f\u5ea6\uff0c\u5373\u9891\u7387\u91c7\u6837\u70b9\u6570\u3002\n*            f1\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u53d8\u91cf\u3002\u8d77\u59cb\u6570\u5b57\u9891\u7387\uff0c\u5355\u4f4d\u4e3a Hz-s\u3002\n*            f2\uff1a\u53cc\u7cbe\u5ea6\u5b9e\u578b\u53d8\u91cf\u3002\u7ec8\u6b62\u6570\u5b57\u9891\u7387\u3002\u5355\u4f4d\u4e3a Hz-s\u3002\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670829\u65e5\n* \u6ce8    \u610f\uff1a \n*********************************************************************************************************\/\nvoid CZT(double* xr, double* xi, int n, int m, double f1, double f2)\n{\n  int i, j, n1, n2, len;\n  double e, t, ar, ai, ph, pi, tr, ti, *wr, *wr1, *wi, *wi1;\n  len = n + m - 1;\n  for (j = 1, i = 1; i &lt; 16; i++)\n  {\n    j = 2 * j;\n    if (j &gt;= len)\n    {\n      len = j;\n      break;\n    }\n  }\n  wr = malloc(len * sizeof(double));\n  wi = malloc(len * sizeof(double));\n  wr1 = malloc(len * sizeof(double));\n  wi1 = malloc(len * sizeof(double));\n  pi = 3.14159265358979;\n  ph = 2.0 * pi * (f2 - f1)\/(m - 1);\n  n1 = (n &gt;= m)? n:m;\n  for (i = 0; i &lt; n1; i++)\n  {\n    e = ph * i * i \/ 2.0;\n    wr[i] = cos(e);\n    wi[i] = sin(e);\n    wr1[i] = wr[i];\n    wi1[i] = -wi[i];\n  }\n  n2 = len - n + 1;\n  for (i = m; i &lt; n2; i++)\n  {\n    wr[i] = 0.0;\n    wi[i] = 0.0;\n  }\n  for (i = n2; i &lt; len; i++)\n  {\n    j = len - i;\n    wr[i] = wr[j];\n    wi[i] = wi[j];\n  }\n  FFT(wr, wi, len, 1);\n  ph = -2.0 * pi * f1;\n  for (i = 0; i &lt; n; i++)\n  {\n    e = ph * i;\n    ar = cos(e);\n    ai = sin(e);\n    tr = ar * wr1[i] - ai * wi1[i];\n    ti = ai * wr1[i] + ar * wi1[i];\n    t = xr[i] * tr - xi[i] * ti;\n    xi[i] = xr[i] * ti + xi[i] * tr;\n    xr[i] = t;\n  }\n  for (i = n; i &lt; len; i++)\n  {\n    xr[i] = 0.0;\n    xi[i] = 0.0;\n  }\n  FFT(xr, xi, len, 1);\n  for (i = 0; i &lt; len; i++)\n  {\n    tr = xr[i] * wr[i] - xi[i] * wi[i];\n    xi[i] = xr[i] * wi[i] + xi[i] * wr[i];\n    xr[i] = tr;\n  }\n  FFT(xr, xi, len, -1);\n  for (i = 0; i &lt; m; i++)\n  {\n    tr = xr[i] * wr1[i] - xi[i] * wi1[i];\n    xi[i] = xr[i] * wi1[i] + xi[i] * wr1[i];\n    xr[i] = tr;\n  }\n  free(wr);\n  free(wi);\n  free(wr1);\n  free(wi1);\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u7b97\u6cd5\u7b14\u8bb0<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/posts\/1819"}],"collection":[{"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1819"}],"version-history":[{"count":7,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/posts\/1819\/revisions"}],"predecessor-version":[{"id":1874,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/posts\/1819\/revisions\/1874"}],"wp:attachment":[{"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1819"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1819"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1819"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}