📄 fft1.c
字号:
#include "DSP28_Device.h"
#include "math.h"
#define N 256
//#define pi=3.141592653589793;
typedef struct //定义表示复数的结构体
{
double real;
double imag;
}COMPLEX;
COMPLEX MUTIPLYCOMPLEX(COMPLEX b1,COMPLEX b2) //复数相乘函数
{
COMPLEX b3;
b3.real=b1.real*b2.real-b1.imag*b2.imag;
b3.imag=b1.real*b2.imag+b1.imag*b2.real;
return(b3);
}
//COMPLEX input_buffer[N];
/*****************************************************/
double input[]=
{
1.5000,1.5368,1.5736,1.6103,1.6470,1.6836,1.7201,1.7564,1.7926,1.8287,
1.8645,1.9001,1.9354,1.9705,2.0053,2.0398,2.0740,2.1079,2.1413,2.1744,
2.2071,2.2393,2.2712,2.3025,2.3334,2.3637,2.3935,2.4228,2.4516,2.4798,
2.5073,2.5343,2.5607,2.5864,2.6114,2.6358,2.6595,2.6825,2.7048,2.7264,
2.7472,2.7673,2.7866,2.8051,2.8229,2.8398,2.8560,2.8713,2.8858,2.8995,
2.9123,2.9243,2.9354,2.9457,2.9550,2.9636,2.9712,2.9779,2.9838,2.9887,
2.9928,2.9959,2.9982,2.9995,3.0000,2.9995,2.9982,2.9959,2.9928,2.9887,
2.9838,2.9779,2.9712,2.9636,2.9550,2.9457,2.9354,2.9243,2.9123,2.8995,
2.8858,2.8713,2.8560,2.8398,2.8229,2.8051,2.7866,2.7673,2.7472,2.7264,
2.7048,2.6825,2.6595,2.6358,2.6114,2.5864,2.5607,2.5343,2.5073,2.4798,
2.4516,2.4228,2.3935,2.3637,2.3334,2.3025,2.2712,2.2393,2.2071,2.1744,
2.1413,2.1079,2.0740,2.0398,2.0053,1.9705,1.9354,1.9001,1.8645,1.8287,
1.7926,1.7564,1.7201,1.6836,1.6470,1.6103,1.5736,1.5368,1.5000,1.4632,
1.4264,1.3897,1.3530,1.3164,1.2799,1.2436,1.2074,1.1713,1.1355,1.0999,
1.0646,1.0295,0.9947,0.9602,0.9260,0.8921,0.8587,0.8256,0.7929,0.7607,
0.7288,0.6975,0.6666,0.6363,0.6065,0.5772,0.5484,0.5202,0.4927,0.4657,
0.4393,0.4136,0.3886,0.3642,0.3405,0.3175,0.2952,0.2736,0.2528,0.2327,
0.2134,0.1949,0.1771,0.1602,0.1440,0.1287,0.1142,0.1005,0.0877,0.0757,
0.0646,0.0543,0.0450,0.0364,0.0288,0.0221,0.0162,0.0113,0.0072,0.0041,
0.0018,0.0005,0,0.0005,0.0018,0.0041,0.0072,0.0113,0.0162,0.0221,0.0288,
0.0364,0.0450,0.0543,0.0646,0.0757,0.0877,0.1005,0.1142,0.1287,0.1440,
0.1602,0.1771,0.1949,0.2134,0.2327,0.2528,0.2736,0.2952,0.3175,0.3405,
0.3642,0.3886,0.4136,0.4393,0.4657,0.4927,0.5202,0.5484,0.5772,0.6065,
0.6363,0.6666,0.6975,0.7288,0.7607,0.7929,0.8256,0.8587,0.8921,0.9260,
0.9602,0.9947,1.0295,1.0646,1.0999,1.1355,1.1713,1.2074,1.2436,1.2799,
1.3164,1.3530,1.3897,1.4264,1.4632,1.5000
};
COMPLEX input_buffer[N];
/****************************************************/
void FFT(int N) /*FFT运算*/
{
int m,LH,i,k,j,M,K;
double p;
double ps;
int B,N1;
const double pi=3.141592653589793;
COMPLEX w,T;
M=8; /*对应N值为256*/
LH=N/2; /*倒序的程序*/
j=LH;
N1=N-2;
/*变址运算*/
for(i=1;i<=N1;i++)
{
if(i<j)
{
T=input_buffer[i];input_buffer[i]=input_buffer[j];input_buffer[j]=T;
}
K=LH;
while(j>=K)
{
j=j-K;
K=K/2;
}
j=j+K;
}
for(m=1;m<=M;m++) /*下面是DIT-FFT运算程序*/
{
B=pow(2,m-1);
for(j=0;j<=B-1;j++)
{
p=pow(2,M-m)*j;
ps=2*pi*p/N;
w.real=cos(ps);
w.imag=-sin(ps);
for(k=j;k<=N-1;k=k+pow(2,m))
{
T=MUTIPLYCOMPLEX(input_buffer[k+B],w);
input_buffer[k+B].real=input_buffer[k].real-T.real;
input_buffer[k+B].imag=input_buffer[k].imag-T.imag;
input_buffer[k].real=input_buffer[k].real+T.real;
input_buffer[k].imag=input_buffer[k].imag+T.imag;
}
}
}
}
void main (void)
{
int i;
//COMPLEX input_buffer[N];
for(i=0;i<N;i++)
{
input_buffer[i].real=input[i];
input_buffer[i].imag=0;
}
FFT(N);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -