数字信号处理DFTMATLAB程序.docx
《数字信号处理DFTMATLAB程序.docx》由会员分享,可在线阅读,更多相关《数字信号处理DFTMATLAB程序.docx(8页珍藏版)》请在冰豆网上搜索。
数字信号处理DFTMATLAB程序
实验三频域信号处理
1.实验目的
(1)学习信号DFT变换的matlab实现;
(2)学习fft的matlab实现;
(3)验证DFT的相关性质。
2.思考题
(1)若是一个128点的有限长序列,求其128点DFT结果;
程序如下:
求DFT变换矩阵A:
clc;
clear;
N=128;
A=dftmtx(N)
Ai=conj(dftmtx(N));
n=0:
(N-1);
k=0:
(N-1);
nk=n'*k;
Wn=(sin(pi/8)+sin(pi/4)).^nk
Wk=conj(Wn)/N;
求128点的DFT(分别用FFT函数和dftmtx函数)
clc;
clear;
N=128;
n=0:
N-1;
x=sin(pi/8*n)+sin(pi/4*n);
subplot(3,1,1)
plot(n,x);
gridon
title('原图')
y1=fft(x,N);
A=dftmtx(N);
y2=x(1:
N)*A;
subplot(3,1,2)
plot(n,y1)
gridon
title('FFT')
subplot(3,1,3)
plot(n,y2)
gridon
title('dftmtx')
程序运行结果如图1所示:
图1
(2)对模拟信号,以,进行采样,求
a)N=40点的FFT幅度谱,从图中能否观察出两个频谱分量;
b)提高采样点数值N=128,再求该信号的幅度频谱,此时幅度频谱发生了什么变化?
信号的两个模拟频率和数字频率分别为多少?
FFT频谱分析结果和理论上是否一致?
程序如下:
clc;
clear;
N=40;
n=0:
N-1;
t=*n
x=2*sin(4*pi*t)+5*sin(8*pi*t);
subplot(2,1,1)
plot(x(1:
N))
gridon
title('原图')
y1=fft(x,N);
subplot(2,1,2)
plot(n,y1(1:
N))
gridon
title('40点采样')
结果如图2:
图2
clc;
clear;
N=128;
n=0:
N-1;
t=*n
x=2*sin(4*pi*t)+5*sin(8*pi*t);
subplot(2,1,1)
plot(x(1:
N))
title('原图')
y1=fft(x,N);
subplot(2,1,2)
plot(n,y1(1:
N))
title('128点采样')
结果如图3:
图3
从图2,3中可以看出:
N=40和128点的FFT幅度谱中均出现了两个频谱分量.对于128点采样,,模拟频率分别为,那么,数字频率分别为。
(3)输入为,
系统采样响应为
验证请用时域卷积及频域两种方法计算系统输出响应,并验证20点的循环卷积定理
程序如下:
clc;
clear;
N=20;
n1=0:
19;
x=2*sin(n1*pi/4);
X1=fft(x,N)
n2=0:
9;
h=zeros(1,length(n2));
h
(1)=1;
h
(2)=;
h(3)=;
h(4)=1;
X2=fft(h,N)
y1=conv(x,h);
y2=circonv(x,h,20)
subplot(2,1,1)
X=fft(y2,N)
stem(X);
title('X=fft(y2,N)')
xlabel('n')
ylabel('X')
subplot(2,1,2)
XK=X1.*X2
stem(XK);
title('XK=X1.*X2')
xlabel('n')
ylabel('XK')
suptitle('时域卷积')
图4
clc;
clear;
N=20;
n1=0:
19;
x=2*sin(n1*pi/4);
X1=fft(x,N)
n2=0:
19;
h=zeros(1,length(n2));
h
(1)=1;
h
(2)=;
h(3)=;
h(4)=1;
X2=fft(h,N)
subplot(2,1,1)
X=fft(x.*h,N)
stem(X)
title('X=fft(x.*h,N)')
xlabel('n')
ylabel('X')
subplot(2,1,2)
XK=1/N*circonv(X1,X2,20)
stem(XK)
title('XK=1/N*circonv(X1,X2,20)')
xlabel('n')
ylabel('XK')
suptitle('频域卷积')
图5
(4)若,请计算实部与虚部对应的频域,并验证共轭对称性。
程序如下:
clc;
clear;
N=512;
e=;
n=0:
N-1;
x=4.*e.^(n/.*(cos(pi/4*n)+i*sin(pi/4*n));
yx=fft(x,N);
xr=4.*e.^(n/.*cos(pi/4*n);
xi=4.*e.^(n/.*sin(pi/4*n);
yr=fft(xr,N);
yi=fft(i*xi,N);
subplot(2,1,1)
plot(n,yx)
gridon
title('x(n)的FFT')
subplot(2,1,2)
plot(n,yr+yi)
gridon
title('x(n)实部的FFT与虚部的FFT之和')
图6