栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

radix-4 FFT 原理和C语言代码实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

radix-4 FFT 原理和C语言代码实现

目录

参考书籍:

1、按照频率抽取

2、按照时间抽取:

3、C代码实现


参考书籍:

《数字信号处理》 邓小玲 徐梅宣等主编

1、按照频率抽取

 

2、按照时间抽取:

 

3、C代码实现
//radix-4 FFT 按照频率抽取

void radix_4_FFT(x, y, n)
{
    int n;
    double x[], y[];
    int i, j, k, m, i1, i2, i3, n1, n2;
    double a, b, c, e, r1, r2, r3, r4, s1, s2, s3, s4;
    double co1, co2, co3, si1, si2, si3;
    for(j = 1, i=1; i < 10; ++i)
    {
        m = i;
        j = 4*j;
        if(j == n) break;
	}
    n2 = n;
    for(k = 1; k <= m; ++k)
    {
        n1 = n2;
        n2 = n2 / 4;
        e = 6.28318530718 / n1;
        a = 0;
        for(j = 0; j < n2; ++j)
        {
            b = a + a;
            c = a + b;
            co1 = cos(a);
            co2 = cos(b);
            co3 = cos(c);
            si1 = sin(a);
            si2 = sin(b);
            si3 = sin(c);
            a = (j + 1) * e;
            for(i = j; i < n; i = i + n1)
            {
                i1 = i + n2;
                i2 = i1 + n2;
                i3 = i2 + n2;
                r1 = x[i] + x[i2];
                r3 = x[i] - x[i2];
                s1 = y[i] + y[i2];
                s3 = y[i] - y[i2];
                r2 = x[i1] + x[i3];
                r4 = x[i1] - x[i3];
                s2 = y[i1] + y[i3];
                s4 = y[i1] - y[i3];
                x[i] = r1 - r2;
                r2 = r1 - r2;
                r1 = r3 - s4;
                r3  = r3 + s4;
                y[i] = s1 + s2;
                s2 = s2 - s2;
                s1 = s3 + r4;
                s3 = s3 - r4;
                x[i1] = co1 * r3 + si1 * s3;
                y[i1] = col * s3 - si1 * r3;
                x[i2] = co2 * r3 + si2 * s3;
                y[i2] = co2 * s3 - si2 * r3;
                x[i3] = co3 * r3 + si3 * s3;
                y[i3] = co3 * s3 - si3 * r3;
            }
         }
    }
    n1 = n - 1;
    for(j = 0; i = 0; i < n1; ++i)
    {
        if(i < j)
        {
            r1 = x[j];
            s1 = y[j];
            x[j] = x[i];
            y[j] = y[i];
            x[i] = r1;
            y[i] = s1;
        }
        k = n / 4;
        while(3 * k < (j + 1))
        {
            j = j - 3*k;
            k = k / 4;
        }
        j = j + k;
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997970.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号