按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx

上传人:b****5 文档编号:8508798 上传时间:2023-05-11 格式:DOCX 页数:9 大小:71.99KB
下载 相关 举报
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第1页
第1页 / 共9页
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第2页
第2页 / 共9页
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第3页
第3页 / 共9页
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第4页
第4页 / 共9页
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第5页
第5页 / 共9页
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第6页
第6页 / 共9页
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第7页
第7页 / 共9页
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第8页
第8页 / 共9页
按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx

《按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx》由会员分享,可在线阅读,更多相关《按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx(9页珍藏版)》请在冰点文库上搜索。

按时间抽取的基2FFT算法分析及MATLAB实现文档格式.docx

L=1,有1个旋转因子:

wN=WiN/4=w2jl

J=0

 

第二级:

L=2,有2个旋转因子:

wn=wN/2=w;

J=0,1

第三级:

L=3,有4个旋转因子:

wN=wN=w;

J=0,1,2,3

对于N=2m的一般情况,第L级共有2L-1个不同的旋转因子:

2l=2mX2l-m=N・2L-M

故:

按照上面两式可以确定第L级运算的旋转

因子

卩一屯=呛严=昭尸—

P二”严,

3、同一级中,同一旋转因子对应蝶形数目

第L级FFT运算中,同一旋转因子用在2m-l个蝶形中;

4、同一级中,蝶形运算使用相同旋转因子之间相隔的“距离”

第L级中,蝶距:

D=2l;

5、同一蝶形运算两输入数据的距离

在输入倒序,输出原序的FFT变换中,第L级的每一个蝶形的2个输入数据相距:

B=2l-1。

6、码位颠倒

输入序列x(n)经过M级时域奇、偶抽选后,输出序列X(k)的顺序和输入序列的顺序关系为倒位关系。

将十进制顺序数用I表示,与之对应的二进制是用IB表示,十进制倒序数用J表示,与之对应的二进制是用JB表示。

十进制顺序数I增加1,相当于IB最低位加1且逢2向高位进1,即相当于JB最高位加1且逢2向低位进1。

JB的变化规律反映到J的变化分为两种情况,若JB的最高位是0(J<

N/2),则直接由加1(JJJ+N/2)得到下一个倒序值,若JB的最高位是1(J全N/2),则要先将最高位变0(JJJ-N/2),再在次高位加1(JJJ+N/4),但次高位加1时,同样要判断0、1值,如果是0(J<

N/4),则直接加1(JJJ+N/4),否则要先将次高位变0

(JJJ-N/4)再判断下一位,依次类推,直到完成最高位加1,逢2向右进位的运算。

I=J时不需要交换,只对I<

J时的情况进行数据交换即可,数据倒序程序框图如如2。

7、蝶形运算的规律

序列经过时域抽选后,存入数组中,如果

蝶形运算的两个输入数据相距B个点,应用原位计算,蝶形运算可表示成如下形式:

XL(J)=XL-1(J)+WNpXL-1(J+B)

Xl(J)=Xl-i(J)-WnP-XL-1

(J+B)

p=JX2M-L,J=0,1,2,…,2l-1—1

8DIT-FFT程序框图

根据DIT-FFT原理和过程,DIT-FFT的完整程序

框图如图2:

(1)倒序:

输入自然顺序序列x(n),根据倒序规律,进行倒序处理;

⑵循环层1:

确定运算的级数,L=1~M(N=2m);

确定一蝶形两输入数据距离B=h

⑶循环层2:

确定L级的B=2l-1个旋转因子;

旋转因子指数p=JXzM-L,J=0〜B-1;

个蝶形运算中:

k的取值从J到N-1,步长为2L

(4)循环层3:

对于同一旋转因子,

用于同一级

2

M-L

(使用同一旋转因子的蝶形相距的距离)

(5)完成一个蝶形运算

图2数据倒序程序框图

图3DIT-FFT的完整程序框图

三、程序源代码

设计函数myDitFFT(xn)完成一个序列的DIT-FFT运算:

functiony=myDitFFT(xn)

M=nextpow2(length(xn));

N=2AM;

disp('

调用fft函数运算的结果:

'

),

iflength(xn)<

N

xn=[xn,zeros(1,N-length(xn))];

end

form=0:

N/2-1;

%旋转因子指数范围

WN(m+1)=exp(-j*2*pi/Nfm;

%计算旋转因子

输入到各存储单元的数据:

),disp(xn);

%数据倒序操作

J=0;

%给倒序数赋初值

forI=0:

N-1;

%按序交换数据和算倒序数

ifKJ;

%条件判断及数据交换

T=xn(I+1);

xn(I+1)=xn(J+1);

xn(J+1)=T;

%算下一个倒序数

K=N/2;

whileJ>

=K;

J=J-K;

K=K/2;

J=J+K;

倒序后各存储单元的数据:

disp(xn);

%分级按序依次进行蝶形运算

disp('

运算级次:

’),disp(L);

B=2A(L-1);

forR=0:

B-1;

%各级按序蝶算

P=2A(M-L)*R;

forK=R:

2AL:

N-2;

%每序依次计算

T=xn(K+1)+xn(K+B+1)*WN(P+1);

xn(K+B+1)=xn(K+1)-xn(K+B+1)*WN(P+1);

xn(K+1)=T;

本级运算后各存储单元的数据:

在主函数中调用myDitFFT(xn)函数实现

DIT-FFT并和直接DFT运算结果做对比:

xn=[0,1,2,3,4,5,6,7];

myDitFFT(xn);

调用fft函数运算的结果:

1至7列

28.0000+0.0000i-4.0000+9.6569i

-4.0000+4.0000i-4.0000+1.6569i

-4.0000+O.OOOOi-4.0000-

-4.0000-4.0000i

8列

-4.0000-9.6569i

调用myDitFFT(xn)函数运行的结果:

输入到各存储单元的数据:

012345

67

倒序后各存储单元的数据:

042615

37

1

本级运算后各存储单元的数据:

4-48-4

1.6569i

6-4

10-4

运算级次:

本级运算后各存储单兀的数据:

1至7

12.0000

+0.0000i

-4.0000

+4.0000i

-4.0000i

16.0000

-4.0000+O.OOOOi

3

本级运算后各存储单元的数据

1至7列

28.0000

+

0.0000i

+9.6569i

4.0000i

+1.6569i

-1.6569i

经对比可知DIT-FFT与直接DFT的运行结果完全相同。

四、总结

经过验证可发现DIT-FFT较直接DFT运算有着明显的优势,我们可以将这个函数运用在多个领域以简化运算,例如计算离散时间序列的卷积或计算IDFT时都可以应用到DIT-FFT算法,我感受到数字信号处理中科学思想的魅力。

由于对设计思路的缺乏,我在设计程序时,在网络上查找了很多有关DIT-FFT的资料,经过学习他人的解决思路最后才整理出DIT-FFT的程序,在有些地方我自己理解的还不是很透彻,比如在实现数据倒序的程序我认为比较困难;

当然即使自己想不到能学习一下别人的思路也是很好的,这个程序的代码量并不大,我自身的能力还很低,要在以后的学习中不断进步才能完成更加复杂的任务。

这次课程设计让我对快速傅里叶变换有了更多的了解,也认识到了科学计算方法的重要性,我感

到很充实。

参考文献

XX百科;

[J].电子技术,2011

(2)

数字信号处理(第四版)西安电子科技大学出

版社高希全丁玉美编

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2