数字信号处理 离散傅里叶变换的性质及应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字信号处理实验
题目:离散傅里叶变换的性质及应用
学院:
专业:
学生姓名:班级/学号
指导老师:
一、实验目的
1.了解DFT的性质及其应用
2.熟悉MATLAB编程特点
二、实验仪器及材料
计算机,MATLAB软件
三、实验内容及要求
1.用三种不同的DFT 程序计算8()()x n R n =的256点离散傅里叶变换()X k ,并比较三种程序计算机运行时间。
(1)编制用for loop 语句的M 函数文件dft1.m ,用循环变量逐点计算()X k ; (2)编写用MATLAB 矩阵运算的M 函数文件dft2.m ,完成下列矩阵运算:
000
0121
012(1)
(1)(1) (0)(0) (1)(1)
(1)(1) N N
N N
N N N N
N
N N N N N N
N N X x W W W W X x W W W W x N X N W W W W -----⎡⎤⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥
--⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦
(3)调用fft 库函数,直接计算()X k ;
(4)分别调用上述三种不同方式编写的DFT 程序计算序列()x n 的离散傅里叶变换
()X k ,并画出相应的幅频和相频特性,再比较各个程序的计算机运行时
间。
M 函数文件如下: dft1.m:
function[Am,pha]=dft1(x) N=length(x); w=exp(-j*2*pi/N); for k=1:N sum=0; for n=1:N
sum=sum+x(n)*w^((k-1)*(n-1)); end
Am(k)=abs(sum); pha(k)=angle(sum); end dft2.m:
function[Am,pha]=dft2(x) N=length(x); n=[0:N-1];
k=[0:N-1];
w=exp(-j*2*pi/N);
nk=n'*k;
wnk=w.^(nk);
Xk=x*wnk;
Am=abs(Xk);
pha=angle(Xk);
dft3.m:
function[Am,pha]=dft3(x)
Xk=fft(x);
Am=abs(Xk);
pha=angle(Xk);
源程序、运行结果及结论
1、源程序
<1>function[Am,pha] = dft1(x)
N = length(x);
w = exp(-j*2*pi/N);
for k=1:N
sum = 0;
for n = 1:N
sum = sum+x(n)*w^((k-1)*(n-1));
end
Am(k) = abs(sum);
pha(k) = angle(sum);
end
end
<2> function[Am,pha] = dft2(x)
N = length(x);
n = [0:N-1];k = [0:N-1];
w = exp(-j*2*pi/N);nk = n'*k;
wnk = w.^(nk);
Xk = x*wnk;
Am = abs(Xk); pha = angle(Xk);
end
<3> function[Am,pha] = dft3(x)
Xk = fft(x);
Am = abs(Xk); pha = angle(Xk);
end
<4> clear all;
clc;
x = [ones(1,8),zeros(1,256-8)];
t = cputime;
[Am1,pha1] = dft1(x);
t1 = cputime-t;
t = cputime;
[Am2,pha2] = dft2(x);
t2 = cputime-t;
t = cputime;
[Am3,pha3] = dft3(x);
t3 = cputime-t;
subplot(6,1,1);stem(Am1);title('幅频特性1'); subplot(6,1,2);stem(pha1);title('相频特性1'); subplot(6,1,3);stem(Am2);title('幅频特性2'); subplot(6,1,4);stem(pha2);title('相频特性2'); subplot(6,1,5);stem(Am3);title('幅频特性3'); subplot(6,1,6);stem(pha3);title('相频特性3');
2、运行结果
3、 结论
从以上运行结果可以看出,调用FFT 库函数直接计算X(k)速度最快,所
用时间趋于0,矩阵运算次之,用循环变量逐点计算运行速度最慢。因此FF T 算法大大提高了DFT 的实用性。
2.利用DFT 实现两序列的卷积运算,并研究DFT 点数与混叠的关系。
(1)已知两序列: ⎩⎨⎧>≤≤=3;0
3
0;)5/3()(n n n h n ,用MATLAB 生成随机输入
信号x(n),n 的取值为0~2;
(2)用直接法(即用线性卷积的定义计算,见下式)计算线性卷积y(n)=x(n)*h(n)的结果,并以图形方式表示结果;
20),()()(1
-+≤≤-⨯=
∑-=M N n m n h m x n y N m
其中:序列)1N n 0(),n (x -≤≤和序列)1M n 0(),n (h -≤≤
(3)用MATLAB 编制利用DFT 计算线性卷积y(n)=x(n)*h(n)的程序;分别令圆周卷积的点数为L=5,6,8,10,以图形方式表示结果。 (4)对比直接法和圆周卷积法所得的结果。 源程序如下:
用直接法和MATLAB 编制利用DFT 分别计算线性卷积y(n)=x(n)*h(n)的程序: N=0:3; M=3;
x=rand(1,M); h=(3/5).^N; y1=conv(h,x);
Xk2=fft(x,10); %做10点fft Hk2=fft(h,10); Yk2=Xk2.*Hk2; y2=ifft(Yk2);
Xk3=fft(x,8); %做点8点fft Hk3=fft(h,8);