dft.c

来自「自己编的数值计算方法的c语言实现源程序。」· C语言 代码 · 共 31 行

C
31
字号
#include"math.h"

void dft(x,y,a,b,n,sign) 
/* x,y,a,b为双精度实型一维数组,x 数据实部,y 数据虚部,a 变换结果实部,b变换结果虚部,
n 数据长度, sign =1时dft()为DFT,sign=-1时dft()为IDFT*/
int n,sign;
double x[],y[],a[],b[];
{	int i,k;
	double c,d,q,w,s;
	q=6.28318530718/n;
	for(k=0;k<n;k++)  /* 求a[k].b[k] k=0...n-1;*/
	{	w=k*q;
		a[k]=b[k]=0.0;  /*a[k].b[k]初始化 */
		for(i=0;i<n;i++)
		{	d=i*w;
			c=cos(d);  /* c=cos(2*pi*k*i/n)*/
			s=sin(d)*sign;  /* c=sin(2*pi*k*i/n)*sign*/
			a[k]+=c*x[i]+s*y[i];  
			b[k]+=c*y[i]-s*x[i];
		}
	}
	
/*若为IDFT,则每个数据都除以n*/
	if(sign==-1)  
	{	c=1.0/n;
		for (k=0;k<n;k++)
		{	a[k]=c*a[k];
			b[k]=c*b[k];
		}
	}
}

⌨️ 快捷键说明

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