⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1 fft.c

📁 一些驱动程序和显示程序及传感器的简单应用,再软件和硬件上全部调试通过,可以直接使用
💻 C
字号:
//*********************************************************
//  快速付里叶变换
//*********************************************************

#include<reg51.h>
#include <math.h>
#define N 128
#define pi 3.14159
struct complex 
{
    float real;
    float image;
};

struct complex xdata s[N];
struct complex mul(struct complex,struct complex);    /*定义复数乘*/
void FFT(struct complex *s);
                
main()
{
    unsigned char data i;
    for(i=0;i<N;i++)
    {
        s[i].real=i;
        s[i].image=0;
    }
    FFT(s);
    while(1);
    
}

struct complex mul(struct complex x,struct complex y)
{
    struct complex z;
    z.real=x.real*y.real-x.image*y.image;
    z.image=x.real*y.image+x.image*y.real;
    return (z);
}

void FFT(struct complex *s)
{
    unsigned char data nv2,nm1,k,level,i,j=0;
    unsigned char ip,le,lei;
    struct complex data v,w,t;  
    nv2=N>>1;
    nm1=N-1;
    for(i=0;i<nm1;i++)   /*变址运算*/
    {
        if(i<j)
    	{
            t=s[j];
            s[j]=s[i];
            s[i]=t;
    	}
        k=nv2;
        while(k<=j)
    	{
            j-=k;
            k=k>>1;
    	}
        j+=k;
    }

    le=1;     
    for(level=1;level<=7;level++)
    {   
        lei=le;
        le<<=1;
        v.real=1.0;
        v.image=0.0;       
        w.real=cos(pi/lei);
        w.image=-sin(pi/lei);
        for(j=0;j<lei;j++)
        {
            for(i=j;i<N;i+=le)
            {
                   ip=i+lei;
                   t=mul(s[ip],v);
                   s[ip].real=s[i].real-t.real;
                   s[ip].image=s[i].image-t.image;
                   s[i].real+=t.real;
                   s[i].image+=t.image;
           }
           v=mul(v,w);
       }
    }

    for(i=0;i<N;i++)
    s[i].real=sqrt(s[i].real*s[i].real+s[i].image*s[i].image)/100;  //幅值
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -