利用MATLAB编写FFT迅速傅里叶变换
利用MATLAB编写FFT迅速傅里叶变换
利用MATLAB编写FFT迅速傅里叶变换
一、实验目的
MATLAB 编写 FFT 迅速傅里叶变换。
函数 rader ,纠正输出序列的输出次序。
function y=rader(x,N)
n=[0:N-1];
bn=dec2bin(n);
rbn=fliplr(bn);
rn=bin2dec(rbn);
y=x(rn+1);
myfft ,程序中套了两个循环。
利用MATLAB编写FFT迅速傅里叶变换
利用MATLAB编写FFT迅速傅里叶变换
利用MATLAB编写FFT迅速傅里叶变换
function X=myfft(x)
N=length(x);
h=log2(N); %h=3
for i=1:h %第一次
s=[];
for j=1:2^(i-1);
M=2^(h-i+1);
xj=x([1:M]+(j-1)*M);
i=1; 第二次 i=2
%i=1 时, j=1;i=2 时 ,j=1:2
%M:M=8 ; M=4
%xj=x([1:8]+(1-1)*8)=x(1)+x(2)...+x(8);
%j=1:xj=x([1:4]);j=2:xj=x([1:4]+4)
利用MATLAB编写FFT迅速傅里叶变换
利用MATLAB编写FFT迅速傅里叶变换
利用MATLAB编写FFT迅速傅里叶变换
[y,z]=disbutterfly(xj);
s=[s,y,z];
end
x=s;
利用MATLAB编写FFT迅速傅里叶变换
利用MATLAB编写FFT迅速傅里叶变换
利用MATLAB编写FFT迅速傅里叶变换
end
X=rader(x,N);
,将 myfft
与 fft 相减,比较之间的偏差。
a=[1,2,3,4,5,6,7,8];
X=fft(a);
X1=myfft(a);
X0=fft(a)-myfft(a);
subplot(4,1,1);
stem(a);
title(
'a 序列 ' );
subplot(4,1,2);
stem(X);
title(
'a 序列的 fft'
);
subplot(4,1,3);
stem(X1);
title(
'a 序列的 myfft'
);
subplot(4,1,4);
stem(X0);
title(
'fft(a)-myfft(a)'
);
图中可看出 fft 与 myfft
的图几乎如出一辙,且 fft-myfft
所获得的值几乎为零(虽
然在 4 时有不等于零
利用MATLAB编写FFT快速傅里叶变换 来自淘豆网www.taodocs.com转载请标明出处.