按时间抽取的基2FFT算法分析及MATLAB实现Word文件下载.docx
- 文档编号:19325434
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:8
- 大小:79.85KB
按时间抽取的基2FFT算法分析及MATLAB实现Word文件下载.docx
《按时间抽取的基2FFT算法分析及MATLAB实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《按时间抽取的基2FFT算法分析及MATLAB实现Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
L=1,有1个旋转因子:
=
J=0
第二级:
L=2,有2个旋转因子:
=
J=0,1
第三级:
L=3,有4个旋转因子:
J=0,1,2,3
对于N=
的一般情况,第L级共有
个不同的旋转因子:
J=0,1,2,…,
-1
×
=N·
故:
按照上面两式可以确定第L级运算的旋转因子
3、同一级中,同一旋转因子对应蝶形数目
第L级FFT运算中,同一旋转因子用在
个蝶形中;
4、同一级中,蝶形运算使用相同旋转因子之间相隔的“距离”
第L级中,蝶距:
D=
;
5、同一蝶形运算两输入数据的距离
在输入倒序,输出原序的FFT变换中,第L级的每一个蝶形的2个输入数据相距:
B=
。
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(J←J+N/2)得到下一个倒序值,若JB的最高位是1(J≧N/2),则要先将最高位变0(J←J-N/2),再在次高位加1(J←J+N/4),但次高位加1时,同样要判断0、1值,如果是0(J<
N/4),则直接加1(J←J+N/4),否则要先将次高位变0(J←J-N/4)再判断下一位,依次类推,直到完成最高位加1,逢2向右进位的运算。
I=J时不需要交换,只对I<
J时的情况进行数据交换即可,数据倒序程序框图如如2。
7、蝶形运算的规律
序列经过时域抽选后,存入数组中,如果蝶形运算的两个输入数据相距B个点,应用原位计算,蝶形运算可表示成如下形式:
p=J×
2M-L,J=0,1,2,…,2L-1-1
8、DIT-FFT程序框图
根据DIT-FFT原理和过程,DIT-FFT的完整程序框图如图2:
(1)倒序:
输入自然顺序序列x(n),根据倒序规律,进行倒序处理;
(2)循环层1:
确定运算的级数,L=1~M(N=
);
确定一蝶形两输入数据距离B=
(3)循环层2:
确定L级的B=
个旋转因子;
旋转因子指数p=J×
,J=0~B-1;
(4)循环层3:
对于同一旋转因子,用于同一级
个蝶形运算中:
k的取值从J到N-1,步长为
(使用同一旋转因子的蝶形相距的距离)
(5)完成一个蝶形运算。
图2数据倒序程序框图图3DIT-FFT的完整程序框图
3、程序源代码
设计函数myDitFFT(xn)完成一个序列的DIT-FFT运算:
functiony=myDitFFT(xn)
M=nextpow2(length(xn));
N=2^M;
disp('
调用fft函数运算的结果:
'
),
fftxn=fft(xn,N);
iflength(xn)<
N
xn=[xn,zeros(1,N-length(xn))];
end
form=0:
N/2-1;
%旋转因子指数范围
WN(m+1)=exp(-j*2*pi/N)^m;
%计算旋转因子
disp('
输入到各存储单元的数据:
),disp(xn);
%数据倒序操作
J=0;
%给倒序数赋初值
forI=0:
N-1;
%按序交换数据和算倒序数
ifI<
J;
%条件判断及数据交换
T=xn(I+1);
xn(I+1)=xn(J+1);
xn(J+1)=T;
end
%算下一个倒序数
K=N/2;
whileJ>
=K;
J=J-K;
K=K/2;
J=J+K;
end
倒序后各存储单元的数据:
disp(xn);
%分级按序依次进行蝶形运算
forL=1:
M;
%分级计算
disp('
运算级次:
),disp(L);
B=2^(L-1);
forR=0:
B-1;
%各级按序蝶算
P=2^(M-L)*R;
forK=R:
2^L:
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);
1至7列
28.0000+0.0000i-4.0000+9.6569i-4.0000+4.0000i-4.0000+1.6569i-4.0000+0.0000i-4.0000-1.6569i-4.0000-4.0000i
8列
-4.0000-9.6569i
调用myDitFFT(xn)函数运行的结果:
01234567
04261537
1
4-48-46-410-4
2
1至7列
12.0000+0.0000i-4.0000+4.0000i-4.0000+0.0000i-4.0000-4.0000i16.0000+0.0000i-4.0000+4.0000i-4.0000+0.0000i
-4.0000-4.0000i
3
28.0000+0.0000i-4.0000+9.6569i-4.0000+4.0000i-4.0000+1.6569i-4.0000+0.0000i-4.0000-1.6569i-4.0000-4.0000i
经对比可知DIT-FFT与直接DFT的运行结果完全相同。
4、总结
经过验证可发现DIT-FFT较直接DFT运算有着明显的优势,我们可以将这个函数运用在多个领域以简化运算,例如计算离散时间序列的卷积或计算IDFT时都可以应用到DIT-FFT算法,我感受到数字信号处理中科学思想的魅力。
由于对设计思路的缺乏,我在设计程序时,在网络上查找了很多有关DIT-FFT的资料,经过学习他人的解决思路最后才整理出DIT-FFT的程序,在有些地方我自己理解的还不是很透彻,比如在实现数据倒序的程序我认为比较困难;
当然即使自己想不到能学习一下别人的思路也是很好的,这个程序的代码量并不大,我自身的能力还很低,要在以后的学习中不断进步才能完成更加复杂的任务。
这次课程设计让我对快速傅里叶变换有了更多的了解,也认识到了科学计算方法的重要性,我感到很充实。
参考文献——
XX百科;
按时间抽取的基2FFT算法分析及MATLAB实现[J].电子技术,2011
(2)
数字信号处理(第四版)西安电子科技大学出版社高希全丁玉美编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 按时 抽取 FFT 算法 分析 MATLAB 实现