繁体   English   中英

FFT重新排序阶段

[英]FFT reordering phase

我为您提供了一些代码。 这是快速傅里叶变换的分割算法的第一步。

算法应该做的是对数组重新排序,以使输入中的每个元素都将在输出的“二进制镜像”位置中移位。

例如,元素X [4]将位于位置X [1],因为100的镜像表示是001。

直到这里,一切都清楚了。 但是,执行这种重新排序的算法不是。 我至少很难理解。

第二个内部循环做什么?

// N is the length of the array
// p is the number of bits needed to represent the index

for(int n=0; n<N; n++) {

   int j=0; 
   int m=n;
   for(int i=0; i<p; i++) {
     j = 2∗j + m%2; m = m/2;
   }

   if ( j>n) { 
     complex<double> h;
     h = X[j]; 
     X[j] = X[n]; 
     X[n] = h;
   }

}

将整数视为位序列。

  • j = 2j这会弹出左边的位,并向右推零
  • m % 2这将获得正确的位
  • m = m / 2弹出右边的位,并向左推送最左边的位的副本
  • j + x设置的最右边的位jx ,假设比特是当前为零,同时使x01

因此,所有要做的就是从m的右边弹出位并将其推到j的右边。

每次迭代,我们将j乘以2(这与向左移1相同),然后加上m的奇偶校验。 然后,我们将m除以2(与右移1相同)。 mn的值开头。 因此,我们实质上是将n的位取反,并将其存储在j

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM