参考文献《数字信号处理. 理论、算法与实现》 第二版实现DIT基2FFT,主要就是实现下图中的一个蝶形运算。

下面是用matlab编写的实现函数。
function [Xk]=DIT_FFT_2_MOD(xn,N)
t=1:N;
WWr=exp(-1i*2*pi/N*[0:N/2-1].');%旋转因子
%蝶形运算开始
M=log2(N);%“级”的数量
% 码位倒置
Xk=permute(reshape(xn,2*ones(1,M)),M:-1:1);
Xk=Xk(:);
N2=N/2;
Num_of_Group=N2;%每一级中组的个数初始值
Interval_of_Group=1;%每一级中组与组之间的间距
for m=0:M-1 %“级”循环开始
Wr=WWr(1:Num_of_Group:end);
gMatrix2=reshape(t,Interval_of_Group,2,Num_of_Group);
gMatrix21=reshape(gMatrix2(:,1,:),N2,1);
gMatrix22=reshape(gMatrix2(:,2,:),N2,1);
if(m==0)
XKtemp=Xk(gMatrix22);%第0级,蝶形运算式
elseif(m==1)
XKtemp=Xk(gMatrix22);
XKtemp(2:2:end)=XKtemp(2:2:end)*Wr(2);%第1级,蝶形运算式
else
ss=repmat(Wr,Num_of_Group,1);
XKtemp=Xk(gMatrix22).*ss;%第m级,第g组的
MATLAB实现DIT基2FFT算法及16点FFT测试

该博客详细介绍了如何使用MATLAB实现离散傅里叶变换(DIT)基2快速傅里叶变换(FFT)算法,包括旋转因子的计算和蝶形运算的过程。通过一个16点FFT的例子展示了函数的调用和运算结果,验证了算法的正确性。
最低0.47元/天 解锁文章
4315

被折叠的 条评论
为什么被折叠?



