function [Xk]=mydft(Xn,N)
%对Xn进行L点的DFT
%用时间抽取的基2FFT-DFT进行快速傅里叶变换
%序列补零
Xn=[Xn,zeros(1,N-length(Xn))];
%计算需分为蝶形运算的级数M
tempbinary=dec2bin(N);
M=length(tempbinary(2:end));
tempdata=zeros(M+1,N); %定义中间操作存储单元
%%对输入进行排序
for n=0:N-1
tempbinary=dec2bin(n,M);
tempbinary=rot90(tempbinary,2);
tempdata(1,n+1)=Xn(bin2dec(tempbinary)+1); %数组都从1开始计数
end
%开始计算
for m=0:M-1
%产生W因子
for r=1:2^m
W(r)=cos((pi/2^m)*(r-1))-j*sin((pi/2^m)*(r-1)); %W数组从1开始存数
end
for i=1:r
for groupseq=1:N/2^(m+1)
p=i+(groupseq-1)*2^(m+1) ; %用组号和W因子号确定P坐标
q=p+2^m;
tempdata(m+2,p)=tempdata(m+1,p)+W(i)*tempdata(m+1,q); %计算蝶形单元
tempdata(m+2,q)=tempdata(m+1,p)-W(i)*tempdata(m+1,q);
end
end
end
Xk=tempdata(M+1,:);
end
- 1
- 2
- 3
前往页