64点fft实现128点fft的算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编写64点FFT实现的函数
function X = myditfft64(x)
%按时间抽选的基2-FFT算法
%输入参数:
%x-离散时间信号
%输出参数:
%X-序列x的N点DFT(N是序列长度,必须是2的整数次幂)
N = 64; % 序列长度
if length(x) < N
x = [x,zeros(1,N-length(x))]; % 若x的长度不是2的整数次幂,则补零直到长度为N
end
nxd = bin2dec(fliplr(dec2bin([1:N]-1,6))) + 1; %求1:N序列序号的倒位序
X = x(nxd); %调整x输入顺序后的序列,并作为X的初始化
WN = exp(-1i*2*pi/N); %旋转因子
for L = 1:6
B = 2^(L-1); %第L级中,每个蝶形的两个输入数据相距B个点,共有B个不同的旋转因子
for J = 0 : B-1 %第L级中不同的旋转因子
p = J*2^(6-L); %旋转因子的指数
WNp = WN^p; %旋转因子的值
for k = J+1 : 2^L : N %蝶形运算
t = X(k+B)*WNp;
X(k+B) = X(k)-t;
X(k) = X(k)+t;
end
end
end
//-------------------------------------------------------------------------------------- 编写用64点FFT实现128点FFT
function y =myditfft64128(x)
N=128;
if length(x) < N
x = [x,zeros(1,N-length(x))];%若x的长度不是2的整数次幂,则补零直到长度为N
end
y1=myditfft64(x(1:2:128));%计算偶数组的64点fft
y2=myditfft64(x(2:2:128));%计算奇数组的8点fft
wn=exp(-j*2*pi/128);
y(1:64)=y1+y2.*(wn.^[0:63]);%计算前64个点
y(65:128)=y1-y2.*(wn.^[0:63]);%计算后64个点