首页 > 编程语言 >网上的一个用C语言实现FFT算法

网上的一个用C语言实现FFT算法

时间:2024-03-27 14:37:05浏览次数:29  
标签:real imag FFT xin C语言 算法 b1 b2 include

 用C语言实现FFT算法/*****************fftprograme*********************/#include"typedef.h"#include"math.h"structcompxEE(structcompxb1,structcompxb2){structcompxb3;b3.real=b1.real*b2.real-b1.imag*b2.imag;b3.imag=b1.real*b2.imag+b1.imag*b2.real;return(b3);}voidFFT(structcompx*xin,intN){intf,m,nv2,nm1,i,k,j=1,l;/*intf,m,nv2,nm1,i,k,j=N/2,l;*/structcompxv,w,t;nv2=N/2;f=N;for(m=1;(f=f/2)!=
用C语言实现FFT算法
/*****************fft programe*********************/
#include "typedef.h"
#include "math.h"
struct compx EE(struct compx b1,struct compx b2)
{
    struct compx b3 ;
    b3.real=b1.real*b2.real-b1.imag*b2.imag ;
    b3.imag=b1.real*b2.imag+b1.imag*b2.real ;
    return(b3);
}
void FFT(struct compx*xin,int N)
{
    int f,m,nv2,nm1,i,k,j=1,l ;
    /*int f,m,nv2,nm1,i,k,j=N/2,l;*/
    struct compx v,w,t ;
    nv2=N/2 ;
    f=N ;
    for(m=1;(f=f/2)!=1;m++)
    {
        ;
    }
    nm1=N-1 ;
   
    /*变址运算*/
    for(i=1;i<=nm1;i++)
    {
        if(i<j)
        {
            t=xin[j];
            xin[j]=xin[i];
            xin[i]=t ;
        }
        k=nv2 ;
        while(k<j)
        {
            j=j-k ;
            k=k/2 ;
        }
        j=j+k ;
    }
   
    {
        int le,lei,ip ;
        float pi ;
        for(l=1;l<=m;l++)
        {
            le=pow(2,l);
            // 这里用的是L而不是1  !!!!
            lei=le/2 ;
            pi=3.14159 ;
            v.real=1.0 ;
            v.imag=0.0 ;
            w.real=cos(pi/lei);
            w.imag=-sin(pi/lei);
            for(j=1;j<=lei;j++)
            {
                /*double p=pow(2,m-l)*j;
                  double ps=2*pi/N*p;
                  w.real=cos(ps);
                  w.imag=-sin(ps);*/
                for(i=j;i<=N;i=i+le)
                {
                    /*  w.real=cos(ps);
                      w.imag=-sin(ps);*/
                    ip=i+lei ;
                    t=EE(xin[ip],v);
                    xin[ip].real=xin[i].real-t.real ;
                    xin[ip].imag=xin[i].imag-t.imag ;
                    xin[i].real=xin[i].real+t.real ;
                    xin[i].imag=xin[i].imag+t.imag ;
                }
                v=EE(v,w);
            }
        }
    }
    return ;
}

/*****************main programe********************/
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include "typedef.h"

float result[257];
struct compx s[257];
int Num=256 ;
const float pp=3.14159 ;
main()
{
    int i=1 ;
    for(;i<0x101;i++)
    {
        s[i].real=sin(pp*i/32);
        s[i].imag=0 ;
    }
   
    FFT(s,Num);
   
    for(i=1;i<0x101;i++)
    {
        result[i]=sqrt(pow(s[i].real,2)+pow(s[i].imag,2));
    }
}

标签:real,imag,FFT,xin,C语言,算法,b1,b2,include
From: https://www.cnblogs.com/saulgoodman611/p/18099084

相关文章

  • 宏定义(C语言)
    1、宏定义一个两数相乘#defineMUL(a,b)a*b代码如下:#include<stdio.h>#defineMUL(a,b)a*bintmain(){intvalue;printf("value=%d\n",MUL(2,4));return0;}2、在虚拟机中运行,利用如下命令进行屏蔽屏蔽头文件,就可以完成宏替换。gcc-Edemo.c-o......
  • 网上看到的一个IIR算法,记录一下
    本帖最后由monkeynav于2013-8-2118:09编辑原帖刊载于ourdev:http://www.amobbs.com/thread-4165021-1-1.html原帖代码搞错,也无法编辑,很多人又找不到后面的更正,为了不误导更多人,就在这里重新发一遍。这里提供用于AVR和STM32的IIR滤波器代码下载,保证可用,不需要额外修改:------......
  • 学算法要读《算法导论》吗?
    这篇文章是我学习算法的心得,希望它能够给一些将要学习算法且准备要读大部头算法书籍的朋友一些参考,节省一些时间,也为了给经典的“黑皮书”祛魅,我觉得这些书籍在大部分互联网从业者心中已经不再是进步的阶梯,而是恐惧的阴影了,因为当一些学习路线中列出这些书目时,评论区多是调侃少是......
  • 0基础 三个月掌握C语言(15)
    动态内存管理为什么要有动态内存分配我们已经掌握的内存开辟⽅式有:intval=20; //在栈空间上开辟四个字节chararr[10]={0};//在栈空间上开辟10个字节的连续空间但上述的开辟空间的⽅式有两个特点:•空间开辟⼤⼩是固定的。•数组在申明的时候,必须指定数组的......
  • 支持向量机算法
    文章目录谷歌笔记本(可选)SMO高效优化算法谷歌笔记本(可选)fromgoogle.colabimportdrivedrive.mount("/content/drive")Mountedat/content/driveSMO高效优化算法importrandomdefloadDataSet(fileName):dataMat=[]labelMat=[]fr=open(fileN......
  • 极高创新性!基于斑马算法优化并行卷积神经网络注意力机制结合支持向量机ZOA-PCNN-AT-SV
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • C语言-实现文件操作
    0.前言:    我们知道下载东西,电脑上就会有各种的文件夹及文件里面的内容,那么文件里面的数据怎么通过编写程序来帮我们获取呢,这些文件又是怎么创建的呢?C语言给我们提供了一些可以操作文件的函数。这里我只列举了一部分操作文件的函数,使用这些函数需要引入头文件<stdlib.......
  • 【深度学习】最强算法模型之:潜在狄利克雷分配(LDA)
    潜在狄利克雷分配1、引言2、潜在狄利克雷分配2.1定义2.2原理2.3算法公式2.4代码示例3、总结1、引言小屌丝:鱼哥,给我讲一讲LDA小鱼:LDA?你指的是?小屌丝:就是算法模型的LDA啊,你想啥?小鱼:哦,哦,那就好,小屌丝:你告诉我,你想啥了?小鱼:不滴,我就不小屌丝:…你就说吧,我......
  • 数据结构-排序算法(Java实现)
    1.插入排序1.1基本思想把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。1.2图解 1.3原理解析第一趟:一组数据可以分为有序序列和无序序列, i表示无序序列的第一个元素,j表示有序序列的......
  • 前缀和算法讲解(二)
    首先,大家看一下一维的前缀和:https://blog.csdn.net/hjyowl/article/details/136580832?spm=1001.2014.3001.5502今天,我们讲解一下二维的前缀和.先看题:输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下......