实验五-数字信号处理.docVIP

  • 35
  • 0
  • 约9.12千字
  • 约 13页
  • 2016-03-24 发布于安徽
  • 举报
实验五-数字信号处理.doc

深 圳 大 学 实 验 报 告 课程名称: 数字信号处理 实验项目名称: 时间抽取基-2 FFT 算法实现 学院: 信息工程学院 专业: 电子信息工程 教务处制 实验目的 1. 学习和理解离散傅里叶变换快速实现算法的原理; 2. 掌握使用 Matlab 来实现时间抽取基‐2 的 FFT 算法; 3. 学习使用编程工具实现数字信号处理算法. 实验原理: 快速傅里叶算法能够有效地计算离散傅里叶变换(DFT) 。它把一定长度的序列的DFT 运算转换为多个短的序列的 DFT 运算,从而节省了运算复杂度和系统开销。快速傅里叶算法的种类很多,这里以时间抽取基-2 的 FFT 算法为例来演示其实现过程。这一节概述其原理。 设输入序列为 ,其长度为 ,L 为正整数。FFT 算法把原序列的 DFT 运算分解为两个长度为原序列一半的序列的 DFT,以此迭代,直至序列长度为 2。在此迭代分解过程中,蝶形运算单元是一个基本模块。 蝶形运算单元 由于,时间抽取基-2 的流图中有 L 级蝶形结。第l(l=1... L级蝶形计算 公式如下所示 ? ? ? ? ? 其中, k 表示节点在第 l 级中由上到下的位置(地址) ,表示第 l级中蝶形结对偶节点的距离, ? 2. 数据倒位序 为了使FFT的输出为自然次序, 我们需要对输入序列进行一个数据倒位序的操作。倒位序是指将位置为 n 的数据与位置为 n的数据交换,其中, n 与 n的二进制表示的比特位次序互为颠倒。倒位序号的计算可由雷德(Rader)算法实现,其流程图如图 1 所示。 (参考课本第四章) 实验内容 倒位序子程序 (1) 在以上程序中标出每一行程序的作用; function x_rep = seq_replace(x) N = length(x); %取序列x的长度 nv2 = N/2; nm1 = N-1; J=0; I=0; while Inm1 %每个数都进行一次判断 if IJ %IJ进行判断,I〉 =J时不进行判断,已判断且交换过 t= x(J+1); %J+1,I+1为它们在序列中的位置 x(J+1) = x(I+1); x(I+1) =t; end K= nv2; while K=J %J在序列的后半部分时 J = J-K; %J-K,J-K回到序列前半部分与其对应的数 K=K/2; %K再取对半 end J=J+K; %当J在序列的前半部分时,我们只需+K便可找到J的位置 I=I+1; %找到与J对换的I值 end x_rep = x; end 验证以上程序实现了倒序功能,写出详细过程 运行程序,输入序列x的值,x序列为[1 2 3 4 5 6 7 8] 运行结果如下所示: seq_replace([1 2 3 4 5 6 7 8 ]) ans = 1 5 3 7 2 6 4 8 结果正确 验证过程: ①将k值转换为二进制数,0到7分别为000,001,010,011,100,101,110,111 ②将k值得二进制数进行位序颠倒,0-7就分别为000,100,010,110,001,101,011,111 ③将位序颠倒后的数转换为10进制数为0,4,2,6,1,5,3,7,对应的x的值分别为1 ,5,3,7,2,6,4,8 ④结果与程序运行的结果一致,故程序实现了倒序功能 2. FFT 蝶形算法实现 (1) 为程序添加注释; function y = myFFT(x) L = ceil(log2(length(x))) ; % ceil是向上取整 N = 2^L; % 序列x需要的长度 if length(x)N x = [x zeros(1,N-length(x))]; % 序列x的长度不满N,之后补0 end x_rep = seq_replace(x); %调用求倒序函数

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档