快速傅里叶变换 及MATLAB函数

本文介绍了快速傅里叶变换(FFT)的实用C语言实现,并将其与MATLAB自带的FFT函数进行了对比。通过示例展示了如何使用这两个函数进行复数输入数据的处理,并提供了代码详细解释。
摘要由CSDN通过智能技术生成

/* 快速傅里叶变换实用程序 */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.1415926

typedef struct complexnumber
{
    double rpart;
    double ipart;
}cnumber;

void quickfft(cnumber p[],int n,int k,cnumber f[],int l,int il)
{
    int it,m,is,i,j,nv,l0;
    double t,q,s,vr,vi,r;
    cnumber podd;
   
    for (it=0; it<n; it++){
        m=it; is=0;
        for (i=0; i<k; i++){
            j=m/2;
            is=2*is+(m-2*j);
         m=j;
     }
        f[it].rpart=p[is].rpart;
        f[it].ipart=p[is].ipart;
    }
    p[0].rpart=1.0;
    p[0].ipart=0.0;
    t=2*PI/(1.0*n);
    p[1].rpart=cos(t);
    p[1].ipart=-sin(t);
    if (l!=0) p[1].ipart=-p[1].ipart;
    for (i=2; i<n; i++) {
        t=p[i-1].rpart*p[1].rpart;
        q=p[i-1].ipart*p[1].ipart;
        s=(p[i-1].rpart+p[i-1].ipart)*(p[1].rpart+p[1].ipart);
        p[i].rpart=t-q; p[i].ipart=s-t-q;
    }
    for (it=0; it<n-1; it+=2){
        vr=f[it].rpart;
        vi=f[it].ipart;
        f[it].rpart&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值