快速傅里叶变换MATLABWord文档格式.docx

上传人:b****0 文档编号:13219879 上传时间:2022-10-08 格式:DOCX 页数:8 大小:78.09KB
下载 相关 举报
快速傅里叶变换MATLABWord文档格式.docx_第1页
第1页 / 共8页
快速傅里叶变换MATLABWord文档格式.docx_第2页
第2页 / 共8页
快速傅里叶变换MATLABWord文档格式.docx_第3页
第3页 / 共8页
快速傅里叶变换MATLABWord文档格式.docx_第4页
第4页 / 共8页
快速傅里叶变换MATLABWord文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

快速傅里叶变换MATLABWord文档格式.docx

《快速傅里叶变换MATLABWord文档格式.docx》由会员分享,可在线阅读,更多相关《快速傅里叶变换MATLABWord文档格式.docx(8页珍藏版)》请在冰豆网上搜索。

快速傅里叶变换MATLABWord文档格式.docx

下面略去推导和证明,仅以长度为8的序列为例子说明这两种算法。

1.DIT-FFT

N=8点DIT-FFT运算流图x(0)x(4)

x

(2)

x(6)x

(1)x(5)

x(3)

(0)

(1)

(2)

(3)(4)(5)(6)x(7)NL=1级L=2

L=3X(7)

相应的MATLAB程序:

%自编FFT

%基2时域抽取DIT-FFT

%输入x,输出X均为行向量

functionX=myfft1(x)

iflength(x)~=2^fix(log2(length(x)))%如果长度超出,补足下一个幂的0。

x=[x,zeros(1,2^ceil(log2(length(x)))-length(x))];

end

%时域序列倒序

x=x(invertorder([0:

length(x)-1]));

N=length(x);

K=log2(N);

X2=zeros(1,N);

X1=x;

W_n=exp(-1j*2*pi/N);

%旋转因子

fork=1:

K

fori=0:

2^(K-k)-1

forj=0:

2^(k-1)-1

ifmod(k,2)==1%奇数

X2(j+i*2^k+1)=X1(j+i*2^k+1)+W_n^(j*2^(K-k))*X1(j+i*2^k+2^(k-1)+1);

X2(j+i*2^k+2^(k-1)+1)=X1(j+i*2^k+1)-W_n^(j*2^(K-k))*X1(j+i*2^k+2^(k-1)+1);

else%偶数

X1(j+i*2^k+1)=X2(j+i*2^k+1)+W_n^(j*2^(K-k))*X2(j+i*2^k+2^(k-1)+1);

X1(j+i*2^k+2^(k-1)+1)=X2(j+i*2^k+1)-W_n^(j*2^(K-k))*X2(j+i*2^k+2^(k-1)+1);

if(mod(K,2)==1)

X=X2;

else

X=X1;

2.DIF―FFT

x(0)x

(1)x

(2)x(3)

x(4)x(5)x(6)x(7)x

(0)

(4)

(2)

(6)

X

(1)

X(5)

X(3)

X(7)

x(0)

N

相应的MATLAB程序:

%自编FFT

%基2频域抽取DIF-FFT

%输入x,输出X均为行向量

functionX=myfft2(x)

x=[x,zeros(1,2^ceil(log2(length(x)))-length(x))];

X2(j+i*2^(K-k+1)+1)=X1(j+i*2^(K-k+1)+1)+X1(j+i*2^(K-k+1)+2^(K-k)+1);

X2(j+i*2^(K-k+1)+2^(K-k)+1)=(X1(j+i*2^(K-k+1)+1)-X1(j+i*2^(K-k+1)+2^(K-k)+1))*W_n^(j*2^(k-1));

X1(j+i*2^(K-k+1)+1)=X2(j+i*2^(K-k+1)+1)+X2(j+i*2^(K-k+1)+2^(K-k)+1);

X1(j+i*2^(K-k+1)+2^(K-k)+1)=(X2(j+i*2^(K-k+1)+1)-X2(j+i*2^(K-k+1)+2^(K-k)+1))*W_n^(j*2^(k-1));

%频域序列倒序

X=X(invertorder([0:

length(X)-1]));

3.倒序处理

%输入为自然序列,从0开始,2^M。

%输出为它的倒序数,从1开始。

functions=invertorder(t)

iflength(t)~=2^fix(log2(length(t)))%

N=length(t);

M=log2(N);

s=zeros(1,N);

J=t

(1);

%从0开始

s

(1)=1;

fori=2:

forj=1:

M

ifJ>

=N/2^j

J=J-N/2^j;

s(i)=J+N/2^j+1;

J=s(i)-1;

break;

4.二维傅里叶变换

思想:

先对矩阵每行作变换,再对每列变换,但要注意MATLAB里转置是共轭转置,单独的转置是.’。

%自编二维傅里叶变换

functionF=myfftdimention2(X)

%先对每一行向量变换,再对每一列向量变换。

[m,n]=size(X);

if(m~=2^nextpow2(m))

M=2^nextpow2(m);

M=m;

if(n~=2^nextpow2(n))

N=2^nextpow2(n);

N=n;

F=zeros(M,N);

x=zeros(1,n);

y=zeros(1,m);

fx=zeros(1,N);

fy=zeros(1,M);

fori=1:

x=X(i,:

);

fx=myfft1(x);

F(i,:

)=fx;

y=F(:

j).'

;

%转置但不共轭

fy=myfft1(y);

F(:

j)=fy;

温馨推荐

您可前往XX文库小程序

享受更优阅读体验

不去了

立即体验

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1