📄 fftxfj.doc
字号:
wdr = cos((k+1)*h),
wdi = sin((k+1)*h)
偵懳墳偡傞丏寁嶼検偼丆嶰妏娭悢堦夞偵偮偒忔嶼堦夞丆壛尭嶼堦夞
偱偁傞丏懠偺慟壔幃偲偟偰Chebyshev懡崁幃偺慟壔幃:
cos((k+1)*h) = (2*cos(h)) * cos(k*h) - cos((k-1)*h)
偑峫偊傜傟傞偑丆偙偺傑傑偱偼惛搙偑埆偔寘棊偪杊巭梡偺曄宍傪偟
側偗傟偽巊偊側偄丏
丂價僢僩斀揮暲傋懼偊偼埲壓偺曽朄偱峴偆丏k~ 傪 k 偺價僢僩斀揮
偲偡傞偲
2*j 偺價僢僩斀揮偼 (2*j)~,
n-1 - 2*j 偺價僢僩斀揮偼 n-1 - (2*j)~,
2*j + 1 偺價僢僩斀揮偼 n/2 + (2*j)~,
n-1 - (2*j + 1) 偺價僢僩斀揮偼 n-1 - (n/2 + (2*j)~)
偲側傝丆 0<=j<n/4 偺斖埻偱偡傋偰偺價僢僩斀揮偺懳偑偱偒傞(價
僢僩斀揮寁嶼傪 1/4 偵尭傜偣傞)丏曄悢偺岎姺偼俀夞廳暋偡傞偺偱
塃偺崁偑嵍偺崁傛傝傕戝偒偔側傞応崌偺懳偵偮偄偰偺傒岎姺偡傞丏
<Sande-Tukey朄奣棯(偍傑偗)>
傑偢丆挿偝 n 偺棧嶶Fourier曄姺:
X[k] = 儼_j=0^n-1 x[j] * W(n)^(j*k), 0<=k<n,
W(n) = exp(2*兾*i/n)
傪慺捈偵寁嶼偡傞応崌傪峫偊傑偡丏偙偺応崌 X[0] 偐傜 X[n-1]
傑偱偺奺崁偺寁嶼偵 n 夞偺忔嶼偑昁梫側偨傔丆慡懱偱 n^2 夞
偺忔嶼偑昁梫偵側傝傑偡丏偟偐偟丆彮偟峫偊偰傒偰偔偩偝偄丏
挿偝 n 偺棧嶶Fourier曄姺偼丆師偺擇偮偺丆挿偝 n/2 偺棧嶶
Fourier曄姺:
X[2*k] = 儼_j=0^n/2-1
(x[j]+x[n/2+j]) * W(n/2)^(j*k),
X[2*k+1] = 儼_j=0^n/2-1
W(n)^j*(x[j]-x[n/2+j]) * W(n/2)^(j*k),
0<=k<n/2
偵暘夝偱偒傞偙偲偑傢偐傝傑偡丏挿偝 n/2 偺棧嶶Fourier曄姺
偼 n^2/4 夞偺忔嶼偱幚峴偱偒傞偺偱丆偙偺暘夝偵傛傝丆寁嶼
検偼栺敿暘偵尭傝傑偡丏偝傜偵丆偙偺暘夝傪 2 夞, 3 夞,...
偲孞傝曉偣偽丆寁嶼検偼栺 1/4, 1/8,... 偲寖尭偟傑偡丏偙傟
偑Sande-Tukey朄偵傛傞FFT偺婎杮揑側峫偊曽偱偡(Winograd偺
DFT -暥專嶲徠- 偺峫偊曽偼偙傟偲偼彮偟堎側傞偺偱拲堄)丏
Sande-Tukey朄偱偼丆偙偺暘夝(娫堷偒)傪挿偝 1 偺棧嶶Fourier
曄姺(柍曄姺)偵側傞傑偱孞傝曉偟丆n^2 偺僆乕僟乕偺寁嶼傪偡
傋偰攔彍偟傑偡丏偙偺偲偒偺寁嶼検偼 n/2 夞偺 x[j]+x[n/2+j]
偲 W(n)^j*(x[j]-x[n/2+j]) 偺寁嶼(偄傢備傞僶僞僼儔僀墘嶼)
傪 log(n) 夞峴偆掱搙(偡側傢偪 n*log(n) 偺僆乕僟乕)偵尭彮
偟傑偡丏
僨乕僞傪忋彂偒偡傞応崌 x[j], x[n/2+j] 偵 X[2*j], X[2*j+1]
傪奿擺偡傞偨傔丆1 偮椬傝崌偆僨乕僞偑 n/2 屄椬傝崌偆僨乕
僞偵暲傋懼偊傜傟傑偡(偡側傢偪揧帤偺嵟弶偺價僢僩偲嵟屻偺
價僢僩偲傪岎姺偟偨弴偵暲傃傑偡)丏偦偺偨傔丆僨乕僞偺揧帤
偺價僢僩斀揮暲傋懼偊偑嵟屻偵昁梫偵側傝傑偡丏
偪側傒偵Cooley-Tukey朄偱偺娫堷偒(帪娫娫堷偒)偼埲壓偺傛偆
偵偟傑偡丏
X[k] = 儼_j=0^n/2-1 x[2*j] * W(n/2)^(j*k)
+ W(n)^k*儼_j=0^n/2-1 x[2*j+1] * W(n/2)^(j*k),
X[n/2+k] = 儼_j=0^n/2-1 x[2*j] * W(n/2)^(j*k)
- W(n)^k*儼_j=0^n/2-1 x[2*j+1] * W(n/2)^(j*k),
0<=k<n/2
堦斒偵Sande-Tukey朄偵傛傞婎悢 L 偺娫堷偒偼埲壓偺傛偆偵側
傝傑偡丏
X[L*k] = 儼_j=0^n/L-1
(x[j]+x[n/L+j]+x[2*n/L+j]+...
+x[(L-1)*n/L+j]) * W(n/L)^(j*k),
X[L*k+1] = 儼_j=0^n/L-1 W(n)^j*
(x[j]+W(L)*x[n/L+j]+W(L)^2*x[2*n/L+j]+...
+W(L)^(L-1)*x[(L-1)*n/L+j]) * W(n/L)^(j*k),
X[L*k+2] = 儼_j=0^n/L-1 W(n)^(2*j)*
(x[j]+W(L)^2*x[n/L+j]+W(L)^4*x[2*n/L+j]+...
+W(L)^(2*L-2)*x[(L-1)*n/L+j]) * W(n/L)^(j*k),
...
0<=k<n/L
偙偺暘夝傪 log_L(n) 夞孞傝曉偡偲丆忔嶼夞悢偼 log_L(n)*(
(L-1)+(挿偝L偺棧嶶Fourier曄姺偺忔嶼悢))*n/L 偲側傞偙偲偑
傢偐傝傑偡丏偟偨偑偭偰丆婎悢 4 偺嶼朄偼丆婎悢 2 偺偵斾傋
偰忔嶼夞悢偑 3/4 偵尭彮偟丆偝傜偵丆婎悢 8 偱偼 2/3 偵丆
婎悢 16 偱偼 5/8 偵尭彮偟傑偡丏
[fft4f.*偺応崌]
丂婎悢 4 偺廃攇悢娫堷偒FFT傪梡偄傞丏偨偩偟丆撪懁偺儖乕僾偱儊
儌儕傾僋僙僗傪楢懕偵偡傞偨傔丆攝楍偺揧帤傪價僢僩斀揮偡傞丏偦
偺偨傔丆嶰妏娭悢昞 w 偑價僢僩斀揮偟丆僨乕僞偺價僢僩斀揮偺弴
彉偑媡(嵟屻偑僉儍儞僙儖偝傟嵟弶偵晅壛)偵側傞丏n 偑 4 偺儀僉
忔偱妱傝愗傟側偄偲偒偼丆嵟屻偵婎悢 2 偺僶僞僼儔僀墘嶼傪晅偗
懌偡丏偙偺応崌丆4 恑悢偺儚乕僪斀揮偲 2 恑悢偺價僢僩斀揮偲偺
崿崌傪旔偗傞偨傔丆婎悢 4 偺僶僞僼儔僀墘嶼偺擇斣栚偲嶰斣栚偺
擖椡傪擖傟姺偊丆忢偵價僢僩斀揮偵側傞傛偆偵偡傞丏
丂嶰妏娭悢偼攞妏傑偱偼昞傪堷偒丆嶰攞妏偼偦偺応偱壛朄掕棟傛傝
寁嶼偡傞丏
丂價僢僩斀揮暲傋懼偊偼埲壓偺曽朄偱峴偆丏k~ 傪 k 偺價僢僩斀揮
偲偡傞偲
m = sqrt(n) 偑惍悢偺偲偒
j~ + k 偺價僢僩斀揮偼 k~ + j
m = sqrt(n/2) 偑惍悢偺偲偒
j~ + k 偺價僢僩斀揮偼 k~ + j,
j~ + m + k 偺價僢僩斀揮偼 k~ + m + j
偲側傝丆 0<=j<m, 0<=k<m 偺斖埻偱偡傋偰偺價僢僩斀揮偺懳偑偱偒
傞(價僢僩斀揮寁嶼傪 1/sqrt(n) 偵尭傜偣傞)丏曄悢偺岎姺偼俀夞
廳暋偡傞偺偱 j<k 偲側傞懳偵偮偄偰偺傒岎姺偡傞丏
仧rdft偵偮偄偰
丂cdft偵埲壓偺僶僞僼儔僀墘嶼傪堦抜晅壛偡傞曽朄傪梡偄傞丏弴曄姺:
A[k] = 儼_j=0^n-1 a[j]*W(n)^(j*k), 0<=k<=n/2,
W(n) = exp(2*兾*i/n)
傪媮傔傞応崌丆
x[j] = a[2*j] + i*a[2*j+1], 0<=j<n/2
偲偟偰挿偝 n/2 偺暋慺棧嶶Fourier曄姺:
X[k] = 儼_j=0^n/2-1 x[j] * W(n/2)^(j*k), 0<=k<n
傪屇傃弌偡丏寢壥: A[k] 偼幃:
A[k] = X[k] - (1+i*W(n)^k)/2 * (X[k]-conjg(X[n/2-k])),
A[n/2-k] = X[n/2-k] + (1+i*W(n)^k)/2 * (X[k]-conjg(X[n/2-k])),
0<=k<=n/2 (拲: conjg() 偼暋慺嫟栶, X[n/2]=X[0] 偲偍偔)
偱媮傔傞偙偲偑偱偒傞丏媡曄姺偼偙偺寁嶼傪媡曽岦偵峴偆丏
丂懠偺寁嶼朄偵丆幚悢僨乕僞偺Fourier曄姺偺暋慺嫟栶懳徧惈傪偆傑偔
棙梡偟偰丆暋慺FFT偺僶僞僼儔僀墘嶼偺傒偱寁嶼偡傞曽朄偑偁傞丏偙偺
曽朄偼丆弴曄姺傪帪娫娫堷偒墘嶼丆媡曄姺傪廃攇悢娫堷偒墘嶼偱峴偆偺
偱丆擇偮偺儖乕僠儞偑昁梫偵側傞丏偙偺曽朄偼丆儊儌儕傾僋僙僗偑暋嶨
偵側傞偨傔丆幚峴帪娫偑抶偔側傞偙偲偑偁傞丏
丂傕偆堦偮偺寁嶼朄偵(偁傑傝抦傜傟偰側偄丠)丆嶰妏娭悢偺揧帤偑 1/2
偢傟偨棧嶶Fourier曄姺(偄傢備傞棧嶶僐僒僀儞/僒僀儞曄姺)傪嵞婣揑偵
梡偄偰寁嶼偡傞曽朄偑偁傞(dfct/dfst嶲徠)丏棧嶶僐僒僀儞/僒僀儞曄姺
偼丆旕忢偵懳徧惈偑傛偄偨傔丆暋慺FFT偺僶僞僼儔僀墘嶼偺傒偱寁嶼偡
傞応崌丆儊儌儕傾僋僙僗偑暋嶨偵側傞偙偲偼側偄丏
仧ddct偵偮偄偰
丂rdft偵埲壓偺墘嶼傪晅壛偡傞曽朄傪梡偄傞丏媡曄姺:
C[k] = 儼_j=0^n-1 a[j]*cos(兾*j*(k+1/2)/n), 0<=k<n
傪媮傔傞応崌丆
r[0] = a[0],
r[j] = Re((a[j] - i*a[n-j]) * W(4*n)^j*(1+i)/2),
r[n-j] = Im((a[j] - i*a[n-j]) * W(4*n)^j*(1+i)/2),
0<j<=n/2
偲偟偰挿偝 n 偺幚棧嶶Fourier曄姺:
A[k] = 儼_j=0^n-1 r[j]*W(n)^(j*k), 0<=k<=n/2,
W(n) = exp(2*兾*i/n)
傪屇傃弌偡丏寢壥: C[k] 偼幃:
C[2*k] = Re(A[k] * (1-i)),
C[2*k-1] = -Im(A[k] * (1-i))
偱媮傔傞偙偲偑偱偒傞丏弴曄姺偼偙偺寁嶼傪媡曽岦偵峴偆丏
丂懠偺寁嶼朄偵丆懳徧惈傪偆傑偔棙梡偟偰丆暋慺FFT偺僶僞僼儔僀墘嶼
偺傒偱寁嶼偡傞曽朄偑偁傞(暥專嶲徠)丏
仧ddst偵偮偄偰
丂rdft偵埲壓偺墘嶼傪晅壛偡傞曽朄傪梡偄傞丏媡曄姺:
S[k] = 儼_j=1^n A[j]*sin(兾*j*(k+1/2)/n), 0<=k<n
傪媮傔傞応崌丆
r[0] = a[0],
r[j] = Im((a[n-j] - i*a[j]) * W(4*n)^j*(1+i)/2),
r[n-j] = Re((a[n-j] - i*a[j]) * W(4*n)^j*(1+i)/2),
0<j<=n/2
偲偟偰挿偝 n 偺幚棧嶶Fourier曄姺:
A[k] = 儼_j=0^n-1 r[j]*W(n)^(j*k), 0<=k<=n/2,
W(n) = exp(2*兾*i/n)
傪屇傃弌偡丏寢壥: S[k] 偼幃:
S[2*k] = Re(A[k] * (1+i)),
S[2*k-1] = -Im(A[k] * (1+i))
偱媮傔傞偙偲偑偱偒傞丏弴曄姺偼偙偺寁嶼傪媡曽岦偵峴偆丏
丂懠偺寁嶼朄偵丆懳徧惈傪偆傑偔棙梡偟偰丆暋慺FFT偺僶僞僼儔僀墘嶼
偺傒偱寁嶼偡傞曽朄偑偁傞(暥專嶲徠)丏
仧dfct偵偮偄偰
丂娫堷偒偵傛傝ddct偺寁嶼偵暘夝偡傞曽朄傪梡偄傞丏曄姺:
C[k] = 儼_j=0^n a[j]*cos(兾*j*k/n), 0<=k<=n
偼丆挿偝 n/2 偺ddct偲挿偝 n/2 偺dfct:
C[2*k] = 儼'_j=0^n/2 (a[j]+a[n-j])*cos(兾*j*k/(n/2)),
C[2*k+1] = 儼_j=0^n/2-1 (a[j]-a[n-j])*cos(兾*j*(k+1/2)/(n/2))
偲偵暘夝偱偒傞(儼' 偼嵟屻偺崁傪 1/2 攞偡傞)丏偙偺暘夝傪ddct偺挿
偝偑 1 偵側傞傑偱孞傝曉偡丏
丂僨乕僞偺暲傋懼偊偼丆fft2f.*偺応崌偼價僢僩斀揮暲傋懼偊傪梡偄丆
fft4f.*偺応崌偼嶌嬈梡攝楍傪梡偄傞丏
仧dfst偵偮偄偰
丂娫堷偒偵傛傝ddst偺寁嶼偵暘夝偡傞曽朄傪梡偄傞丏曄姺:
S[k] = 儼_j=1^n-1 a[j]*sin(兾*j*k/n), 0<k<n
偼丆挿偝 n/2 偺ddst偲挿偝 n/2 偺dfst:
S[2*k] = 儼_j=1^n/2-1 (a[j]-a[n-j])*sin(兾*j*k/(n/2)),
S[2*k+1] = 儼'_j=1^n/2 (a[j]+a[n-j])*sin(兾*j*(k+1/2)/(n/2))
偲偵暘夝偱偒傞(儼' 偼嵟屻偺崁傪 1/2 攞偡傞)丏偙偺暘夝傪ddst偺挿
偝偑 1 偵側傞傑偱孞傝曉偡丏
丂僨乕僞偺暲傋懼偊偼丆fft2f.*偺応崌偼價僢僩斀揮暲傋懼偊傪梡偄丆
fft4f.*偺応崌偼嶌嬈梡攝楍傪梡偄傞丏
亂偦偺懠亃
仧嶲峫暥專
怷惓晲,柤庢椇,捁嫃払惗: 悢抣寁嶼, 娾攇島嵗忣曬壢妛18, 娾攇彂揦,
1982
---- 暋慺FFT偺僶僞僼儔僀墘嶼傪梡偄傞丆崅懍棧嶶僐僒僀儞曄姺偺
傾儖僑儕僘儉偑宖嵹偝傟偰偄傞 ----
Henri J. Nussbaumer: Fast Fourier Transform and Convolution
Algorithms, Springer Verlag, 1982
---- 捠忢偺FFT傛傝崅懍側丆慺悢暘妱偵傛傞FFT傗丆Winograd嶼朄
偵傛傞DFT偺傾儖僑儕僘儉偑宖嵹偝傟偰偄傞 ----
仧挊嶌/楢棈愭
戝塝戱嵠 (email: ooura@mmm.t.u-tokyo.ac.jp)
仧曇廤棜楌
...
1995擭12寧 : 僒僀僘傪弅彫偟丆斈梡斉傪嶌惉丏
1996擭3寧 : 斈梡斉偺巇條傪曄峏丏
1996擭6寧 : 嶰妏娭悢昞偺寁嶼朄傪曄峏(惛搙偑椙偔側偭偨)丏
1996擭9寧 : 僪僉儏儊儞僩偺廋惓丏
1997擭2寧 : 僶僞僼儔僀儖乕僾偺曄峏(彮偟懍偔側偭偨偐傕?)丏
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -