c语言编程 fft函数,C语言实现FFT与matlab中的fft函数比较

本文详细介绍了如何使用C语言编写FFT变换程序,并与MATLAB中的fft函数进行了对比。通过实例展示了不同采样点数和频率下的结果,证明C语言实现的FFT与MATLAB的输出基本一致。
摘要由CSDN通过智能技术生成

C程序编写的FFT与matlab中的fft函数比较

1、FFT的C程序编写

在个人上一篇博客已经讲过如何用C语言编写一个FFT变换,不清楚的能够打开下面这个连接阅读web

通过对原来程序的修改,如今能够实现一下功能:svg

一、能够对一个连续的时域信号进行采样,将其转换为离散的时域信号。函数

二、能够输入输入采样点数目和采样频率来进行FFT变换。学习

三、能够将FFT变换结果经过gnuplot画出来。spa

程序以下:.net

#include

#include

#include

#define N 1024

typedef struct{

double real;

double imag;

}complex;

complex x[N], *W;

int size=0;

double l[5000],h[5000];

double PI=4.0*atan(1);

void output()

{

int i;

for(i=0;i

{

printf("%lf %lf %.4f",h[i],l[i],x[i].real);//输出频域序列 模长 和信号的实部

if(x[i].imag>=0.0001)

{

printf("+%.4fj\n",x[i].imag);

}

else if(fabs(x[i].imag)<0.0001)

{

printf("\n");

}

else

{

printf("%.4fj\n",x[i].imag);

}

}

}

void change()

{

complex temp;

unsigned short i=0,j=0,k=0;

double t;

for(i=0;i

{

k=i;

j=0;

t=(log(size)/log(2));

while( (t--)>0 )

{

j=j<<1;

j|=(k & 1);

k=k>>1;

}

if(j>i)

{

temp=x[i];

x[i]=x[j];

x[j]=temp;

}

}

}

void transform()

{

int i;

W=(complex *)malloc(sizeof(complex) * size);

for(i=0;i

{

W[i].real=cos(2*PI/size*i);

W[i].imag=-1*sin(2*PI/size*i);

}

}

void add(complex a,complex b,complex *c)

{

c->real=a.real+b.real;

c->imag=a.imag+b.imag;

}

void sub(complex a,complex b,complex *c)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值