📄 ifft_self.m
字号:
%这个IFFT完全是模仿FFT程序的,由于IFFT相对于FFT只是旋转因子exp(j*2*pi/le)的改变,
%所以只要把这部分改变,最终得到的序列除以1/N就得到IFFT结果,所以只要把FFT程序改变
%上面两部分就可以了。这里注释可以看FFT程序中的注释,程序的主体结构相同。
%--------------------------------------------------------------------------
function y = IFFT_self(x,M)
q = nextpow2(M);
N = 2^q;
if M<N
x=[x,zeros(1,N-M)];
end
nv2=N/2;
nm1=N-1;
i=0;
p=0;
while i<nm1
if i<p
t=x(p+1);
x(p+1)=x(i+1);
x(i+1)=t;
end
k=nv2;
while k<=p
p=p-k;
k=k/2;
end
p=p+k;
i=i+1;
end
l=1;
m=log2(N);
while l<=m
le=2^l;
le1=le/2;
u=1;
w=exp(j*2*pi/le); %相对与FFT,这里的旋转因子要改变
p=0;
while p<le1;
i=p;
while i<N
ip=i +le1;
t=u*x(ip+1);
x(ip+1)=x(i+1)-t;
x(i+1)=t+x(i+1);
i=i+le;
end
u=u*w;
p=p+1;
end
l=l+1;
end
y = x/N; %最后的结果要除以N得到输出序列
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -