Matlab 一维向量fftshift函数 C++实现

举报
悲恋花丶无心之人 发表于 2021/02/03 01:42:07 2021/02/03
【摘要】 fftshift网上有很多二维的实现,但是对于提高精度的另一种办法就是把二维向量看成是一维一维的向量,也可以这么做fftshift。 博主这里提供一个简单的算法实现,希望大家喜欢! 1.针对于向量元素个数为奇数个,这里以25为例: void FFTshift1(double (&xin)[1][25], int h, int l){ double xinf1[1][13...

fftshift网上有很多二维的实现,但是对于提高精度的另一种办法就是把二维向量看成是一维一维的向量,也可以这么做fftshift。

博主这里提供一个简单的算法实现,希望大家喜欢!

1.针对于向量元素个数为奇数个,这里以25为例:


  
  1. void FFTshift1(double (&xin)[1][25], int h, int l)
  2. {
  3. double xinf1[1][13];//前半段
  4. double xinf2[1][12];//后半段
  5. //for (int i = 0; i < h; i++) {
  6. for (int j = 0; j < l/2+1; j++) {
  7. xinf1[0][j] = xin[0][j];
  8. }
  9. for (int j = l/2+1; j < l; j++) {
  10. xinf2[0][j-l/2-1] = xin[0][j];
  11. }
  12. for (int j = 0; j < l / 2; j++) {
  13. xin[0][j] = xinf2[0][j];
  14. }
  15. for (int j = l / 2; j < l; j++) {
  16. xin[0][j] = xinf1[0][j-l/2];
  17. }
  18. //}
  19. }

因为这里h代表只有1行,所以可以注释掉;

说白了这个函数就是把前半段和后半段换一个位置,但是奇数的时候前半段长度是总长度除以2向上取整,后一半是向下取整,偶数的直接前后交换即可,这里以20为例:


  
  1. void FFTshift2(double (&xin)[1][20], int h, int l)
  2. {
  3. double temp;
  4. for (int j = 0;j<l/2;j++) {
  5. temp = xin[0][j+l/2];
  6. xin[0][j+l/2] = xin[0][j];
  7. xin[0][j] = temp;
  8. }
  9. }

是不是很简单~

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/79578806

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。