IPP库下FFT的基本实现

首先感谢韩昊同学,他的傅里叶分析入门给我们对数学公式不熟悉的人了解傅里叶算法打开了一扇窗户,其原文发表于知乎:https://zhuanlan.zhihu.com/p/19763358

在了解其基本原理的基础下,我们采用IPP库对FFT的实现进行一个简单的仿真,以便更感性的认识何为傅里叶变换,他能做什么,废话不多,下面开始。

IPP版本:w_ipp_9.0.3.207.exe

可以在intel官网进行下载,该文件是开发库,是免费的

下载地址:https://registrationcenter.intel.com/en/forms/?productid=2558&licensetype=2

采样率设置为100,构建10Hz,20Hz,以及10Hz,20Hz叠加数据三份

Ipp32f *_10Hz = ippsMalloc_32f(len);
Ipp32f *_20Hz = ippsMalloc_32f(len);
Ipp32f *_10_20Hz = ippsMalloc_32f(len);

Ipp32f pPhase = 0;
ippsTone_32f(_10Hz, len, 5000, 0.1, &pPhase,ippAlgHintNone);
ippsTone_32f(_20Hz, len, 5000, 0.2, &pPhase,ippAlgHintNone);

ippsAdd_16s(_10Hz, _20Hz, _10_20Hz, len);

以上代码由IPP库的方法生成两个正弦信号,一个叠加信号。

10Hz

20Hz

10Hz_20Hz

生成fft序列并实现滤波

int pSpecSize;
int pSpecBufferSize;
int pBufferSize;
ippsFFTGetSize_R_32f(order, IPP_FFT_DIV_INV_BY_N, ippAlgHintFast, &pSpecSize, &pSpecBufferSize, &pBufferSize);
Ipp8u* pSpec = NULL;
Ipp8u* pSpecBuffer = NULL;
Ipp8u* pBuffer = NULL;
pSpec = ippsMalloc_8u ( pSpecSize );
if ( pSpecBufferSize > 0 )
{
pSpecBuffer = ippsMalloc_8u ( pSpecBufferSize );
}

if ( pBufferSize > 0 )
{
pBuffer = ippsMalloc_8u ( pBufferSize );
}

IppsFFTSpec_R_32f *pFFTSec;
ippsFFTInit_R_32f(&pFFTSec, order, IPP_FFT_DIV_INV_BY_N, ippAlgHintFast, pSpec, pSpecBuffer);

//生成FFT序列

ippsFFTFwd_RToPack_32f(_10Hz, _10Hzfft, pFFTSec, pBuffer);//10
ippsFFTFwd_RToPack_32f(_10_20Hz, _10_20Hzfft, pFFTSec, pBuffer);//10_20

//滤波 20Hz保存在_10_20Hzfft

ippsSub_32f(_10Hzfft,  _10_20Hzfft, len);

频谱显示数据如下:

10_20_FFT

10_FFT

20_fft

//反fft 生成新的序列 _20Hz_new保存新的序列

ippsFFTInv_PackToR_32f( _10_20Hzfft, _20Hz_new, pFFTSec, pBuffer);

结果图:

原文地址:http://www.cnblogs.com/zhangzhiming/p/5745972.html

技术分享QQ群:527698177 (限四川地区)

时间: 2024-10-16 21:08:32

IPP库下FFT的基本实现的相关文章

【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT

前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现FFT.在网上找了很多这方面的资料做实验并进行比较,最终选择了使用STM32提供的DSP库这种方法. 本文将以一个实例来介绍如何使用STM32提供的DSP库函数进行FFT. 1.FFT运算效率 使用STM32官方提供的DSP库进行FFT,虽然在使用上有些不灵活(因为它是基4的FFT,所以FFT的点数必须是4^n),但其执行效率确实非常高效,看图

STM32F4使用DSP库进行FFT运算的测试过程二

原文地址:http://www.cnblogs.com/NickQ/p/8541156.html 测试环境:单片机:STM32F407ZGT6 IDE:Keil5.20.0.0 固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 第二部分:本教程使用DSP--lib库的方式,进行FFT运算. 由于上一篇教程STM32F4使用FPU+DSP库进行FFT运算的测试过程一 ,进行FFT运算的是void arm_cfft_radix4_f32(const arm_cfft_

Lua_第19章 String 库(下)

Lua_第19章 String 库(下) 19.3捕获(Captures) Capture(下面译为捕获或者capture,模式中捕获的概念指,使用临时变量来保存匹配的子模式,常用于 向前引用.)是这样一种机制:可以使用模式串的一部分匹配目标串的一部分.将你想捕 获的模式用圆括号括起来,就指定了一个capture.在 string.find 使用captures 的时候,函数会返回捕获的值作为额外的结果.这常被用 来将一个目标串拆分成多个: pair = "name =Anna" _,

【c++】简单模拟实现boost库下的shared-ptr

//简单模拟实现boost库下的shared_ptr #include <iostream> #include <string.h> using namespace std; class shared_ptr_Rep { friend class shared_ptr; public: shared_ptr_Rep(const char *str = " ") :count(0) { px = new char[strlen(str) + 1]; strcpy(

BCG界面库下的Windows8 UI界面样式www.webui8.com

BCG界面库下的Windows8 UI界面样式(Metro风格)控件主要有以下一些功能: 规则的大块磁贴 支持完整键盘导航 Tile组 标题(Caption) 标题按钮(Caption buttons) 矩形或圆形的磁贴形状 水平("Landscape")和 垂直("Portrait")布局 Tile页头和多行文本 Tile图像 支持数字或标志性徽章 "Live" tiles 自定义颜色和画刷 自定义磁贴 系统独立:由于BCG只是模仿了Windo

glut库下的主要函数:

glut库下的主要函数: 一.初始化 void glutInit(int* argc,char** argv) 这个函数用来初始化GLUT库.对应main函数的形式应是:int main(int argc,char* argv[]); 这个函数从main函数获取其两个参数. void glutInitWindowSize(int width,int height); void glutInitWindowPosition(int x,int y); 这两个函数很好理解是设置glut程序要产生的窗

【c++】模拟实现boost库下的scoped_array

//模拟实现boost库下的scoped_array #include <iostream> #include <assert.h> using namespace std; template <class T> class scoped_array { private: T * px; scoped_array(scoped_array const &); scoped_array& operator=(scoped_array const &

mysql5.7 mysql库下面的user表没有password字段无法修改密码

转自:https://www.cnblogs.com/benjamin77/p/8681763.html 如题所述,mysql5.7  mysql库下面的user表没有password字段无法修改密码, 5.7版本已经不再使用password来作为密码的字段了  而改成了authentication_string 登陆密码记不起: [[email protected] ~]# mysql -uroot -p Enter password: ERROR 1045 (28000): Access d

STM32F4使用FPU+DSP库进行FFT运算的测试过程

测试环境:单片机:STM32F407ZGT6   IDE:Keil5.20.0.0  固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 第一部分:使用源码文件的方式,使用void arm_cfft_radix4_f32(const arm_cfft_radix4_instance_f32 * S,float32_t * pSrc)函数进行FFT运算. 准备空工程,配置Keil环境.使能STM32F4的FPU单元. 开启硬件浮点运算,等效于在C/C++->defin