C语言实现一维傅里叶变换

正变换
在这里插入图片描述
反变换

在这里插入图片描述
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.1415926

main()
{
int i,j,k;
int n=100;
double f=20.0;
double dt=0.005;
double df=1.0/(n*1.0)/dt;
printf(“dt=%f(s) df=%f(Hz)\n”,dt,df);

double input[n],output[n];
double real[n],image[n];
double amp[n];

for(i=0;i<n;i++)
{
	input[i]=0.0;
	output[i]=0.0;
	real[i]=0.0;
	image[i]=0.0;
	amp[i]=0.0;
	input[i]=sin(i*dt*f*2.0*PI);
	printf("%f\n",input[i]);
}
printf("--------------------------\n");
for(j=0;j<n;j++)
{

	for(i=0;i<n;i++)
	{
		real[j]=real[j]+input[i]*cos(2.0*PI*df*j*i*dt)*dt;
		image[j]=image[j]-input[i]*sin(2.0*PI*df*j*i*dt)*dt;
	}

	amp[j]=sqrt(real[j]*real[j]+image[j]*image[j]);

}

for(i=0;i<n;i++)
{
	printf("%f\n",amp[i]);
}

for(i=0;i<n;i++)
{
	input[i]=0.0;
	output[i]=0.0;
}


for(j=0;j<n;j++)
{
	for(i=0;i<n;i++)
	{
		output[j]=output[j]+real[i]*cos(2.0*PI*df*j*i*dt)*df-image[i]*sin(2.0*PI*df*j*i*dt)*df;
		input[j]=input[j]+real[i]*sin(2.0*PI*df*j*i*dt)*df+image[i]*cos(2.0*PI*df*j*i*dt)*df;
	}
}


printf("--------------------------\n");
for(i=0;i<n;i++)
{
	printf("%f\n",output[i]);
}

printf("-----------------------\n");
for(i=0;i<n;i++)
{
	printf("%f\n",input[i]);
}

}

发布了3 篇原创文章 · 获赞 1 · 访问量 117

猜你喜欢

转载自blog.csdn.net/weixin_45450312/article/details/103755419