我曾看到过一个码位倒置的函数,列于下面,楼主不妨试试。在MATLAB中关键数组下标从1开始,这给用MATLAB编写码位倒置增加了一点麻烦,像FORTRAN中,数组下标可从0开始,有很简单的码位倒置的方法。
function bit_reversal(x,N)
%倒序子程序
%
%变址运算
%
NV2=N/2; % 输入倒位序处理
NM1=N-1;
I=0;
J=0;
while I<NM1
if I<J
T=x(J+1);
x(J+1)=x(I+1);
x(I+1)=T;
end
K=NV2;
while K<=J
J=J-K;
K=K/2;
end
J=J+K;
I=I+1;
end
%=======================码位倒置==============
for j=1:(log2(n)-1)
for k=1:2^(j-1)
for g=1:n/(2^j)
x1(g+(k-1)*n/(2^(j-1)))=x(2*g-1+(k-1)*n/2^(j-1));
x1(g+(k-1)*n/(2^(j-1))+n/(2^j))=x(2*g+(k-1)*n/2^(j-1));
end
end
x=x1;
end
x=x1;
clear x1
其中是输入量,但是我编制的时候只是考虑fft变换,x中的数据个数只能是2^n个。