手撕fft系列之频移fftshift源码解析
源码 解析 系列 FFT
2023-09-11 14:17:10 时间
壹:
fft在数字信号处理领域是一个神一样的存在。要好好熟悉一下。这里给出频移的算法源码解析。
所谓的频移,就是把数字信号的频频顺序打乱,移动一些。这个在防止啸叫和辅听领域应用十分广泛。
贰:
这个源码不是很复杂,这里直接给出一个仿真源码:
#include <stdio.h> #include <math.h> typedef short spx_int16_t; typedef spx_int16_t spx_word16_t; void dump16(spx_word16_t *data,short len) { for (short i = 0; i < len; i++) { /* code */ printf("%d,",data[i]); } printf("\n\r"); } void swap(spx_int16_t *v1, spx_int16_t *v2) { spx_int16_t tmp = *v1; *v1 = *v2; *v2 = tmp; } void fftshift(spx_int16_t *data, int count) { int k = 0; int c = (int) floor((float)count/2); // For odd and for even numbers of element use different algorithm if (count % 2 == 0) { for (k = 0; k < c; k++) swap(&data[k], &data[k+c]); } else { spx_int16_t tmp = data[0]; for (k = 0; k < c; k++) { data[k] = data[c + k + 1]; data[c + k + 1] = data[k + 1]; } data[c] = tmp; } } void ifftshift(spx_int16_t *data, int count) { int k = 0; int c = (int) floor((float)count/2); if (count % 2 == 0) { for (k = 0; k < c; k++) swap(&data[k], &data[k+c]); } else { spx_int16_t tmp = data[count - 1]; for (k = c-1; k >= 0; k--) { data[c + k + 1] = data[k]; data[k] = data[c + k]; } data[c] = tmp; } } int main() { spx_int16_t array[8] = {1,2,3,4,5,6,7,8}; printf("before the fftshift is:\n\r"); dump16(array,8); fftshift(array,8); printf("after the fftshift is:\n\r"); dump16(array,8); return 0; }
叁:
上面的结果是:
before the fftshift is: 1,2,3,4,5,6,7,8, after the fftshift is: 5,6,7,8,1,2,3,4,
相关文章
- Silverlight实用窍门系列:38.Silverlight读取服务器端格式化的Json数据【附带实例源码】
- Centos7源码安装Python3.6
- spring mvc之启动过程源码分析
- PHP源码阅读(一):str_split函数
- hint bits 源码讲解, 为什么PostgreSQL查询语句也可能产生 xlog, 并且可能对buffer有write操作 ?
- dojo/query源码解析
- maven 下载源码
- require() 源码解读
- 深入Jetty源码之XmlConfiguration实现
- 用Darwin开发RTSP级联服务器(拉模式转发)(附源码)
- Kotlin 朱涛-25 源码 集合操作符 总结
- 数字图像处理 - 图像色彩平衡源码实现及解析
- 【Android 异步操作】线程池 ( 线程池 execute 方法源码解析 )
- 【Android 异步操作】AsyncTask 异步任务 ( AsyncTask 异步任务执行方法 execute 方法相关源码解析 )
- 因子分解机 Factorization Machine python 源码
- VC++时间函数的使用(附源码)
- sphinx索引部分源码续——过程:连接到CSphSource对应的sql数据源,通过fetch row取其中一行,然后解析出field,分词,获得wordhit,最后再加入到CSphSource的Hits里
- (01)ORB-SLAM2源码无死角解析-(22) 特征点三角化、深度计算、三维点筛选
- 动作识别0-05:mmaction2(SlowFast)-源码无死角解析(1)-cfg文件注释-持续修改更新
- 风格迁移2-05:MUNIT(多模态无监督)-源码无死角解析(1)-训练代码总览
- Android音视频开发学习路线+项目实战+源码解析(WebRTC Native 源码、X264源码、FFmpeg、Opus源码.....)
- ZooKeeper系列文章:ZooKeeper 源码解析(二)
- libvirt零知识学习5 —— libvirt源码编译安装(3)