信号分析与处理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北电力大学
实验报告
|
|
实验名称FFT的软件实现实验(Matlab)
IIR数字滤波器的设计
课程名称信号分析与处理
|
|
专业班级:电气化1308 学生姓名:袁拉麻加
学号: 201301000827 成绩:
指导教师:杨光实验日期: 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/2L个群,群与群的间隔为2L。
6、处于同一级的各个群的系数W分布相同,第L级的群中有2L-1个系数;
7、处于第L级的群的系数是(p=1,2,3,…….,2L-1)而对于第L级的
蝶形
运算,两个输入数据的间隔为2L-1。
b.码位倒置程序流程图
c. 蝶形运算程序流程图
五、程序代码与实验结果
a.FFT
程序:
%%
clear all;close all;clc;
%输入数据%
A=input('输入x(n)序列','s');
A=str2num(A);
% A=[1,2,-1,4]; %测试数据%
%%
%校验序列,%
n=length(A);
m=log2(n);
if (fix(m)~=m)
disp('输入序列长度错误,请重新输入!');
A=input('输入x(n)序列','s');
A=str2num(A);
else
disp('输入正确,请运行下一步')
end
%%
%码位倒置%
for k=0:n-1
for j=1:m %取M位的二进制数%
x1(j)=bitget(k,j); %倒取出二进制数%
end
x1=num2str(x1); %将数字序列转化为字符串%
y(k+1)=bin2dec(x1); %二进制序列转化为十进制数%
clear x1
end
for k=1:n
B(k)=A(y(k)+1); %时间抽取序列%
end
clear A
%%
%计算%
for L=1:m %分解为M级进行运算%
LE=2^L; %第L级群间隔为2^L%
LE1=2^(L-1); %第L级中共有2^(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
b.IFFT
程序:
%%
clear all;close all;clc;
%输入数据%
A=input('输入X(k)序列','s');
A=str2num(A);
% A=[6,2+2i,-6,2-2i]; %测试数据%
%%
%校验序列,%
n=length(A);
m=log2(n);
if (fix(m)~=m)
disp('输入序列长度错误,请重新输入!');
A=input('输入x(n)序列','s');
A=str2num(A);
else
disp('输入正确,请运行下一步')
end
%%
%码位倒置%
for k=0:n-1
for j=1:m %取M位的二进制数%
x1(j)=bitget(k,j); %倒取出二进制数%
end
x1=num2str(x1); %将数字序列转化为字符串%
y(k+1)=bin2dec(x1); %二进制序列转化为十进制数%
clear x1
end
for k=1:n
B(k)=A(y(k)+1); %时间抽取序列%
end
clear A
%%
%计算%
for L=1:m %分解为M级进行运算%
LE=2^L; %第L级群间隔为2^L%
LE1=2^(L-1); %第L级中共有2^(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=conj(B); %取共轭%
B=B/n %输出x(n)%