利用matlab做dsp实验,DSP实验报告_matlab.doc

DSP实验报告_matlab

按时间抽取的基 2-FFT算法实现

实验目的

掌握按时间抽取的基 2-FFT 的原理及具体实现方法。

编程实现按时间抽取的基 2-FFT 算法。

加深理解按时间抽取 FFT 算法的特点

实验内容

编程实现序列长度为 N = 8的按时间抽取的基 2-FFT 算法。给定一个 8 点序列,采用编写的程序计算其 DFT,并与 MATLAB 中 fft 函数计算的结果相比较,以验证结果的正确性。

程序代码

disp ('请输入一个 N=8的序列 ');

for ii=1:8 %用户输入一个 N=8的序列

x(ii)= input(['x(',num2str(ii),')=']);

end

nxd=bin2dec(fliplr(dec2bin([0:7])))+1; %求数列序号的倒序

y=x(nxd); %将 x的倒序序列给 y

for m=1:3 %做 3级蝶形运算,每级 2^(3-m)组

Nz=2^m; %蝶形运算间隔序号数 Nz

WN=exp(-1i*2*pi/Nz); %定义旋转因子

u=WN^0;

for j=1: Nz/2 %每组需要 Nz/2个蝶形运算

for k=j:Nz:8 %蝶形运算第一个因数

kp=k+Nz/2; %蝶形运算的二个因数

t=y(kp)*u; %蝶形运算乘积项

y(kp)=y(k)-t; %蝶形运算

y(k)=y(k)+t; %蝶形运算每级 2^m个

end

u=u*WN; %修改旋转因子

end

end

y1=fft(x); %结果核对

subplot(211); %绘出通过程序变换后的谱线

stem(1:8,y);xlabel('k');ylabel('X(k)');grid off;

subplot(212); %绘出通过函数调用后的谱线

stem(1:8,y1);xlabel('k');ylabel('X(k)');grid off;

进行试验

请输入一个 N=8的序列

x(1)=2

x(2)=67

x(3)=3

x(4)=3

x(5)=45

x(6)=44

x(7)=21

x(8)=1

输出图像:

具体数据:

Y=1.8600 -0.2815 + 0.0032i 0.2300 - 1.0700i -0.5785 - 0.3568i -0.4400 -0.5785 + 0.3568i 0.2300 + 1.0700i -0.2815 - 0.0032i

Y1=1.8600 -0.2815 + 0.0032i 0.2300 - 1.0700i -0.5785 - 0.3568i -0.4400 -0.5785 + 0.3568i 0.2300 + 1.0700i -0.2815 - 0.0032i

对比Y与Y1,完全一样,确认实验结果无误,完成题目要求

将第 1 题的 FFT 程序推广到N=2v的情况,要求利用原位运算。

程序代码

disp ('请输入序列的长度( 2的指数) ');

w= input(['2^']);

v=2^w;

disp ('请输入序列 ');

for ii=1:v %用户输入一个 N=2^v的序列

x(ii)= input(['x(',num2str(ii),')=']);

end

nxd=bin2dec(fliplr(dec2bin([0:(v-1)])))+1; %求数列序号的倒序

y=x(nxd); %将 x的倒序序列给 y

for m=1:w %做 3级蝶形运算,每级 2^(3-m)组

Nz=2^m; %蝶形运算间隔序号数 Nz

WN=exp(-1i*2*pi/N

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值