📄 fftpack.cpp
字号:
ipm = ip - 1; arg1 = (real_t) l1 * argh; ch1 = REAL_CONSTANT(1.0); sh1 = REAL_CONSTANT(0.0); dch1 = cos(arg1); dsh1 = sin(arg1); i__2 = ipm; for (j = 1; j <= i__2; ++j) { ch1h = dch1 * ch1 - dsh1 * sh1; sh1 = dch1 * sh1 + dsh1 * ch1; ch1 = ch1h; i__ = is + 2; wa[i__ - 1] = ch1; wa[i__] = sh1; if (ido < 5) { goto L109; } i__3 = ido; for (ii = 5; ii <= i__3; ii += 2) { i__ += 2; wa[i__ - 1] = ch1 * wa[i__ - 3] - sh1 * wa[i__ - 2]; wa[i__] = ch1 * wa[i__ - 2] + sh1 * wa[i__ - 3];/* L108: */ }L109: is += ido;/* L110: */ } l1 = l2;/* L111: */ } return;} /* ezfft1_ *//* Subroutine */ void ezfftb(integer_t *n, real_t *r__, real_t *azero, real_t *a, real_t *b, real_t *wsave, integer_t *ifac){ /* System generated locals */ integer_t i__1; /* Local variables */ integer_t i__, ns2; /* Parameter adjustments */ --ifac; --wsave; --b; --a; --r__; /* Function Body */ if ((i__1 = *n - 2) < 0) { goto L101; } else if (i__1 == 0) { goto L102; } else { goto L103; }L101: r__[1] = *azero; return;L102: r__[1] = *azero + a[1]; r__[2] = *azero - a[1]; return;L103: ns2 = (*n - 1) / 2; i__1 = ns2; for (i__ = 1; i__ <= i__1; ++i__) { r__[i__ * 2] = a[i__] * REAL_CONSTANT(0.5); r__[(i__ << 1) + 1] = b[i__] * REAL_CONSTANT(-0.5);/* L104: */ } r__[1] = *azero; if (*n % 2 == 0) { r__[*n] = a[ns2 + 1]; } rfftb(n, &r__[1], &wsave[*n + 1], &ifac[1]); return;} /* ezfftb_ *//* Subroutine */ void ezfftf(integer_t *n, real_t *r__, real_t *azero, real_t *a, real_t *b, real_t *wsave, integer_t *ifac){ /* System generated locals */ integer_t i__1; /* Local variables */ integer_t i__; real_t cf; integer_t ns2; real_t cfm; integer_t ns2m;/* VERSION 3 JUNE 1979 */ /* Parameter adjustments */ --ifac; --wsave; --b; --a; --r__; /* Function Body */ if ((i__1 = *n - 2) < 0) { goto L101; } else if (i__1 == 0) { goto L102; } else { goto L103; }L101: *azero = r__[1]; return;L102: *azero = (r__[1] + r__[2]) * REAL_CONSTANT(0.5); a[1] = (r__[1] - r__[2]) * REAL_CONSTANT(0.5); return;L103: i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { wsave[i__] = r__[i__];/* L104: */ } rfftf(n, &wsave[1], &wsave[*n + 1], &ifac[1]); cf = 2.0 / (real_t) (*n); cfm = -cf; *azero = cf * 0.5 * wsave[1]; ns2 = (*n + 1) / 2; ns2m = ns2 - 1; i__1 = ns2m; for (i__ = 1; i__ <= i__1; ++i__) { a[i__] = cf * wsave[i__ * 2]; b[i__] = cfm * wsave[(i__ << 1) + 1];/* L105: */ } if (*n % 2 == 1) { return; } a[ns2] = cf * 0.5 * wsave[*n]; b[ns2] = REAL_CONSTANT(0.0); return;} /* ezfftf_ *//* Subroutine */ void ezffti(integer_t *n, real_t *wsave, integer_t *ifac){ /* Parameter adjustments */ --ifac; --wsave; /* Function Body */ if (*n == 1) { return; } ezfft1(n, &wsave[(*n << 1) + 1], &ifac[1]); return;} /* ezffti_ *//* Subroutine */ static void passb(integer_t *nac, integer_t *ido, integer_t *ip, integer_t * l1, integer_t *idl1, real_t *cc, real_t *c1, real_t *c2, real_t *ch, real_t *ch2, real_t *wa){ /* System generated locals */ integer_t ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1, c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, i__1, i__2, i__3; /* Local variables */ integer_t i__, j, k, l, jc, lc, ik, nt, idj, idl, inc, idp; real_t wai, war; integer_t ipp2, idij, idlj, idot, ipph; /* Parameter adjustments */ ch_dim1 = *ido; ch_dim2 = *l1; ch_offset = 1 + ch_dim1 * (1 + ch_dim2); ch -= ch_offset; c1_dim1 = *ido; c1_dim2 = *l1; c1_offset = 1 + c1_dim1 * (1 + c1_dim2); c1 -= c1_offset; cc_dim1 = *ido; cc_dim2 = *ip; cc_offset = 1 + cc_dim1 * (1 + cc_dim2); cc -= cc_offset; ch2_dim1 = *idl1; ch2_offset = 1 + ch2_dim1; ch2 -= ch2_offset; c2_dim1 = *idl1; c2_offset = 1 + c2_dim1; c2 -= c2_offset; --wa; /* Function Body */ idot = *ido / 2; nt = *ip * *idl1; ipp2 = *ip + 2; ipph = (*ip + 1) / 2; idp = *ip * *ido; if (*ido < *l1) { goto L106; } i__1 = ipph; for (j = 2; j <= i__1; ++j) { jc = ipp2 - j; i__2 = *l1; for (k = 1; k <= i__2; ++k) { i__3 = *ido; for (i__ = 1; i__ <= i__3; ++i__) { ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * cc_dim1]; ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * cc_dim1];/* L101: */ }/* L102: */ }/* L103: */ } i__1 = *l1; for (k = 1; k <= i__1; ++k) { i__2 = *ido; for (i__ = 1; i__ <= i__2; ++i__) { ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * cc_dim1];/* L104: */ }/* L105: */ } goto L112;L106: i__1 = ipph; for (j = 2; j <= i__1; ++j) { jc = ipp2 - j; i__2 = *ido; for (i__ = 1; i__ <= i__2; ++i__) { i__3 = *l1; for (k = 1; k <= i__3; ++k) { ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * cc_dim1]; ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * cc_dim1];/* L107: */ }/* L108: */ }/* L109: */ } i__1 = *ido; for (i__ = 1; i__ <= i__1; ++i__) { i__2 = *l1; for (k = 1; k <= i__2; ++k) { ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * cc_dim1];/* L110: */ }/* L111: */ }L112: idl = 2 - *ido; inc = 0; i__1 = ipph; for (l = 2; l <= i__1; ++l) { lc = ipp2 - l; idl += *ido; i__2 = *idl1; for (ik = 1; ik <= i__2; ++ik) { c2[ik + l * c2_dim1] = ch2[ik + ch2_dim1] + wa[idl - 1] * ch2[ik + (ch2_dim1 << 1)]; c2[ik + lc * c2_dim1] = wa[idl] * ch2[ik + *ip * ch2_dim1];/* L113: */ } idlj = idl; inc += *ido; i__2 = ipph; for (j = 3; j <= i__2; ++j) { jc = ipp2 - j; idlj += inc; if (idlj > idp) { idlj -= idp; } war = wa[idlj - 1]; wai = wa[idlj]; i__3 = *idl1; for (ik = 1; ik <= i__3; ++ik) { c2[ik + l * c2_dim1] += war * ch2[ik + j * ch2_dim1]; c2[ik + lc * c2_dim1] += wai * ch2[ik + jc * ch2_dim1];/* L114: */ }/* L115: */ }/* L116: */ } i__1 = ipph; for (j = 2; j <= i__1; ++j) { i__2 = *idl1; for (ik = 1; ik <= i__2; ++ik) { ch2[ik + ch2_dim1] += ch2[ik + j * ch2_dim1];/* L117: */ }/* L118: */ } i__1 = ipph; for (j = 2; j <= i__1; ++j) { jc = ipp2 - j; i__2 = *idl1; for (ik = 2; ik <= i__2; ik += 2) { ch2[ik - 1 + j * ch2_dim1] = c2[ik - 1 + j * c2_dim1] - c2[ik + jc * c2_dim1]; ch2[ik - 1 + jc * ch2_dim1] = c2[ik - 1 + j * c2_dim1] + c2[ik + jc * c2_dim1]; ch2[ik + j * ch2_dim1] = c2[ik + j * c2_dim1] + c2[ik - 1 + jc * c2_dim1]; ch2[ik + jc * ch2_dim1] = c2[ik + j * c2_dim1] - c2[ik - 1 + jc * c2_dim1];/* L119: */ }/* L120: */ } *nac = 1; if (*ido == 2) { return; } *nac = 0; i__1 = *idl1; for (ik = 1; ik <= i__1; ++ik) { c2[ik + c2_dim1] = ch2[ik + ch2_dim1];/* L121: */ } i__1 = *ip; for (j = 2; j <= i__1; ++j) { i__2 = *l1; for (k = 1; k <= i__2; ++k) { c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * ch_dim1 + 1]; c1[(k + j * c1_dim2) * c1_dim1 + 2] = ch[(k + j * ch_dim2) * ch_dim1 + 2];/* L122: */ }/* L123: */ } if (idot > *l1) { goto L127; } idij = 0; i__1 = *ip; for (j = 2; j <= i__1; ++j) { idij += 2; i__2 = *ido; for (i__ = 4; i__ <= i__2; i__ += 2) { idij += 2; i__3 = *l1; for (k = 1; k <= i__3; ++k) { c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[ i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * ch[i__ + (k + j * ch_dim2) * ch_dim1]; c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1];/* L124: */ }/* L125: */ }/* L126: */ } return;L127: idj = 2 - *ido; i__1 = *ip; for (j = 2; j <= i__1; ++j) { idj += *ido; i__2 = *l1; for (k = 1; k <= i__2; ++k) { idij = idj; i__3 = *ido; for (i__ = 4; i__ <= i__3; i__ += 2) { idij += 2; c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[ i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * ch[i__ + (k + j * ch_dim2) * ch_dim1]; c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1];/* L128: */ }/* L129: */ }/* L130: */ } return;} /* passb_ *//* Subroutine */ static void passb2(integer_t *ido, integer_t *l1, real_t *cc, real_t *ch, real_t *wa1){ /* System generated locals */ integer_t cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2; /* Local variables */ integer_t i__, k; real_t ti2, tr2; /* Parameter adjustments */ ch_dim1 = *ido; ch_dim2 = *l1; ch_offset = 1 + ch_dim1 * (1 + ch_dim2); ch -= ch_offset; cc_dim1 = *ido; cc_offset = 1 + cc_dim1 * 3; cc -= cc_offset; --wa1; /* Function Body */ if (*ido > 2) { goto L102; } i__1 = *l1; for (k = 1; k <= i__1; ++k) { ch[(k + ch_dim2) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] + cc[((k << 1) + 2) * cc_dim1 + 1]; ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] - cc[((k << 1) + 2) * cc_dim1 + 1]; ch[(k + ch_dim2) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 + 2] + cc[((k << 1) + 2) * cc_dim1 + 2]; ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 + 2] - cc[((k << 1) + 2) * cc_dim1 + 2];/* L101: */ } return;L102: i__1 = *l1; for (k = 1; k <= i__1; ++k) { i__2 = *ido; for (i__ = 2; i__ <= i__2; i__ += 2) { ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] + cc[i__ - 1 + ((k << 1) + 2) * cc_dim1]; tr2 = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] - cc[i__ - 1 + ((k << 1) + 2) * cc_dim1]; ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + ((k << 1) + 1) * cc_dim1] + cc[i__ + ((k << 1) + 2) * cc_dim1]; ti2 = cc[i__ + ((k << 1) + 1) * cc_dim1] - cc[i__ + ((k << 1) + 2) * cc_dim1]; ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ti2 + wa1[i__] * tr2; ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * tr2 - wa1[i__] * ti2;/* L103: */ }/* L104: */ } return;} /* passb2_ *//* Subroutine */ static void passb3(integer_t *ido, integer_t *l1, real_t *cc, real_t *ch, real_t *wa1, real_t *wa2){ /* Initialized data */ static real_t taur = REAL_CONSTANT(-0.5); static real_t taui = REAL_CONSTANT(0.8660254037844386467637231707529361834710262690519031402790348975); /* System generated locals */ integer_t cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2; /* Local variables */ integer_t i__, k; real_t ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2; /* Parameter adjustments */ ch_dim1 = *ido; ch_dim2 = *l1; ch_offset = 1 + ch_dim1 * (1 + ch_dim2); ch -= ch_offset;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -