数字信号处理上机实验报告 下载本文

数字信号处理上机实验报告

实验一 熟悉MATLAB环境

一、实验目的

1、 熟悉MATLAB的主要操作命令。 2、 学会简单的矩阵输入和数据读写。 3、 掌握简单的绘图命令。

4、 用MATLAB编程并学会创建函数。 5、 观察离散系统的频率响应。

二、实验内容

认真阅读本章附录,在MATLAB环境下重新做一遍附录中的例子,体会各条命令的含义。在熟悉MATLAB基本命令的基础上,完成以下实验。

上机实验内容:

1、 数组的加减乘除和乘方运算,输入A??求C?A?B,1 2 3 4?,B??3 4 5 6?,

D?A?B,E?A.?B,F?A./B,G?A.^B,并用stem语句画出A、B、C、D、E、

F、G。

程序:

>> A=[1 2 3 4];B=[3 4 5 6];

C=A+B; D=A-B; E=A.*B; F=A./B; G=A.^B;

subplot(2,4,1);stem(A,'.'); subplot(2,4,2);stem(B,'.'); subplot(2,4,3);stem(C,'.'); subplot(2,4,4);stem(D,'.'); subplot(2,4,5);stem(E,'.'); subplot(2,4,6);stem(F,'.');

subplot(2,4,7);stem(G,'.')

2、 用MATLAB实现下列序列。 a) x(n)?0.8n 0?n?15 b) x(n)?e(0.2?3j)n 0?n?15

?n?0.2?)?2sin(0.25?n?0.1?) 0?n?15 c) x(n)?3cos(0.125程序: A) clear;clc; n=[0:15]; x1=0.8.^n;

subplot(3,1,1),stem(x1) title('x1=0.8^n')

xlabel('n'); ylabel('x1');

2

B) clear;clc; n=[0:15];

x2=exp((0.2+3j)*n); subplot(3,1,1),stem(x2) title('x2=exp((0.2+3j)*n)') xlabel('n'); ylabel('x2');

C) clear;clc; n=[0:15];

x3=3*cos(0.125*pi*n+0.2*pi)+2*sin(0.25*pi*n+0.1*pi); subplot(3,1,1),stem(x3)

title('x3=3*cos(0.125*pi*n+0.2*pi)+2*sin(0.25*pi*n+0.1*pi)') xlabel('n'); ylabel('x3');

3

3、 绘出下列时间常数的图形,对x轴,y轴以及图形上方均须加上适当的标注:

0?t?10s a) x(t)?sin(2?t) 100?t)sin(?t) 0?t?4s b) x(t)?cos(>> m=0:0.01:10; n=0:0.01:4; x1t=sin(2*pi*m);

x2t=cos(100*pi*n).*sin(pi*n); subplot(2,1,1);plot(m,x1t); subplot(2,1,2);plot(n,x2t);

4、 给定一因果系统H(z)=(1+2z?z)/(1-0.67z的幅频响应与相频响应。

>> b=[1,sqrt(2),1];a=[1,-0.67,0.9]; [h,w]=freqz(b,a);

am=20*log10(abs(h));% am=20*log10(abs(h))为幅频响应取dB subplot(2,1,1);

-1-2?1?z?2),求出并绘制H(z)

4

plot(w,abs(h));xlabel('w');ylabel('幅频响应');title('系统响应') ph=angle(h); subplot(2,1,2);

plot(w,ph);xlabel('w');ylabel('相频响应');

5、 计算序列?8 -2 -1 2 3?和序列?2 3 -1 -3?的离散卷积,并作图表示卷积结果。

>> a=[8 -2 -1 2 3];

b=[2 3 -1 -3]; c=conv(a,b); M=length(c)-1; n=0:1:M; stem(n,c);

xlabel('n');ylabel('幅度');

5

6、 求以下差分方程所描述系统的单位脉冲响应h(n),0?n?50:

y(n)?0.1y(n?1)?0.06y(n?2)?x(n)?2x(n?1)

程序: >> N=50;

a=[1 -2]; b=[1 0.1 -0.06]; x=[1 zeros(1,N-1)]; k=0:1:N-1; y=filter(a,b,x); stem(k,y);

xlabel('n');ylabel('幅度 ');

6

实验二 快速傅里叶变换(FFT)及其应用

一、实验目的

1、 在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉MATLAB中的有关函数。

2、 应用FFT对典型信号进行频谱分析。

3、 了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。

4、 应用FFT实现序列的线性卷积和相关。

二、实验内容 实验中用到的信号序列

a) 高斯序列

???n?p?q? 0?n?15 xa(n)??e?0 其他?2b) 衰减正弦序列

7

?e??nsin(2?fn) 0?n?15 xb(n)??0 其他?c) 三角波序列

0?n?3?n ?xc(n)??8?n 4?n?7

?0 其他?d) 反三角波序列

0?n?3?4?n ?xd(n)??n?4 4?n?7

?0 其他?上机实验内容:

(1)观察三角波和反三角波序列的时域和幅频特性,用N?8点FFT分析信号序列xc(n)和xd(n)的幅频特性,观察两者的序列形状和频谱曲线有什么异同?绘出两序列及其幅频特性曲线。 程序:

n=[0:3];k=[1:8];

Xc(n+1) = n;Xc(n+5) =4-n; Xd(n+1) = 4-n;Xd(n+5) =n;

三角波特性

subplot(2,2,1);plot(k-1,Xc);

xlabel('n');ylabel('时域特性');text(1,3,'三角波'); subplot(2,2,2);plot(k-1,abs(fft(Xc)));

xlabel('k');ylabel('幅频特性');text(4,10,'三角波'); 反三角波特性

subplot(2,2,3);plot(k-1,Xd);

xlabel('n');ylabel('时域特性');text(3,3,'反三角波'); subplot(2,2,4);plot(k-1,abs(fft(Xd)));

xlabel('k');ylabel('幅频特性');text(4,10,'反三角波');

8

在xc(n)和xd(n)末尾补零,用N?32点FFT分析这两个信号的幅频特性,观察幅频特性发生了什么变化?两种情况下的FFT频谱还有相同之处吗?这些变化说明了什么?

程序:

>> n=[0:3];k=[1:32]; Xc(n+1) = n;Xc(n+5) =4-n; Xd(n+1) = 4-n;Xd(n+5) =n;

Xc(9:32)=0;Xd(9:32)=0;k=1:32;figure;

subplot(2,2,1);plot(k-1,Xc);

xlabel('n');ylabel('时域特性');text(1,3,'三角波'); subplot(2,2,2);plot(k-1,abs(fft(Xc)));

9

xlabel('k');ylabel('幅频特性');text(4,10,'三角波');

subplot(2,2,3);plot(k-1,Xd);

xlabel('n');ylabel('时域特性');text(3,3,'反三角波'); subplot(2,2,4);plot(k-1,abs(fft(Xd)));

xlabel('k');ylabel('幅频特性');text(4,10,'反三角波');

?的16(2)用FFT分别计算xa(n)?p?8,q?2?和xb(n)???0.1,f?0.0625点循环卷积和线性卷积。 程序: >> n1=0:1:15;

p1=8; q1=2;

10

x=exp(-(n1-p1).^2/q1); n2=0:1:15; a=0.1; f2=0.0625;

y=(exp(-a*n2)).*sin(2*pi*f2*n2); N=length(x); n=0:N-1; n3=0:30; X=fft(x); Y=fft(y);

x32=[x zeros(1,16)]; y32=[y zeros(1,16)]; X32=fft(x32); Y32=fft(y32); z16=ifft(X.*Y); z32=ifft(X32.*Y32); subplot(2,2,1); plot(n,z16,'-*'); xlabel('n'); ylabel('z(n)'); title('循环卷积结果'); subplot(2,2,2);

plot(n3,z32(1:2*N-1),'-o'); xlabel('n'); ylabel('z(n)'); title('线性卷积结果'); rm16=real(ifft(conj(X).*Y)); rm32_0=real(ifft(conj(X32).*Y32)); rm32=[rm32_0(N+2:2*N) rm32_0(1:N)]; m=n;

11

subplot(2,2,3); plot(m,rm16,'--'); xlabel('m'); ylabel('rm');

title('循环相关结果'); m=-(N-1):N-1; subplot(2,2,4); plot(m,rm32,'--o'); xlabel('m');

ylabel('rm');title('线性相关结果');

(3)产生一512点随机序列x,并用x和x作线性卷积,观察卷(((en)en)cn)积前后x频谱变化。要求将x分成8段,分别采用重叠相加法和重叠保留((en)en)法。 程序:

12

>> n=0:7; m=1:512 xc(1:4)=n(1:4); xc(5:8)=8-n(5:8); xe=rand(1,512); Xek=fft(xe); hk=fft(xc,128); subplot(3,1,1) ; stem(m,Xek); xlabel('n'); ylabel('Xek'); title('卷积前序列'); for j=1:8;

x(j,:)=xe(64*(j-1)+1:64*j);

xk(j,:)=fft(x(j,:),128);

end;

y=zeros(1,576); for i=1:8 y=y+f(i,:); end

subplot(3,1,2) ; m=0:518;

plot(m,abs(fft(y(1:519)))); axis([0,518,0,250]); xlabel('k'); ylabel('频域');

title('重叠相加法幅频特性') x2(1,1:71)=[zeros(1,7) xe(1:64)];

for j=2:8

f(j,(64*(j-1)+1):(64*(j-1)+128))=ifft(xk(j,:).*hk);

13

x2(j,:)=xe((64*(j-1)-6):(64*j)); end

x2(9,:)=[xe(506:512),zeros(1,64)]; for j=1:9

xk2(j,:)=fft(x2(j,:),128); f2(j,:)=ifft(xk2(j,:).*hk); end;

y2=zeros(1,576); for i=1:9

y2(1,64*(i-1)+1:64*i)=f2(i,8:71); end

subplot(3,1,3); m=0:518;

plot(m,abs(fft(y2(1:519)))); axis([0,518,0,250]); xlabel('k'); ylabel('频域');

title('重叠保留法幅频特性')

14

(4)用FFT分别计算xa(n)?p?8,q?2?和xb(n)???0.1,f?0.0625?的自相关函数。 程序: >> N=16; n=0:N-1; p=8;q=2;

Xa(n+1)=exp(-(n-p).^2./q); a=0.1;f=0.0625;

Xb(n+1)=exp(-a.*n).*sin(2*pi*f.*n); N=length(Xa);

Fa=fft(Xa,2*N); Fb=fft(Xb,2*N); F1=conj(Fa).*Fa; X81=real(ifft(F1));

X81=[X81(N+2:2*N) X81(1:N)]; n=(-N+1):(N-1);

subplot(2,1,1);stem(n,X81); xlabel('n'); ylabel('幅度');

Fb=fft(Xb,2*N); F2=conj(Fb).*Fb; X82=real(ifft(F2));

X82=[X82(N+2:2*N) X82(1:N)]; % n=(-N+1):(N-1);

subplot(2,1,2);stem(n,X82);

xlabel('n'); ylabel('幅度');

15

小结:

1.熟悉了MATLAB的主要操作命令,学会了简单的绘图命令,会用MATLAB编程并学会创建函数,能通过图像观察离散系统的频率响应。

2.在理论学习的基础上,通过本实验,加深了对FFT的理解,熟悉MATLAB中的有关函数。能够应用FFT对典型信号进行频谱分析,从而了解应用FFT进行信号频谱分析过程中可出现的问题,学会了应用FFT实现序列的线性卷积和相关。

16