【kissfft】使用kiss_fft做FFT与iFFT
长时间没有使用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相关推荐
- 【kissfft】使用kiss_fftr做FFT与iFFT
类似与kiss_fft的调用,本章具体使用kiss_fftr接口做FFT与iFFT的使用 代码举例 static kiss_fft_scalar rand_scalar(void) {kiss_fft ...
- 在MatLab中FFT和IFFT的互相转换
FFT变换是将信号从时域转换到频域,这样在时域复杂的信号转换到频域看起来就方便容易了很多.但有时候也需要将频域信号转换到时域,所以这时运用到IFFT变换. 其实IFFT的计算原理之一就是将频域(注意频 ...
- C语言实现的FFT与IFFT源代码,不依赖特定平台
目录 源码 FFT.c FFT.h 使用方法 初始化 输入数据 FFT 快速傅里叶变换 解算FFT结果 使用python绘制FFT波形 IFFT 快速傅里叶逆变换 解算IFFT结果 Windows 1 ...
- python实现FFT,IFFT
利用蝶形算法实现fft,以及ifft:我的算法还不太完整,只能输入图片长宽为2**n的图片,要改进只需要根据输入的长宽进行补0,使得长宽都为2的整数倍: import math import cv2 ...
- c代码实现 ifft运算_二维FFT,IFFT,c语言实现 | 学步园
学习DIP第6天 网上关于FFT的实例有很多,具体也可以参照上一篇,其实Matlab,OpenCV都可以很轻松的实现相关操作,但是对于学习其原理,还是自己操作下比较好. 二维FFT的是实现方法是先对行 ...
- FFT专题:IFFT后信号如何重建
ifft(outFFTData, g_fft_temp, inFFTData, g_twiddle_ifft, twiddle_stride, F_WLEN);//思考ifft输出的复数结果怎么给到硬 ...
- ifft变换用java_利用FFT 及 IFFT实现傅立叶正反变换 | 学步园
貌似是很久没有写日志了,前段时间一直很想写关于矩阵特征值在迭代 毕业设计貌似也跟仿真有关,所以重拾matlab来做一些小的仿真,先说说利用FFT 和 IFFT来实现傅立叶正反变换吧.看了很多资料,网上 ...
- Python实现FFT及IFFT
运行环境及编译工具 Windows VS Code 编程语言及库版本 库 版本 Python 3.7.0 copy 无 numpy 1.19.2 opencv 3.4.2 PIL 8.1.0 matp ...
- c代码实现 ifft运算_X^n+1=0上的FFT和IFFT(基2)——C语言实现
我们一般意义上学习的FFT都是基于 的,即FFT中的单位根我们取的是 ,但是在某些情况下我们需要 上的FFT和IFFT变换. 1.直接想到的思路是把 的根替换成 的根. 解法: 的根可以使用 的2n个 ...
最新文章
- 2022-2028年中国汽车塑料行业市场深度分析及投资趋势预测报告
- System.Windows.Forms.Timer在线程中的注意事项
- Content Security Policy的学习理解
- 提交自己开发的MR作业到YARN上运行的步骤
- 4.SharePoint的权限
- 一张书籍清单(软件工程师学习参考资料)
- 关于Vista的AppInfo服务被禁的问题
- PDG转PDF全攻略
- vscode控制台乱码解决
- ANSYS workbench 有限元分析 学习
- 深度学习——RESCAN
- 使用CORS解决跨域问题
- B.FRIENDit壁虎忍者品牌故事
- (一)泛函分析(江泽坚)习题解答
- imac 升级 ssd_如何在较旧的2007-2009 iMac中安装SSD
- 刨根究底字符编码之七——ANSI编码与代码页(Code Page)
- oc 管理工具 黑苹果 下载_灵越7590黑苹果(win10下)
- ERROR 1010 (HY000): Error dropping database (can‘t rmdir ‘.\qpweb‘, errno: 41) 删库失败问题的解决
- 台式计算机配置什么音响好,用什么办法才能让台式的电脑不用音响就有声音
- 上传大文件(10G)的解决方案