一维DFT C实现

一维dft是傅里叶变换里最为基础的形式,将时域信号转化为频域信号进行处理

input:一维信号序列

output: dft的结果(频率复数,实部代表频率,虚部/实部 代表相位)

未完待更:

#include<math.h>
#include<stdio.h>
#define pi 3.1415926
double a[100];
int N=0; 
struct answer{
	double x;
	double y;
	answer(){
		x=0;y=0;
	}
}ans[1000];
void DFT(int M){
	int i,j,k=0;
	double temp;
	for(i=0;i<M;i++){
		temp=i;
		answer t;
		for(j=0;j<N;j++){
			t.x+=a[j]*cos(-2*pi*temp*j/M);
			t.y+=a[j]*sin(-2*pi*temp*j/M);
		}
		ans[k++]=t;
	}
}
int main(){
	char c;
	int i,M;
	while(c!='\n'){
		scanf("%lf",&a[N++]);
		c=getchar();
	}
	printf("输入阶数(>=%d):\n",N); 
	scanf("%d",&M);
	DFT(M);
	for(i=0;i<M;i++){
		//printf("%lf ",sqrt(ans[i].x*ans[i].x+ans[i].y*ans[i].y));
		printf("%lf ",ans[i].x);
	}
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值