长时间没有使用kissfft有点忘记API的使用了,这里记录一下最最基本的使用。 FFT与iFFt

FFT

使用FFT的时候先初始化kiss_fft_cfg,其中第二个参数0/1表示是做fft还是ifft

kiss_fft_state = kiss_fft_alloc(nfft, 0, 0, 0);

构建输入参数

kiss_fft输入参数是复数,但是我们时域的数据为实数,所以需要构建等长的复数参数,然后把时域信号赋值到real部分,image部分置0.

iFFT

kiss_fft_state = kiss_fft_alloc(nfft, 1, 0, 0);

iFFT的时候,可能kissfft没有做scaling,所以结果需要除以N。

最后的结果是输出复数的real部分。

实例代码


static kiss_fft_scalar rand_scalar(void) {kiss_fft_scalar s = (kiss_fft_scalar) ((rand() + 10) % 256);return s / 256.;
}static void print_fft_result(kiss_fft_cpx *x, int n) {int l = 0;for (int i = 0; i < n; i++) {printf("(%4.4f+%4.4fi), ", x[i].r, x[i].i);if (l++ == 7) {l = 0;printf("\n");}}printf("\n");
}void test_fft() {int i = 0;int nfft = 20;kiss_fft_cpx cin[nfft];kiss_fft_cpx cout[nfft];kiss_fft_cpx sout[nfft];kiss_fft_cfg kiss_fft_state;kiss_fft_scalar zero;memset(&zero, 0, sizeof(zero));for (i = 0; i < nfft; ++i) {cin[i].r = rand_scalar();cin[i].i = zero;}printf("\n");printf(" init data for kiss_fft (cin): \n");print_fft_result(cin, nfft);memset(cout, 0, sizeof(short) * nfft);memset(sout, 0, sizeof(short) * nfft);kiss_fft_state = kiss_fft_alloc(nfft, 0, 0, 0);kiss_fft(kiss_fft_state, cin, cout);kiss_fft_free(kiss_fft_state);printf(" results from kiss_fft (cout): \n");print_fft_result(cout, nfft);kiss_fft_state = kiss_fft_alloc(nfft, 1, 0, 0);for (i = 0; i < nfft; i++) {cout[i].r /= nfft;cout[i].i /= nfft;}// case A.kiss_fft(kiss_fft_state, cout, sout);// end casekiss_fft_free(kiss_fft_state);printf(" results from kiss_ifft (sout): \n");print_fft_result(sout, nfft);printf("\n");
}int main(int argc, char *const argv[]) {test_fft();return 0;
}

结果如下:

【kissfft】使用kiss_fft做FFT与iFFT相关推荐

  1. 【kissfft】使用kiss_fftr做FFT与iFFT

    类似与kiss_fft的调用,本章具体使用kiss_fftr接口做FFT与iFFT的使用 代码举例 static kiss_fft_scalar rand_scalar(void) {kiss_fft ...

  2. 在MatLab中FFT和IFFT的互相转换

    FFT变换是将信号从时域转换到频域,这样在时域复杂的信号转换到频域看起来就方便容易了很多.但有时候也需要将频域信号转换到时域,所以这时运用到IFFT变换. 其实IFFT的计算原理之一就是将频域(注意频 ...

  3. C语言实现的FFT与IFFT源代码,不依赖特定平台

    目录 源码 FFT.c FFT.h 使用方法 初始化 输入数据 FFT 快速傅里叶变换 解算FFT结果 使用python绘制FFT波形 IFFT 快速傅里叶逆变换 解算IFFT结果 Windows 1 ...

  4. python实现FFT,IFFT

    利用蝶形算法实现fft,以及ifft:我的算法还不太完整,只能输入图片长宽为2**n的图片,要改进只需要根据输入的长宽进行补0,使得长宽都为2的整数倍: import math import cv2 ...

  5. c代码实现 ifft运算_二维FFT,IFFT,c语言实现 | 学步园

    学习DIP第6天 网上关于FFT的实例有很多,具体也可以参照上一篇,其实Matlab,OpenCV都可以很轻松的实现相关操作,但是对于学习其原理,还是自己操作下比较好. 二维FFT的是实现方法是先对行 ...

  6. FFT专题:IFFT后信号如何重建

    ifft(outFFTData, g_fft_temp, inFFTData, g_twiddle_ifft, twiddle_stride, F_WLEN);//思考ifft输出的复数结果怎么给到硬 ...

  7. ifft变换用java_利用FFT 及 IFFT实现傅立叶正反变换 | 学步园

    貌似是很久没有写日志了,前段时间一直很想写关于矩阵特征值在迭代 毕业设计貌似也跟仿真有关,所以重拾matlab来做一些小的仿真,先说说利用FFT 和 IFFT来实现傅立叶正反变换吧.看了很多资料,网上 ...

  8. Python实现FFT及IFFT

    运行环境及编译工具 Windows VS Code 编程语言及库版本 库 版本 Python 3.7.0 copy 无 numpy 1.19.2 opencv 3.4.2 PIL 8.1.0 matp ...

  9. c代码实现 ifft运算_X^n+1=0上的FFT和IFFT(基2)——C语言实现

    我们一般意义上学习的FFT都是基于 的,即FFT中的单位根我们取的是 ,但是在某些情况下我们需要 上的FFT和IFFT变换. 1.直接想到的思路是把 的根替换成 的根. 解法: 的根可以使用 的2n个 ...

最新文章

  1. 2022-2028年中国汽车塑料行业市场深度分析及投资趋势预测报告
  2. System.Windows.Forms.Timer在线程中的注意事项
  3. Content Security Policy的学习理解
  4. 提交自己开发的MR作业到YARN上运行的步骤
  5. 4.SharePoint的权限
  6. 一张书籍清单(软件工程师学习参考资料)
  7. 关于Vista的AppInfo服务被禁的问题
  8. PDG转PDF全攻略
  9. vscode控制台乱码解决
  10. ANSYS workbench 有限元分析 学习
  11. 深度学习——RESCAN
  12. 使用CORS解决跨域问题
  13. B.FRIENDit壁虎忍者品牌故事
  14. (一)泛函分析(江泽坚)习题解答
  15. imac 升级 ssd_如何在较旧的2007-2009 iMac中安装SSD
  16. 刨根究底字符编码之七——ANSI编码与代码页(Code Page)
  17. oc 管理工具 黑苹果 下载_灵越7590黑苹果(win10下)
  18. ERROR 1010 (HY000): Error dropping database (can‘t rmdir ‘.\qpweb‘, errno: 41) 删库失败问题的解决
  19. 台式计算机配置什么音响好,用什么办法才能让台式的电脑不用音响就有声音
  20. 上传大文件(10G)的解决方案

热门文章

  1. 使用Selenium爬虫进阶
  2. QGIS打印布局cheatsheet
  3. cytoscape绘图互作网络图(二)
  4. 读文献先读图——主成分分析 PCA 图
  5. 操作系统、Linux、CPU的几个疑惑点
  6. The Innovation | 直接病原学证据:无症状患者可引起COVID-19传播
  7. MPB:扬州大学王梦芝组-反刍动物瘤胃原虫18S rRNA测序分析技术
  8. Science:英国Castrillo组揭示微生物群与根内皮的协调支持植物营养平衡!
  9. 121个人电脑搭建微生物组分析平台(Win/Mac)
  10. 导师推荐的学术前沿号