利用FFT成功实现拓扑识别(十二)--对FFT算法的理解5

33 篇文章 2 订阅
10 篇文章 1 订阅


利用FFT成功实现拓扑识别(十二)–对FFT算法的理解5

DFT算法的另一种实现方式

DFT算法的实现是FFT的基础,除了前文利用欧拉公式展开后的计算方法外,还有不展开,利用cexp函数实现的方法,程序上更简洁,下面结合朋友们的要求,介绍一下。

复数在c语言中的使用

复数是 a+bi 形式的数,其中 a 和 b 是真数,在 C 代码中是浮点值,i 是根号 -1。a 被称作复数的实数部分,b 乘以 i 被称作虚数部分。前文我们采用自定义结构图的方法仿真了复数的计算,通过结构体的成员变量,我们可以直接操作实部和虚部。实际上,在c语言中,有专用的<complex.h>标准头文件,定义了用于处理复数的功能。并定义了3 个特化类型:complex、complex、complex。另外,还定义了相关的操作has:
在这里插入图片描述在本文中,使用 complex来示例,使用上面的cexp函数来实现dft的计算,对其他特化类型的操作是基本相同的。实现方法如下:

int dft()
{
double _Complex X[N],x[N]; //定义输出和输入缓冲区,N为点数
int k,i;

int lsd;
for(i=0; i<N; i++)//产生输入序列
{
//数据采集代码或填充数据区代码
x[i] =。。。 。。。
printf(“%d\t%lf\n”,i,x[i]); //输出计算结果
}

for(k = 0; k < N; k++) //计算DFT
{
X[k] = 0;
for(i = 0; i < N; i++)
{
double _Complex tmp = x[i] * cexp(-I*(2pi/N)ik);
X[k] = X[k] + tmp;
}
printf(“%f\t%f\n”, k
, cabs(X[k])); //输出幅度
}
}

是不是非常简单、清晰。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cyjbj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值