【笔记】Cooley–Tukey FFT Algorithm - Recursive Edition

本文详细介绍了Cooley-Tukey FFT算法的递归版本,包括当输入向量长度为2的k次幂时的处理方式和非2的k次幂长度的情况。在向量长度为2^k时,通过参考Wiki提供的代码,阐述了DFT和IDFT的计算,并指出两者仅在指数符号和IDFT额外的1/N系数上的区别。对于非2^k长度的输入,讨论了如何计算卷积,并给出了最终的DFT和IDFT实现。
摘要由CSDN通过智能技术生成

DFT

IDFT

FFT

1 当输入向量长度为2^k时

参考wiki FFT有如下代码

/// <summary>
/// Cooley–Tukey FFT algorithm,
/// length of <paramref name="data"/> is power of 2.
/// <paramref name="left"/> is inclusive, <paramref name="right"/> is exclusive.
/// </summary>
private static void CooleyTukey(Complex[] data, int left, int right, int exponentSign)
{
    if (left + 1 < right)
    {
        Separate(data, left, right);
        var half = (right - left) >> 1;
        CooleyTukey(data, left, left + half, exponentSign);   // recurse even items
        CooleyTukey(data, left + half, right, exponentSign);  // recurse odd  items                                               
        for (var k = 0; k < half; k++)// combine results of two half recursions
        {
            var even = data[left + k];   // even
            var odd = data[left + k + half];   // odd                                                      
            var t = 2 * Math.PI * exponentSign * k / (right - left);
            var tmp = new Complex(Math.Cos(t), Math.Sin(t)) * odd; // "twiddle-factor" w*odd
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值