数字信号处理实验 下载本文

实验一: 系统及响应时域采样及频域采样

1. 实验目的

(1)掌握用卷积求系统响应及卷积定理的验证;

(2)掌握连续信号经理想采样前后的频谱变化关系, 加深对时域采样定理的理解。

(3)掌握频域采样引起时域周期化概念, 加深对频域采样定理的理解。 (4) 掌握序列傅里叶变换的计算机实现方法, 利用序列的傅里叶变换对连续信号、离散信号及系统响应进行频域分析。

3. 实验内容及步骤

(1) 认真复习卷积定理、 时域采样和频域采样理论。 (2) 编制实验用主程序及相应子程序。 ①系统单位脉冲响应序列产生子程序。

ha(n)?R10(n)

hb(n)??(n)?2.5?(n?1)?2.5?(n?2)??(n?3)

有限长序列线性卷积子程序,

用于完成两个给定长度的序列的卷积。

可以直接调用MATLAB语言中的卷积函数conv。 conv用于两个有限长度序列的卷积,它假定两个序列 都从n=0开始。调用格式如下: y=conv (x, h) ② 卷积定理的验证。

k)?Xa(ej?k)H(ej?k),k?0,1,2,?,M?1Y(ej?(3)时域采样定理的验证:信号产生子程序, 用于产生实验中要用到的下列信号序列:

xa(t)=Ae-at sin(Ω0t)u(t) 进行采样, 可得到采样序列

xa(n)=xa(nT)=Ae-anT sin(Ω0nT)u(n), 0≤n<50

其中A为幅度因子, a为衰减因子, Ω0是模拟角频率, T为采样间隔。 这些参数都要在实验过程中由键盘输入, 产生不同的xa(t)和xa(n)。

>> %1时域采样序列分析 A=400;a=200;w=200; n=0:50-1;fs=1000;

xa=A*exp((-a)*n/fs).*sin(w*n/fs); k=-200:200;w=(pi/100)*k;

Xk=fft(xa,length(k));magX=abs(Xk);angX=angle(Xk); subplot(2,1,1);

stem(n,xa,'.');xlabel('n');ylabel('xa(n)'); title('信号的类型');

subplot(2,1,2);plot(w/pi,magX);xlabel('w/pi'); ylabel('|Yjw|');title('Y(|jw|)');

信号的类型150100xa(n)500-500510152025nY(|jw|)30354045501000|Yjw|5000-2.5-2-1.5-1-0.5w/pi00.511.52(4)频域采样定理的验证:

>> %1时域采样序列分析fs=1000 A=400; a=200; w=200;;

ts=64*10^(-3); fs=1000;T=1/fs;

n=0:ts/T-1; xn=A*exp((-a)*n/fs).*sin(w*n/fs); Xk=fft(xn);

subplot(3,2,1);stem(n,xn);xlabel('n,fs=1000Hz'); ylabel('xn');title('xn'); subplot(3,2,2);plot(n,abs(Xk));xlabel('k,fs=1000Hz'); title('|X(k)|');

xn20010005000204060n,fs=1000Hzxn800020|X(k)|xn0-2004060k,fs=1000Hz|X(k)|802002001000510n,fs=200Hzxn1500510k,fs=200Hz|X(k)|15xn0-200200500xn0-2000102030n,fs=500Hz4000102030k,fs=500Hz40>> %频域采样定理验证

M=26;N=32;n=0:M;n1=0:13;x1=n1+1; n2=14:26;x2=27-n2; x=[x1,x2];Xk=fft(x,512); X32k=fft(x,32);

k=0:511;w=(pi/512)*k;

subplot(321);stem(n,x);xlabel('n'); ylabel('xn');axis([0,31,0,15]);

subplot(322);plot(w,abs(Xk));xlabel('k'); ylabel('|X(k)|');axis([0,1,0,200]) X16k=X32k(1:2:N);

x32n=ifft(X32k);x16n=ifft(X16k,16); k1=0:31;k2=0:15;

subplot(323);stem(k1,abs(X32k));xlabel('k'); ylabel('X32k');axis([0,31,0,200]);

subplot(325);stem(k2,abs(X16k));xlabel('k'); ylabel('|X(k)|');axis([0,15,0,200]) n=0:31;

subplot(324);stem(n,abs(x32n));xlabel('n'); ylabel('|x(n)|');axis([0,31,0,15]) n1=0:15;

subplot(326);stem(n1,abs(x16n));xlabel('n'); ylabel('|x(n)|');axis([0,31,0,15])