信号分析与处理实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)%

相关文档
最新文档