串行fft 源于并行计算——结构。算法。编程中伪码
2012-09-13 16:14
387 查看
第三版 295页伪码,跟一般的计算方法的顺序有些不同,这个是先计算后改变位置。简单易懂,明了。陈国良果然大家。
#include <stdio.h> #include <math.h> #include <stdlib.h> typedef struct { double real; double img; } com; double PI; void cp(com f,com *t); void add(com a,com b,com* r); void mul(com a,com b,com* r); void sub(com a,com b,com* r); int br(int src,int size); void init(com* w,int size); void fft(com* a,com* w,int size); void show(com *a,int size); int main() { int size=4; com a[size]; com ws[size]; for(int i=0;i<size;++i) {//initialize test data a[i].real=i+1; a[i].img=0; } init(ws,size); fft(a,ws,size); show(a,size); } void cp(com f,com *t) { t->real=f.real; t->img=f.img; } void add(com a,com b,com *c) { c->real=a.real+b.real; c->img=a.img+b.img; } void mul(com a,com b,com *c) { c->real=a.real*b.real-a.img*b.img; c->img=a.real*b.img+a.img*b.real; } void sub(com a,com b,com *c) { c->real=a.real-b.real; c->img=a.img-b.img; } int br(int src,int size) { int tmp=src; int des=0; for(int i=size-1;i>=0;--i) { des=((tmp&1)<<i)|des; tmp=tmp>>1; } return des; } void init(com* w,int size) {//initialize the power(w,i) array PI=atan(1)*4; for(int i=0;i<size;++i) { w[i].real=cos(2*PI*i/size); w[i].img=sin(2*PI*i/size);//? } } void fft(com* a,com* w,int size) { com c[size]; com up,down; for(int i=0;i<size;++i) { cp(a[i],&c[i]); } for(int h=log(size)/log(2)-1;h>=0;--h) { int p=pow(2,h); int q=size/p; int z=q/2; for(int k=0;k<size;++k) { if(k%p==k%(2*p)) { add(c[k],c[k+p],&up); sub(c[k],c[k+p],&down); cp(up,&c[k]); int time=z*(k%p); mul(down,w[time],&c[k+p]); } } } int h=log(size)/log(2); for(int i=0;i<size;++i) { cp(c[i],&a[br(i,h)]); } } void show(com *a,int size) { for(int i=0;i<size;++i) { printf("%.4f %.4f \n",a[i].real,a[i].img); } }
相关文章推荐
- MPI实现fft的迭代算法 源于并行计算——结构。算法。编程中伪码
- MPI实现fft的迭代算法 源于并行计算——结构。算法。编程中伪码 更新3
- MPI实现fft的迭代算法 源于并行计算——结构。算法。编程中伪码 更新1
- MPI实现fft的迭代算法 源于并行计算——结构。算法。编程中伪码 更新2
- 单核单线程、单核多线程、多核多线程以及并行计算对大数据和复杂算法的简单效应
- OpenCL异构并行计算编程笔记(2):命令队列与内存对象
- 基于矩阵分解的推荐算法-梯度下降算法-非并行计算[转载]
- 数据结构与算法之图计算
- 转自人人网-结构之法算法研究编程艺术
- 从零开始Rtklib解读篇-简单的编程理论和算法及结构分析(四)
- 【CUDA并行编程之五】计算向量的欧式距离
- 计算机组成与体系结构---并行计算问题
- 数据结构算法之表达式自动计算
- 并行计算和并行计算机体系结构
- 【转】浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础上
- 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机体系结构/并行与分布计算/存储系统
- 【CUDA并行编程之六】KNN算法的并行实现
- c++多线程编程:实现标准库accumulate函数的并行计算版本
- JAVA并发处理经验(四)并行模式与算法7:AIO网络编程
- Matlab高性能编程——代码优化和并行计算