![](/img/trans.png)
[英]Phase angle from FFT using atan2 - weird behaviour. Phase shift offset? Unwrapping?
[英]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
设置的最右边的位j
到x
,假设比特是当前为零,同时使x
是0
或1
因此,所有要做的就是从m
的右边弹出位并将其推到j
的右边。
每次迭代,我们将j
乘以2(这与向左移1相同),然后加上m
的奇偶校验。 然后,我们将m
除以2(与右移1相同)。 m
以n
的值开头。 因此,我们实质上是将n
的位取反,并将其存储在j
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.