为何是除2!应该是除以数组的长度为32?

 

private static Complex[] IFFT(Complex[] input)
        {
            ///输入序列的长度
            int length = input.Length;
            ///输入序列的长度的一半
            int half = length / 2;
            ///输入序列只有一个元素,输出这个元素并返回
            if (input.Length == 1){
                return new Complex[] { input[0] };
            }
            ///有输入序列的长度确定输出序列的长度
            Complex[] output = new Complex[length];
            ///正变换旋转因子的基数
            double fac = 2.0 * Math.PI / length;
            ///序列中下标为偶数的点
            Complex[] evens = new Complex[half];
            for (int i = 0; i < half; i++){
                evens[i] = input[2 * i];
            }
            ///求偶数点FFT或IFFT的结果,递归实现多级蝶形运算
            Complex[] evenResult = IFFT(evens);
            ///序列中下标为奇数的点
            Complex[] odds = new Complex[half];
            for (int i = 0; i < half; i++){
                odds[i] = input[2 * i + 1];
            }
            ///求偶数点IFFT的结果,递归实现多级蝶形运算
            Complex[] oddResult = IFFT(odds);
            for (int k = 0; k < half; k++){
                ///旋转因子
                double fack = fac * k;
                ///进行蝶形运算
                Complex oddPart = oddResult[k] * new Complex(Math.Cos(fack), Math.Sin(fack));
                output[k] = evenResult[k] + oddPart;
                output[k] = new Complex(output[k].Real / 2.0, output[k].Imaginary / 2.0);
                output[k + half] = evenResult[k] - oddPart;
                output[k+half] = new Complex(output[k+half].Real /2.0, output[k+half].Imaginary / 2.0);
            }           
            //返回IFFT的结果
            return output;
        } 

为何只有在是2的时候结果是正确的!数组长度为32!按理应该是除以32!不得其解! 

一个有意思的地方是,如果把output单个拿出来打印,除以数组长度放外面处理,

就必须是除以32才正确!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值