壹:
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,
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2020-02-03 python 检测端口是否被占用