#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <math.h> #include "include/fftw3.h" #pragma comment(lib, "libfftw3-3.lib") // double版本 // #pragma comment(lib, "libfftw3f-3.lib")// float版本 // #pragma comment(lib, "libfftw3l-3.lib")// long double版本 #define PI 3.1415926 int main() { int len = 8; double *in = NULL; // 如果要使用float版本,需先引用float版本的lib库,然后在fftw后面加上f后缀即可. fftw_complex *out = NULL;// fftwf_complex --> 即为float版本 fftw_plan p; in = (double *)fftw_malloc(sizeof(double) * len); out = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * len); double dx = 1.0 / len; // 输入纯实数 for (int i = 0; i < len; i++) { in[i] = sin(2*PI * dx*i) + sin(4*PI * dx*i); printf("%.2f ", in[i]); } printf("\n\n"); // 傅里叶变换 p = fftw_plan_dft_r2c_1d(len, in, out, FFTW_ESTIMATE); fftw_execute(p); // 输出幅度谱 for (int i = 0; i < len; i++) { float len = sqrt(out[i][0]*out[i][0] + out[i][1]*out[i][1]); printf("%.2f ", len); } printf("\n"); // 释放资源 fftw_destroy_plan(p); fftw_free(in); fftw_free(out); system("pause"); return 0; }运行结果如下图所示,从结果来看,在频率为1及2两个位置有幅度输出,这与输入的频率为1及2的两个叠加正弦波吻合,结果正确。
windows下使用fftw进行傅里叶变换及其编程实例,布布扣,bubuko.com
原文地址:http://blog.csdn.net/grafx/article/details/38750107