概述
在项目中需要提取音频中特定频率,需要使用fft和ifft,fftw满足要求。需要注意的地方是在做ifft后要做归一化处理,代码如下:
// fft.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>
#include <windows.h>
#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版本
int main(void)
{
double array[] = { 0.1, 0.6, 0.1, 0.4, 0.5, 0, 0.8, 0.7, 0.8, 0.6, 0.1 };
double *out;
double *err;
int i, size = 10;
fftw_complex *out_cpx;
fftw_plan fft;
fftw_plan ifft;
out_cpx = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)*size);
out = (double *)malloc(size * sizeof(double));
err = (double *)malloc(size * sizeof(double));
fft = fftw_plan_dft_r2c_1d(size, array, out_cpx, FFTW_ESTIMATE); //Setup fftw plan for fft
ifft = fftw_plan_dft_c2r_1d(size, out_cpx, out, FFTW_ESTIMATE); //Setup fftw plan for ifft
fftw_execute(fft);
fftw_execute(ifft);
//printf("Input: tOutput: tError:n");
printf("Input: tOutput:n");
for (i = 0; i<size; i++)
{
err[i] = (array[i] - out[i]);
printf("%ft%fn", (array[i]), out[i]/size);//需要做归一化处理
//printf("%ft%ft%fn",(array[i]),out[i],err[i]);
}
fftw_destroy_plan(fft);
fftw_destroy_plan(ifft);
fftw_free(out_cpx);
free(err);
free(out);
return 0;
}
完整工程请点击下载。
最后
以上就是欢喜火龙果为你收集整理的使用fftw对音频进行fft及ifft的全部内容,希望文章能够帮你解决使用fftw对音频进行fft及ifft所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复