FFT算法的完整DSP实现

FFT算法的完整DSP实现
DFT计算X(k)需要N^2次复数乘法和N(N-1)次复数加法
FFT算法的流程图如下图,总结为3过程3循环:
(1)3过程:单点时域分解(倒位序过程) + 单点时域计算单点频谱 + 频域合成
(2)3循环:外循环——分解次数,中循环——sub-DFT运算,内循环——2点蝶形算法
这里写图片描述
分解过程或者说倒位序的获得参考下图理解:
这里写图片描述
FFT的DSP实现

下面为使用C语言实现的FFT及IFFT算法实例,能计算任意以2为对数底的采样点数的FFT,算法参考上面给的流程图。

/* 
 * zx_fft.h 
 * 
 *  Created on: 2013-8-5 
 *      Author: monkeyzx 
 */  

#ifndef ZX_FFT_H_  
#define ZX_FFT_H_  

typedef float          FFT_TYPE;  

#ifndef PI  
#define PI             (3.14159265f)  
#endif  

typedef struct complex_st {  
    FFT_TYPE real;  
    FFT_TYPE img;  
} complex;  

int fft(complex *x, int N);  
int ifft(complex *x, int N);  
void zx_fft(void);  

#endif /* ZX_FFT_H_ */  

[cpp] view plain copy



/* 
 * zx_fft.c 
 * 
 * Implementation of Fast Fourier Transform(FFT) 
 * and reversal Fast Fourier Transform(IFFT) 
 * 
 *  Created on: 2013-8-5 
 *      Author: monkeyzx 
 */  

#include "zx_fft.h"  
#include <math.h>  
#include <stdlib.h>  

/* 
 * Bit Reverse 
 * === Input === 
 * x : complex numbers 
 * n : nodes of FFT. @N should be power of 2, that is 2^(*) 
 * l : count by bit of binary format, @l=CEIL{log2(n)} 
 * === Output === 
 * r : results after reversed. 
 * Note: I use a local variable @temp that result @r can be set 
 * to @x
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值