- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
页眉
页眉
页脚
页脚
华北电力大学
实验报
|
|
实验名称 FFT的软件实现实验(
IIR数字滤波器的设计
课程名称 信号分析与处理
|
|
专业班级: 电气化1308 学生姓名
学 号:201301000827 成 绩
指导教师: 杨光 实验日期:
Matlab )
:袁拉麻加
2015-12-17
快速傅里叶变换实验
一、实验目的及要求
通过编写程序,深入理解快速傅里叶变换算法(FFT的含义,完成FFT和IFFT
算法的软件实现。
二、实验内容
利用时间抽取算法,编写基2点的快速傅立叶变换(FFT程序;并在FFT程
序基础上编写快速傅里叶反变换(IFFT的程序。
:实验要求
:实验要求
1、 FFT和 IFFT子程序相对独立、具有一般性,并加详细注释;
2、 验证例6-4,并能得到正确结果。
3、 理解应用离散傅里叶变换(DFT)分析连续时间信号频谱的数学物理基础
四、实验原理:
a.算法原理
1、程序输入序列的元素数目必须为 2的整数次幕,即N=2m,整个运算需要
M级蝶形运算;
2、 输入序列应该按二进制的码位倒置排列,输出序列按自然序列排列;
3、 每个蝶形运算的输出数据军官占用其他输入数据的存储单元, 实现“即位 运算”
4、 每一级包括N/2个基本蝶形运算,共有 M*N/2个基本蝶形运算;
5、 第L级中有N/2 L个群,群与群的间隔为2l0
6、 处于同一级的各个群的系数 W分布相同,第L级的群中有2L-1个系数;
7、处于第L级的群的系数. 是(p=1,2,3,…….,2l-1)而对于第L级的蝶
形
运算,两个输入数据的间隔为2L-1o
b.码位倒置程序流程图
开始
c.蝶形运算程序流程图
五、程序代码与实验结果
a.FFT
程序:
%% clear all;close all;clc;
%输入数据%
A=input(输入 x(n)序列,s);
A=str2nu m(A);
% A=[1,2,-1,4]; %测试数据 %
%%
%校验序列,%
n=len gth(A);
m=log2( n);
if (fix(m)?=m)
disp(输入序列长度错误,请重新输入 !);
A=input(输入 x(n)序列,s);
A=str2 nu m(A);
else
)%取M
)
%取M位的二进制数%
%倒取出二进制数%
%将数字序列转化为字符串 %
%二进制序列转化为十进制数 %
end
%%
%码位倒置%
for k=0: n-1
for j=1:m
x1(j)=bitget(k,j);
end
x1=nu m2str(x1);
y(k+1)=bi n2dec(x1);
clear x1 end for k=1: n
B(k)=A(y(k)+1); %时间抽取序列%
end
clear A %%
%计算%
for L=1:m %分解为M级进行运算%
LE=2AL; %第L级群间隔为2AL%
LE1=2A(L-1); %第L级中共有2A(L-1)个Wn乘数,进行运算蝶运算的两数序号
相隔LE1%
W=1;
W1=exp(-1i*pi/LE1);
for R=1:LE1 %针对第R个Wn系数进行一轮蝶运算,共进行 LE1次%
for P=R:LE:n %每个蝶的大小为 LE%
Q=P+LE1;
T=B(Q)*W;
B(Q)=B(P)-T;
B(P)=B(P)+T;
end
W=W*W1;
end
end
B %输出 X(k)%
%%
验证结果:
例6-4
clear all;closeall;clc;
%输入数据%
% AWnputf输入x(n)序列;官);
% A=str2num(A);
A=[1,2^1,4];% 测试数据%
输人正鶴.请运■{亍下一歩
B =
Columns 1 through 2
6 0000 2.0000 + 2.0000i
Columns 3 through 4
-6 0000 2 0000 - 2 0000(
b.lFFT
程序:
%%
clear all;close all;clc;
%输入数据%
A=input(输入 X(k)序列,s);
A=str2 nu m(A);
% A=[6,2+2i,-6,2-2i]; % 测试数据 %
%%
%校验序列,%
n=len gth(A);
m=log2( n);
if (fix(m)?=m)
disp(输入序列长度错误,请重新输入
A=input(输入 x(n)序列,s);
A=str2 nu m(A);
else
disp(输入正确,请运行下一步
end
%%
%码位倒置%
for k=0: n-1
for j=1:m x1(j)=bitget(k,j);
end
x1=nu m2str(x1); y(k+1)=bi n2dec(x1);
文档评论(0)