感冒了吃什么水果比较好| 非油炸是什么意思| 为什么医者不自医| 老蒯是什么意思| 鱼缸摆放什么位置最佳| 一清二白是什么意思| 榛子是什么树的果实| 看什么| 八月二十五是什么星座| 夏天吃什么蔬菜好| 多动症看什么科室| 盗汗是什么原因| doosan挖掘机是什么牌子| 野生铁皮石斛什么价| 肾积水是什么意思| 阿弥陀佛是什么意思| 我好想你是什么歌| 什么是抽动症| 女人体检都查什么项目| 喝什么茶养肝护肝| 晨僵是什么症状| 河南的特产是什么| aww是什么意思| 炼乳可以做什么美食| 比翼双飞是什么意思| 上海话小赤佬是什么意思| 什么叫调剂| 因果业力是什么意思| 有什么黄色网站| 发泥和发蜡有什么区别| 上发条是什么意思| 你的生命有什么可能| 鼠和什么属相最配对| 三唑酮主治什么病害| 三门代表什么生肖| 得失是什么意思| 白细胞低是什么原因| 四维是检查什么| 公开课是什么意思| opec是什么意思| 生殖疱疹吃什么药不复发| 他们吃什么| 静脉曲张吃什么药好| 色字头上一把刀什么意思| 盆腔肿物是什么意思| 甲状腺结节是什么原因引起的| 动脉导管未闭对宝宝有什么影响| 做包子用什么面粉| 铁树是什么生肖| 什么是更年期| 不含而立是什么意思| 克汀病是什么病| 土土心念什么| 肝炎五项检查是什么| 梭织面料是什么面料| 东北有什么好玩的景点| 紫苏泡水喝有什么好处| 用什么梳子梳头发最好| 不可一世是什么意思| 客套是什么意思| 老鼠最怕什么气味驱赶| 汽车五行属什么| 面基是什么意思啊| 吃什么药头脑立刻清醒| 咽炎有什么症状| 流氓兔什么意思| 八百里加急是什么意思| 湿气太重吃什么药最好| 合成碳硅石是什么| 梦见佛祖是什么意思| 公主抱是什么意思| 鼻塞吃什么药| 身上出汗多是什么原因| 棚户区改造和拆迁有什么区别| 青金石蓝是什么颜色| 阴道骚痒是什么原因| 彘是什么意思| 睡觉为什么会磨牙| 境字五行属什么| 天王星是什么颜色| 料酒可以用什么代替| 菌血症是什么病| 早筛是检查什么项目| 贼头贼脑是什么生肖| 人体缺少蛋白质会有什么症状| 唐僧属什么生肖| 颇丰是什么意思| 重度脂肪肝吃什么药| 换床有什么讲究| 醋酸是什么面料| 千叶豆腐是什么做的| 吽是什么意思| 身份证x代表什么意思| 百香果不能和什么一起吃| 头晕目眩是什么意思| 互诉衷肠是什么意思| 蚕屎做枕头有什么好处| hpv16是什么意思| 乌鸡炖什么好吃| asa是什么意思| 什么水果能马上通便| 虚有其表的意思是什么| 胃灼热烧心吃什么药| 书中自有颜如玉是什么意思| le是什么| 蓝营绿营什么意思| 什么是化疗和放疗| 肚子疼是什么原因一阵一阵的| 白细胞偏低是什么原因| 手脚发热吃什么药| 十二生肖叫老大是什么生肖| 福州有什么好吃的| 什么是钾肥| 耿直什么意思| 入睡难是什么原因| 藏青色t恤配什么颜色裤子| 宝宝尿少是什么原因| 心电图窦性心律是什么意思| 腺样体挂什么科| 高粱是什么| 一个月小猫吃什么| 什么叫空调病| 右眼一直跳是什么原因| 狸猫换太子什么意思| 做美甲师容易得什么病| 贼头贼脑是什么生肖| 睡眠障碍是什么原因引起的| 跳票什么意思| 深度睡眠是什么状态| 韩红是什么民族| 羊肉水饺配什么菜好吃| 十月7号是什么星座| 魂牵梦萦的意思是什么| 成人高考是什么| 甲减长期服用优甲乐有什么危害| 岑读什么| 烫伤抹什么药膏| 失眠用什么药好| 梦见吃西瓜是什么征兆| 什么的母鸡| 什么鱼不会游泳| 神经疼痛吃什么药| 吃什么主食减肥最快| 长闭口是什么原因造成的| 姑姑的弟弟叫什么| 美色是什么意思| 摇篮是什么意思| 65年属什么| na医学上是什么意思| 1972属什么| 坐飞机什么不能带| 为什么会牙痛| dob值阳性是什么意思| 烫伤用什么药膏好| 小葫芦项链是什么牌子| 荼什么意思| 手术室为什么在三楼| 柔式按摩是什么意思| 尼古拉斯是什么意思| 谷草转氨酶偏高是什么意思| 老公梦见老婆出轨是什么意思| 淋巴细胞比率低是什么意思| 什么样的人容易得心梗| 抬头纹用什么护肤品可以去除| 愈合是什么意思| 10月是什么月| 右手指发麻是什么原因| 早上起来嘴巴苦是什么原因| b群链球菌是什么意思| hc是胎儿的什么意思| 腹胀吃什么药最有效| 西边五行属什么| 九九重阳节是什么意思| 什么是生物制剂药| 梅子什么时候成熟| 梦见摘瓜是什么意思啊| 阴毛的作用是什么| 籍贯填写什么| 薏米是什么米| 福五行属性是什么| animal什么意思| 明天叫什么日子| 越什么越什么的词语| 尿酸偏低是什么原因| 梦见别人家盖房子是什么意思| o血型的人有什么特点| 1936年是什么年| 猎奇是什么意思| 什么原因会怀上葡萄胎| 生姜水洗头有什么好处| 为什么尽量抽混合型烟| 水蛭是什么| 头晕是什么症状引起的| 子欲养而亲不待什么意思| 成熟是什么意思| 乳房挂什么科| 脾胃不好吃什么水果| 印迹杂交技术检查什么| 胃泌素释放肽前体高是什么原因| 安宫丸什么时候吃效果是最佳的| 孕期血糖高有什么症状| 肺挂什么科| 阴阳屏是什么意思| 草酸是什么| 双肺纹理增强是什么意思| 气质是什么| 吃什么降三高最好| 亥时右眼跳是什么预兆| 96年属什么命| move什么意思| 樱桃是什么季节的水果| 劲旅是什么意思| 豹子是什么牌子| 店小二是什么意思| 再生障碍性贫血是什么病| 菊花是什么季节开的| 福瑞祥和是什么意思| 02年的属什么| 益生菌有什么功效| A型血为什么是完美血型| 男怕穿靴女怕戴帽什么意思| 转氨酶异常是什么意思| 低头头晕是什么原因| 秋天有什么植物| 武汉都有什么区| 尿分叉是什么原因| 素毛肚是什么做的| 排骨炖什么| 宝宝什么时候开始说话| 樟脑丸是干什么的| 做梦流产了是什么意思| 三个羊念什么| 涧是什么意思| 流汗太多对身体有什么危害| 肌张力高有什么表现| 95年什么生肖| 结甲可能是什么意思| vae是什么意思| approval是什么意思| 糖类抗原125偏高是什么原因| 孩子a型血父母什么血型| 肠道为什么会长息肉| 双子座和什么座最配| 霍山黄芽属于什么茶| ofs是什么意思| 大便溏薄是什么意思| 理发师代表什么生肖| 桂林山水下一句是什么| 皮肤痒是什么原因| 三点水一个四读什么| 脐下三寸是什么地方| 减肥可以吃什么零食| 银河是什么| 欣喜若狂的近义词是什么| 中华田园犬为什么禁养| 深耕是什么意思| 梦见烙饼是什么意思| 九月初三是什么星座| 吃什么能缓解便秘| 淋巴细胞计数偏低是什么原因| 梦见老公出轨预示什么| 脱发严重应该去医院挂什么科| 女儿茶属于什么茶| 什么叫肿瘤| 百度Jump to content

新总部迁入“世界登机口”!车建新要切70...

From Wikipedia, the free encyclopedia
百度 从进入新疆开始,它的故事就会一点一点的印入你的脑海,它的美丽,它的巍峨,都会让你忍不住想要拥抱它。

The Cooley–Tukey algorithm, named after J. W. Cooley and John Tukey, is the most common fast Fourier transform (FFT) algorithm. It re-expresses the discrete Fourier transform (DFT) of an arbitrary composite size in terms of N1 smaller DFTs of sizes N2, recursively, to reduce the computation time to O(N log N) for highly composite N (smooth numbers). Because of the algorithm's importance, specific variants and implementation styles have become known by their own names, as described below.

Because the Cooley–Tukey algorithm breaks the DFT into smaller DFTs, it can be combined arbitrarily with any other algorithm for the DFT. For example, Rader's or Bluestein's algorithm can be used to handle large prime factors that cannot be decomposed by Cooley–Tukey, or the prime-factor algorithm can be exploited for greater efficiency in separating out relatively prime factors.

The algorithm, along with its recursive application, was invented by Carl Friedrich Gauss. Cooley and Tukey independently rediscovered and popularized it 160 years later.

History

[edit]

This algorithm, including its recursive application, was invented around 1805 by Carl Friedrich Gauss, who used it to interpolate the trajectories of the asteroids Pallas and Juno, but his work was not widely recognized (being published only posthumously and in Neo-Latin).[1][2] Gauss did not analyze the asymptotic computational time, however. Various limited forms were also rediscovered several times throughout the 19th and early 20th centuries.[2] FFTs became popular after James Cooley of IBM and John Tukey of Princeton published a paper in 1965 reinventing[2] the algorithm and describing how to perform it conveniently on a computer.[3]

Tukey reportedly came up with the idea during a meeting of President Kennedy's Science Advisory Committee discussing ways to detect nuclear-weapon tests in the Soviet Union by employing seismometers located outside the country. These sensors would generate seismological time series. However, analysis of this data would require fast algorithms for computing DFTs due to the number of sensors and length of time. This task was critical for the ratification of the proposed nuclear test ban so that any violations could be detected without need to visit Soviet facilities.[4][5] Another participant at that meeting, Richard Garwin of IBM, recognized the potential of the method and put Tukey in touch with Cooley. However, Garwin made sure that Cooley did not know the original purpose. Instead, Cooley was told that this was needed to determine periodicities of the spin orientations in a 3-D crystal of helium-3. Cooley and Tukey subsequently published their joint paper, and wide adoption quickly followed due to the simultaneous development of Analog-to-digital converters capable of sampling at rates up to 300 kHz.

The fact that Gauss had described the same algorithm (albeit without analyzing its asymptotic cost) was not realized until several years after Cooley and Tukey's 1965 paper.[2] Their paper cited as inspiration only the work by I. J. Good on what is now called the prime-factor FFT algorithm (PFA);[3] although Good's algorithm was initially thought to be equivalent to the Cooley–Tukey algorithm, it was quickly realized that PFA is a quite different algorithm (working only for sizes that have relatively prime factors and relying on the Chinese remainder theorem, unlike the support for any composite size in Cooley–Tukey).[6]

The radix-2 DIT case

[edit]

A radix-2 decimation-in-time (DIT) FFT is the simplest and most common form of the Cooley–Tukey algorithm, although highly optimized Cooley–Tukey implementations typically use other forms of the algorithm as described below. Radix-2 DIT divides a DFT of size N into two interleaved DFTs (hence the name "radix-2") of size N/2 with each recursive stage.

The discrete Fourier transform (DFT) is defined by the formula:

where is an integer ranging from 0 to .

Radix-2 DIT first computes the DFTs of the even-indexed inputs and of the odd-indexed inputs , and then combines those two results to produce the DFT of the whole sequence. This idea can then be performed recursively to reduce the overall runtime to O(N log N). This simplified form assumes that N is a power of two; since the number of sample points N can usually be chosen freely by the application (e.g. by changing the sample rate or window, zero-padding, etcetera), this is often not an important restriction.

The radix-2 DIT algorithm rearranges the DFT of the function into two parts: a sum over the even-numbered indices and a sum over the odd-numbered indices :

One can factor a common multiplier out of the second sum, as shown in the equation below. It is then clear that the two sums are the DFT of the even-indexed part and the DFT of odd-indexed part of the function . Denote the DFT of the Even-indexed inputs by and the DFT of the Odd-indexed inputs by and we obtain:

Note that the equalities hold for , but the crux is that and are calculated in this way for only. Thanks to the periodicity of the complex exponential, is also obtained from and :

We can rewrite and as:

This result, expressing the DFT of length N recursively in terms of two DFTs of size N/2, is the core of the radix-2 DIT fast Fourier transform. The algorithm gains its speed by re-using the results of intermediate computations to compute multiple DFT outputs. Note that final outputs are obtained by a +/? combination of and , which is simply a size-2 DFT (sometimes called a butterfly in this context); when this is generalized to larger radices below, the size-2 DFT is replaced by a larger DFT (which itself can be evaluated with an FFT).

Data flow diagram for N=8: a decimation-in-time radix-2 FFT breaks a length-N DFT into two length-N/2 DFTs followed by a combining stage consisting of N/2 size-2 DFTs called "butterfly" operations (so called because of the shape of the data-flow diagrams).

This process is an example of the general technique of divide and conquer algorithms; in many conventional implementations, however, the explicit recursion is avoided, and instead one traverses the computational tree in breadth-first fashion.

The above re-expression of a size-N DFT as two size-N/2 DFTs is sometimes called the DanielsonLanczos lemma, since the identity was noted by those two authors in 1942[7] (influenced by Runge's 1903 work[2]). They applied their lemma in a "backwards" recursive fashion, repeatedly doubling the DFT size until the transform spectrum converged (although they apparently didn't realize the linearithmic [i.e., order N log N] asymptotic complexity they had achieved). The Danielson–Lanczos work predated widespread availability of mechanical or electronic computers and required manual calculation (possibly with mechanical aids such as adding machines); they reported a computation time of 140 minutes for a size-64 DFT operating on real inputs to 3–5 significant digits. Cooley and Tukey's 1965 paper reported a running time of 0.02 minutes for a size-2048 complex DFT on an IBM 7094 (probably in 36-bit single precision, ~8 digits).[3] Rescaling the time by the number of operations, this corresponds roughly to a speedup factor of around 800,000. (To put the time for the hand calculation in perspective, 140 minutes for size 64 corresponds to an average of at most 16 seconds per floating-point operation, around 20% of which are multiplications.)

Pseudocode

[edit]

In pseudocode, the below procedure could be written:[8]

X0,...,N?1ditfft2(x, N, s):             DFT of (x0, xs, x2s, ..., x(N-1)s):
    if N = 1 then
        X0x0                                     trivial size-1 DFT base case
    else
        X0,...,N/2?1ditfft2(x, N/2, 2s)             DFT of (x0, x2s, x4s, ..., x(N-2)s)
        XN/2,...,N?1ditfft2(x+s, N/2, 2s)           DFT of (xs, xs+2s, xs+4s, ..., x(N-1)s)
        for k = 0 to (N/2)-1 do                      combine DFTs of two halves:
            p ← Xk
            q ← exp(?2πi/N k) Xk+N/2
            Xk ← p + q 
            Xk+N/2 ← p ? q
        end for
    end if

Here, ditfft2(x,N,1), computes X=DFT(x) out-of-place by a radix-2 DIT FFT, where N is an integer power of 2 and s=1 is the stride of the input x array. x+s denotes the array starting with xs.

(The results are in the correct order in X and no further bit-reversal permutation is required; the often-mentioned necessity of a separate bit-reversal stage only arises for certain in-place algorithms, as described below.)

High-performance FFT implementations make many modifications to the implementation of such an algorithm compared to this simple pseudocode. For example, one can use a larger base case than N=1 to amortize the overhead of recursion, the twiddle factors can be precomputed, and larger radices are often used for cache reasons; these and other optimizations together can improve the performance by an order of magnitude or more.[8] (In many textbook implementations the depth-first recursion is eliminated in favor of a nonrecursive breadth-first approach, although depth-first recursion has been argued to have better memory locality.[8][9]) Several of these ideas are described in further detail below.

Idea

[edit]
The basic step of the Cooley–Tukey FFT for general factorizations can be viewed as re-interpreting a 1d DFT as something like a 2d DFT. The 1d input array of length N = N1N2 is reinterpreted as a 2d N1×N2 matrix stored in column-major order. One performs smaller 1d DFTs along the N2 direction (the non-contiguous direction), then multiplies by phase factors (twiddle factors), and finally performs 1d DFTs along the N1 direction. The transposition step can be performed in the middle, as shown here, or at the beginning or end. This is done recursively for the smaller transforms.

More generally, Cooley–Tukey algorithms recursively re-express a DFT of a composite size N = N1N2 as:[10]

  1. Perform N1 DFTs of size N2.
  2. Multiply by complex roots of unity (often called the twiddle factors).
  3. Perform N2 DFTs of size N1.

Typically, either N1 or N2 is a small factor (not necessarily prime), called the radix (which can differ between stages of the recursion). If N1 is the radix, it is called a decimation in time (DIT) algorithm, whereas if N2 is the radix, it is decimation in frequency (DIF, also called the Sande–Tukey algorithm). The version presented above was a radix-2 DIT algorithm; in the final expression, the phase multiplying the odd transform is the twiddle factor, and the +/- combination (butterfly) of the even and odd transforms is a size-2 DFT. (The radix's small DFT is sometimes known as a butterfly, so-called because of the shape of the dataflow diagram for the radix-2 case.)

Variations

[edit]

There are many other variations on the Cooley–Tukey algorithm. Mixed-radix implementations handle composite sizes with a variety of (typically small) factors in addition to two, usually (but not always) employing the O(N2) algorithm for the prime base cases of the recursion (it is also possible to employ an N log N algorithm for the prime base cases, such as Rader's or Bluestein's algorithm). Split radix merges radices 2 and 4, exploiting the fact that the first transform of radix 2 requires no twiddle factor, in order to achieve what was long the lowest known arithmetic operation count for power-of-two sizes,[10] although recent variations achieve an even lower count.[11][12] (On present-day computers, performance is determined more by cache and CPU pipeline considerations than by strict operation counts; well-optimized FFT implementations often employ larger radices and/or hard-coded base-case transforms of significant size.[13]).

Another way of looking at the Cooley–Tukey algorithm is that it re-expresses a size N one-dimensional DFT as an N1 by N2 two-dimensional DFT (plus twiddles), where the output matrix is transposed. The net result of all of these transpositions, for a radix-2 algorithm, corresponds to a bit reversal of the input (DIF) or output (DIT) indices. If, instead of using a small radix, one employs a radix of roughly N and explicit input/output matrix transpositions, it is called a four-step FFT algorithm (or six-step, depending on the number of transpositions), initially proposed to improve memory locality,[14][15] e.g. for cache optimization or out-of-core operation, and was later shown to be an optimal cache-oblivious algorithm.[16]

The general Cooley–Tukey factorization rewrites the indices k and n as and , respectively, where the indices ka and na run from 0..Na-1 (for a of 1 or 2). That is, it re-indexes the input (n) and output (k) as N1 by N2 two-dimensional arrays in column-major and row-major order, respectively; the difference between these indexings is a transposition, as mentioned above. When this re-indexing is substituted into the DFT formula for nk, the cross term vanishes (its exponential is unity), and the remaining terms give

.

where each inner sum is a DFT of size N2, each outer sum is a DFT of size N1, and the [...] bracketed term is the twiddle factor.

An arbitrary radix r (as well as mixed radices) can be employed, as was shown by both Cooley and Tukey[3] as well as Gauss (who gave examples of radix-3 and radix-6 steps).[2] Cooley and Tukey originally assumed that the radix butterfly required O(r2) work and hence reckoned the complexity for a radix r to be O(r2 N/r logrN) = O(N log2(Nr/log2r); from calculation of values of r/log2r for integer values of r from 2 to 12 the optimal radix is found to be 3 (the closest integer to e, which minimizes r/log2r).[3][17] This analysis was erroneous, however: the radix-butterfly is also a DFT and can be performed via an FFT algorithm in O(r log r) operations, hence the radix r actually cancels in the complexity O(r log(rN/r logrN), and the optimal r is determined by more complicated considerations. In practice, quite large r (32 or 64) are important in order to effectively exploit e.g. the large number of processor registers on modern processors,[13] and even an unbounded radix r=N also achieves O(N log N) complexity and has theoretical and practical advantages for large N as mentioned above.[14][15][16]

Data reordering, bit reversal, and in-place algorithms

[edit]

Although the abstract Cooley–Tukey factorization of the DFT, above, applies in some form to all implementations of the algorithm, much greater diversity exists in the techniques for ordering and accessing the data at each stage of the FFT. Of special interest is the problem of devising an in-place algorithm that overwrites its input with its output data using only O(1) auxiliary storage.

The best-known reordering technique involves explicit bit reversal for in-place radix-2 algorithms. Bit reversal is the permutation where the data at an index n, written in binary with digits b4b3b2b1b0 (e.g. 5 digits for N=32 inputs), is transferred to the index with reversed digits b0b1b2b3b4 . Consider the last stage of a radix-2 DIT algorithm like the one presented above, where the output is written in-place over the input: when and are combined with a size-2 DFT, those two values are overwritten by the outputs. However, the two output values should go in the first and second halves of the output array, corresponding to the most significant bit b4 (for N=32); whereas the two inputs and are interleaved in the even and odd elements, corresponding to the least significant bit b0. Thus, in order to get the output in the correct place, b0 should take the place of b4 and the index becomes b0b4b3b2b1. And for next recursive stage, those 4 least significant bits will become b1b4b3b2, If you include all of the recursive stages of a radix-2 DIT algorithm, all the bits must be reversed and thus one must pre-process the input (or post-process the output) with a bit reversal to get in-order output. (If each size-N/2 subtransform is to operate on contiguous data, the DIT input is pre-processed by bit-reversal.) Correspondingly, if you perform all of the steps in reverse order, you obtain a radix-2 DIF algorithm with bit reversal in post-processing (or pre-processing, respectively).

The logarithm (log) used in this algorithm is a base 2 logarithm.

The following is pseudocode for iterative radix-2 FFT algorithm implemented using bit-reversal permutation.[18]

algorithm iterative-fft is
    input: Array a of n complex values where n is a power of 2.
    output: Array A the DFT of a.
 
    bit-reverse-copy(a, A)
    na.length 
    for s = 1 to log(n) do
        m ← 2s
        ωm ← exp(?2πi/m) 
        for k = 0 to n-1 by m do
            ω ← 1
            for j = 0 to m/2 – 1 do
                tω A[k + j + m/2]
                uA[k + j]
                A[k + j] ← u + t
                A[k + j + m/2] ← ut
                ωω ωm
   
    return A

The bit-reverse-copy procedure can be implemented as follows.

algorithm bit-reverse-copy(a,A) is
    input: Array a of n complex values where n is a power of 2.
    output: Array A of size n.

    na.length
    for k = 0 to n – 1 do
        A[rev(k)] := a[k]

Alternatively, some applications (such as convolution) work equally well on bit-reversed data, so one can perform forward transforms, processing, and then inverse transforms all without bit reversal to produce final results in the natural order.

Many FFT users, however, prefer natural-order outputs, and a separate, explicit bit-reversal stage can have a non-negligible impact on the computation time,[13] even though bit reversal can be done in O(N) time and has been the subject of much research.[19][20][21] Also, while the permutation is a bit reversal in the radix-2 case, it is more generally an arbitrary (mixed-base) digit reversal for the mixed-radix case, and the permutation algorithms become more complicated to implement. Moreover, it is desirable on many hardware architectures to re-order intermediate stages of the FFT algorithm so that they operate on consecutive (or at least more localized) data elements. To these ends, a number of alternative implementation schemes have been devised for the Cooley–Tukey algorithm that do not require separate bit reversal and/or involve additional permutations at intermediate stages.

The problem is greatly simplified if it is out-of-place: the output array is distinct from the input array or, equivalently, an equal-size auxiliary array is available. The Stockham auto-sort algorithm[22][23] performs every stage of the FFT out-of-place, typically writing back and forth between two arrays, transposing one "digit" of the indices with each stage, and has been especially popular on SIMD architectures.[23][24] Even greater potential SIMD advantages (more consecutive accesses) have been proposed for the Pease algorithm,[25] which also reorders out-of-place with each stage, but this method requires separate bit/digit reversal and O(N log N) storage. One can also directly apply the Cooley–Tukey factorization definition with explicit (depth-first) recursion and small radices, which produces natural-order out-of-place output with no separate permutation step (as in the pseudocode above) and can be argued to have cache-oblivious locality benefits on systems with hierarchical memory.[9][13][26]

A typical strategy for in-place algorithms without auxiliary storage and without separate digit-reversal passes involves small matrix transpositions (which swap individual pairs of digits) at intermediate stages, which can be combined with the radix butterflies to reduce the number of passes over the data.[13][27][28][29][30]

References

[edit]
  1. ^ Gauss, Carl Friedrich (1866). "Theoria interpolationis methodo nova tractata" [Theory regarding a new method of interpolation]. Nachlass (Unpublished manuscript). Werke (in Latin and German). Vol. 3. G?ttingen, Germany: K?niglichen Gesellschaft der Wissenschaften zu G?ttingen. pp. 265–303.
  2. ^ a b c d e f Heideman, M. T., D. H. Johnson, and C. S. Burrus, "Gauss and the history of the fast Fourier transform," IEEE ASSP Magazine, 1, (4), 14–21 (1984)
  3. ^ a b c d e Cooley, James W.; Tukey, John W. (1965). "An algorithm for the machine calculation of complex Fourier series". Math. Comput. 19 (90): 297–301. doi:10.2307/2003354. JSTOR 2003354.
  4. ^ Cooley, James W.; Lewis, Peter A. W.; Welch, Peter D. (1967). "Historical notes on the fast Fourier transform" (PDF). IEEE Transactions on Audio and Electroacoustics. 15 (2): 76–79. CiteSeerX 10.1.1.467.7209. doi:10.1109/tau.1967.1161903.
  5. ^ Rockmore, Daniel N., Comput. Sci. Eng. 2 (1), 60 (2000). The FFT — an algorithm the whole family can use Special issue on "top ten algorithms of the century "Barry A. Cipra. "The Best of the 20th Century: Editors Name Top 10 Algorithms" (PDF). SIAM News. 33 (4). Archived from the original (PDF) on 2025-08-04. Retrieved 2025-08-04.
  6. ^ James W. Cooley, Peter A. W. Lewis, and Peter W. Welch, "Historical notes on the fast Fourier transform," Proc. IEEE, vol. 55 (no. 10), p. 1675–1677 (1967).
  7. ^ Danielson, G. C., and C. Lanczos, "Some improvements in practical Fourier analysis and their application to X-ray scattering from liquids," J. Franklin Inst. 233, 365–380 and 435–452 (1942).
  8. ^ a b c S. G. Johnson and M. Frigo, "Implementing FFTs in practice," in Fast Fourier Transforms (C. S. Burrus, ed.), ch. 11, Rice University, Houston TX: Connexions, September 2008.
  9. ^ a b Singleton, Richard C. (1967). "On computing the fast Fourier transform". Commun. ACM. 10 (10): 647–654. doi:10.1145/363717.363771. S2CID 6287781.
  10. ^ a b Duhamel, P., and M. Vetterli, "Fast Fourier transforms: a tutorial review and a state of the art," Signal Processing 19, 259–299 (1990)
  11. ^ Lundy, T., and J. Van Buskirk, "A new matrix approach to real FFTs and convolutions of length 2k," Computing 80, 23–45 (2007).
  12. ^ Johnson, S. G., and M. Frigo, "A modified split-radix FFT with fewer arithmetic operations," IEEE Trans. Signal Process. 55 (1), 111–119 (2007).
  13. ^ a b c d e Frigo, M.; Johnson, S. G. (2005). "The Design and Implementation of FFTW3" (PDF). Proceedings of the IEEE. 93 (2): 216–231. Bibcode:2005IEEEP..93..216F. CiteSeerX 10.1.1.66.3097. doi:10.1109/JPROC.2004.840301. S2CID 6644892.
  14. ^ a b Gentleman W. M., and G. Sande, "Fast Fourier transforms—for fun and profit," Proc. AFIPS 29, 563–578 (1966).
  15. ^ a b Bailey, David H., "FFTs in external or hierarchical memory," J. Supercomputing 4 (1), 23–35 (1990)
  16. ^ a b M. Frigo, C. E. Leiserson, H. Prokop, and S. Ramachandran. Cache-oblivious algorithms. In Proceedings of the 40th IEEE Symposium on Foundations of Computer Science (FOCS 99), p.285-297. 1999. Extended abstract at IEEE, at Citeseer.
  17. ^ Cooley, J. W., P. Lewis and P. Welch, "The Fast Fourier Transform and its Applications", IEEE Trans on Education 12, 1, 28–34 (1969)
  18. ^ Cormen, Thomas H.; Leiserson, Charles; Rivest, Ronald; Stein, Clifford (2009). Introduction to algorithms (3rd ed.). Cambridge, Mass.: MIT Press. pp. 915–918. ISBN 978-0-262-03384-8.
  19. ^ Karp, Alan H. (1996). "Bit reversal on uniprocessors". SIAM Review. 38 (1): 1–26. CiteSeerX 10.1.1.24.2913. doi:10.1137/1038001. JSTOR 2132972.
  20. ^ Carter, Larry; Gatlin, Kang Su (1998). "Towards an optimal bit-reversal permutation program". Proceedings 39th Annual Symposium on Foundations of Computer Science (Cat. No.98CB36280). pp. 544–553. CiteSeerX 10.1.1.46.9319. doi:10.1109/SFCS.1998.743505. ISBN 978-0-8186-9172-0. S2CID 14307262.
  21. ^ Rubio, M.; Gómez, P.; Drouiche, K. (2002). "A new superfast bit reversal algorithm". International Journal of Adaptive Control and Signal Processing. 16 (10): 703–707. doi:10.1002/acs.718. S2CID 62201722.
  22. ^ Originally attributed to Stockham in W. T. Cochran et al., What is the fast Fourier transform?, Proc. IEEE vol. 55, 1664–1674 (1967).
  23. ^ a b P. N. Swarztrauber, FFT algorithms for vector computers, Parallel Computing vol. 1, 45–63 (1984).
  24. ^ Swarztrauber, P. N. (1982). "Vectorizing the FFTs". In Rodrigue, G. (ed.). Parallel Computations. New York: Academic Press. pp. 51–83. ISBN 978-0-12-592101-5.
  25. ^ Pease, M. C. (1968). "An adaptation of the fast Fourier transform for parallel processing". J. ACM. 15 (2): 252–264. doi:10.1145/321450.321457. S2CID 14610645.
  26. ^ Frigo, Matteo; Johnson, Steven G. "FFTW". A free (GPL) C library for computing discrete Fourier transforms in one or more dimensions, of arbitrary size, using the Cooley–Tukey algorithm
  27. ^ Johnson, H. W.; Burrus, C. S. (1984). "An in-place in-order radix-2 FFT". Proc. ICASSP: 28A.2.1–28A.2.4.
  28. ^ Temperton, C. (1991). "Self-sorting in-place fast Fourier transform". SIAM Journal on Scientific and Statistical Computing. 12 (4): 808–823. doi:10.1137/0912043.
  29. ^ Qian, Z.; Lu, C.; An, M.; Tolimieri, R. (1994). "Self-sorting in-place FFT algorithm with minimum working space". IEEE Trans. ASSP. 52 (10): 2835–2836. Bibcode:1994ITSP...42.2835Q. doi:10.1109/78.324749.
  30. ^ Hegland, M. (1994). "A self-sorting in-place fast Fourier transform algorithm suitable for vector and parallel processing". Numerische Mathematik. 68 (4): 507–547. CiteSeerX 10.1.1.54.5659. doi:10.1007/s002110050074. S2CID 121258187.
[edit]
脸两侧长痘痘是什么原因 丹桂飘香是什么季节 芙蓉花长什么样 朝鲜人一日三餐吃什么 梦见好多猫是什么意思
指甲空了是什么原因 85年属什么的生肖 10月份什么星座 鼻窦炎首选什么抗生素 夜宵吃什么好
标新立异是什么意思 什么是双修 头孢和阿莫西林有什么区别 做阴超有黄体说明什么 甲状腺属于什么科室
妹妹你坐船头是什么歌 省长是什么级别 钠低是什么原因 心脏缺血吃什么药好 勇气是什么意思
糯米粉可以做什么hcv9jop4ns7r.cn 虎的本命佛是什么佛hcv8jop1ns5r.cn 榧子是什么hcv8jop9ns7r.cn 温暖的近义词是什么hcv8jop8ns1r.cn 物尽其用什么意思hcv8jop4ns6r.cn
一个月一个太念什么hcv7jop6ns2r.cn 蜈蚣怕什么东西gysmod.com 百香果有什么好处功效520myf.com 指征是什么意思hcv7jop9ns0r.cn 水银中毒会出现什么状况hcv8jop5ns4r.cn
甲状腺功能减退是什么意思jinxinzhichuang.com 七月十三号是什么星座hcv7jop6ns7r.cn 十月十六号是什么星座hcv8jop1ns5r.cn 如获至宝是什么意思hcv9jop0ns7r.cn 一箭双雕是指什么生肖hcv9jop2ns8r.cn
焦虑症是什么原因引起的hcv7jop6ns8r.cn 企鹅代表什么生肖hcv7jop6ns3r.cn 向心性肥胖是什么意思hcv7jop9ns8r.cn 胎位lsa是什么意思hcv8jop2ns9r.cn 前是什么偏旁hcv8jop5ns4r.cn
百度