数字信号处理实验答案.docx
《数字信号处理实验答案.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验答案.docx(39页珍藏版)》请在冰豆网上搜索。
数字信号处理实验答案
实验一熟悉Matlab环境
一、实验目的
1.熟悉MATLAB的主要操作命令。
2.学会简单的矩阵输入和数据读写。
3.掌握简单的绘图命令。
4.用MATLAB编程并学会创建函数。
5.观察离散系统的频率响应。
二、实验内容
认真阅读本章附录,在MATLAB环境下重新做一遍附录中的例子,体会各条命令的含义。
在熟悉了MATLAB基本命令的基础上,完成以下实验。
上机实验内容:
(1)数组的加、减、乘、除和乘方运算。
输入A=[1234],B=[3456],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B并用stem语句画出A、B、C、D、E、F、G。
clearall;
a=[1234];
b=[3456];
c=a+b;
d=a-b;
e=a.*b;
f=a./b;
g=a.^b;
n=1:
4;
subplot(4,2,1);stem(n,a);
xlabel('n');xlim([05]);ylabel('A');
subplot(4,2,2);stem(n,b);
xlabel('n');xlim([05]);ylabel('B');
subplot(4,2,3);stem(n,c);
xlabel('n');xlim([05]);ylabel('C');
subplot(4,2,4);stem(n,d);
xlabel('n');xlim([05]);ylabel('D');
subplot(4,2,5);stem(n,e);
xlabel('n');xlim([05]);ylabel('E');
subplot(4,2,6);stem(n,f);
xlabel('n');xlim([05]);ylabel('F');
subplot(4,2,7);stem(n,g);
xlabel('n');xlim([05]);ylabel('G');
(2)用MATLAB实现下列序列:
a)x(n)=0.8n0≤n≤15
b)x(n)=e(0.2+3j)n0≤n≤15
c)x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π)0≤n≤15
d)将c)中的x(n)扩展为以16为周期的函数x16(n)=x(n+16),绘出四个周期。
e)将c)中的x(n)扩展为以10为周期的函数x10(n)=x(n+10),绘出四个周期。
clearall;
N=0:
15;
%a)x(n)=0.8n0≤n≤15
xa=0.8.^N;
figure;subplot(2,1,1);stem(N,xa);xlabel('n');xlim([016]);ylabel('xa');
%b)x(n)=e(0.2+3j)n0≤n≤15
xb=exp((0.2+3*j)*N);
subplot(2,1,2);stem(N,xb);
xlabel('n');xlim([016]);ylabel('xb');figure;
%c)x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π)0≤n≤15
xc=3*cos(0.125*pi*N+0.2*pi)+2*sin(0.25*pi*N+0.1*pi);
subplot(3,1,1);stem(N,xc);xlabel('n');xlim([016]);ylabel('xc');
%d)将c)中的x(n)扩展为以16为周期的函数x16(n)=x(n+16),绘出四个周期。
k=0:
3;m=0;
fori=1:
4
forj=1:
16
m=m+1;
n(m)=N(j)+16*k(i);
x16(m)=3*cos(0.125*pi*n(m)+0.2*pi)+2*sin(0.25*pi*n(m)+0.1*pi);
end
end
subplot(3,1,2);stem(n,x16);xlabel('n');ylabel('x16');
%e)将c)中的x(n)扩展为以10为周期的函数x10(n)=x(n+10),绘出四个周期。
forj=1:
10
x10(j)=x16(j);
end
fori=1:
3
form=1:
10
x10(i*10+m)=x10(m);
end
end
n=1:
40;
subplot(3,1,3);stem(n,x10);xlabel('n');ylabel('x10');
(3)x(n)=[1,-1,3,5],产生并绘出下列序列的样本:
a)x1(n)=2x(n+2)-x(n-1)-2x(n)
b)
clearall
n=1:
4;
T=4;
x=[1-135];
x(5:
8)=x(1:
4);
subplot(2,1,1);stem(1:
8,x);grid;
fori=1:
4
ifi-1<0
x1(i)=2*x(i+2)-x(i-1)-2*x(i);
else
x1(i)=2*x(i+2)-x(i-1+T)-2*x(i);
end
end
x1(5:
8)=x1(1:
4);
subplot(2,1,2);stem(1:
8,x1);grid;
(4)绘出下列时间函数的图形,对x轴、y轴以及图形上方均须加上适当的标注:
a)x(t)=sin(2πt)0≤t≤10s
b)x(t)=cos(100πt)sin(πt)0≤t≤4s
ta=0:
0.05:
10;
xa=sin(2*pi*ta);
subplot(2,1,1);plot(ta,xa);
xlabel('t');ylabel('幅度');
tb=0:
0.01:
4;
xb=cos(100*pi*tb).*sin(pi*tb);
subplot(2,1,2);plot(tb,xb);
xlabel('t');ylabel('幅度');
(5)编写函数stepshift(n0,n1,n2)实现u(n-n0),n1n0=5;ns=1;nf=10;%ns为起点;nf为终点;在=n=n0处生成单位阶跃序列
n=[ns:
nf];
x=[(n-n0)>=0];
stem(n,x);
(6)给一定因果系统
求出并绘制H(z)的幅频响应与相频响应。
clearall;
b=[1,sqrt
(2),1];
a=[1,-0.67,0.9];
[h,w]=freqz(b,a);
am=20*log10(abs(h));
subplot(2,1,1);plot(w,am);
ph=angle(h);
subplot(2,1,2);plot(w,ph);
(7)计算序列{8-2-123}和序列{23-1-3}的离散卷积,并作图表示卷积结果。
clearall;
a=[8-2-123];
b=[23-1-3];
c=conv(a,b);%计算卷积
M=length(c)-1;
n=0:
1:
M;
stem(n,c);
xlabel('n');ylabel('幅度');
(8)求以下差分方程所描述系统的单位脉冲响应h(n),0≤n≤50
y(n)+0.1y(n-1)-0.06y(n-2)=x(n)-2x(n-1)
clearall;
N=50;
a=[1-2];
b=[10.1-0.06];
x=[1zeros(1,N-1)];
k=0:
1:
N-1;
y=filter(a,b,x);
stem(k,y);
xlabel('n');ylabel('幅度');
实验二信号的采样与重建
一,实验目的
(1)通过观察采样信号的混叠现象,进一步理解奈奎斯特采样频率的意义。
(2)通过实验,了解数字信号采样转换过程中的频率特征。
(3)对实际的音频文件作内插和抽取操作,体会低通滤波器在内插和抽取中的作用。
二,实验内容
(1)采样混叠,对一个模拟信号Va(t)进行等间采样,采样频率为200HZ,得到离散时间信号V(n).Va(t)由频率为30Hz,150Hz,170Hz,250Hz,330Hz的5个正弦信号的加权和构成。
Va(t)=6cos(60pi*t)+3sin(300pi*t)+2cos(340pi*t)+4cos(500pi*t)+10sin(660pi*t)观察采样后信号的混叠效应。
程序:
clear,
closeall,
t=0:
0.1:
20;
Ts=1/2;
n=0:
Ts:
20;
V=8*cos(0.3*pi*t)+5*cos(0.5*pi*t+0.6435)-10*sin(0.7*pi*t);
Vn=8*cos(0.3*pi*n)+5*cos(0.5*pi*n+0.6435)-10*sin(0.7*pi*n);
subplot(221)
plot(t,V),
gridon,
subplot(222)
stem(n,Vn,'.'),
gridon,
(2)输入信号X(n)为归一化频率f1=0.043,f2=0.31的两个正弦信号相加而成,N=100,按因子M=2作抽取:
(1)不适用低通滤波器;
(2)使用低通滤波器。
分别显示输入输出序列在时域和频域中的特性。
程序:
clear;
N=100;
M=2;
f1=0.043;
f2=0.31;
n=0:
N-1;
x=sin(2*pi*f1*n)+sin(2*pi*f2*n);
y1=x(1:
2:
100);
y2=decimate(x,M,'fir');
figure
(1);
stem(n,x(1:
N));
title('inputsequence');
xlabel('n');ylabel('fudu');
figure
(2);
n=0:
N/2-1;
stem(n,y1);
title('outputsequencewithoutLP');
xlabel('n');ylabel('fudu');
figure(3);
m=0:
N/M-1;
stem(m,y2(1:
N/M));
title('outputsequencewithLP');
xlabel('n');ylabel('fudu');
figure(4);
[h,w]=freqz(x);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheinputsequence');
xlabel('w');ylabel('fudu');
figure(5);
[h,w]=freqz(y1);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheoutputsequencewithoutLP');
xlabel('w');ylabel('fudu');
figure(6);
[h,w]=freqz(y2);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheoutputsequencewithoutLP');
xlabel('w');ylabel('fudu');
(3)输入信号X(n)为归一化频率f1=0.043,f2=0.31的两个正弦信号相加而成,长度N=50,内插因子为2.
(1)不适用低通滤波器;
(2)使用低通滤波器。
分别显示输入输出序列在时域和频域中的特性。
程序:
clear,
closeall,
N=50;
L=2;
f1=0.043;
f2=0.31;
n=0:
N-1;
x=sin(2*pi*f1*n)+sin(2*pi*f2*n);
figure
(1);
stem(n,x(1:
N));
title('inputsequence');
xlabel('n');ylabel('fudu');
y1=zeros(1,N*2);
y1(1:
2:
N*2)=x;
figure
(2);
m=0:
N*L-1;
stem(m,y1(1:
N*L));
title('outputsequence');
xlabel('n');ylabel('fudu');
y2=interp(x,L);
figure(3);
m=0:
N*L-1;
stem(m,y2(1:
N*L));
title('outputsequence');
xlabel('n');ylabel('fudu');
figure(4);
[h,w]=freqz(x);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheinputsequence');
xlabel('w');ylabel('fudu');
figure(5);
[h,w]=freqz(y1);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheoutputsequence');
xlabel('w');ylabel('fudu');
figure(6);
[h,w]=freqz(y2);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheoutputsequence');
xlabel('w');ylabel('fudu');
2.(3)令x(n)=cos(2*pi*f*n/fs),其中f/fs=1/16,即每个周期内有16个点。
试用MATLAB编程实现:
1).作M=4倍的抽取,使每个周期变成4点。
程序:
clear,
closeall,
N=100;
M=4;
n=0:
N-1;
x=cos(2*pi*n*(1/16));
stem(n,x(1:
N));
title('inputsequence');
xlabel('n');ylabel('fudu');
y1=x(1:
4:
100);
y2=decimate(x,M,'fir');
figure
(2);
m=0:
N/4-1;
stem(m,y1);
title('outputsequence');
xlabel('n');ylabel('fudu');
figure(3);
m=0:
N/M-1;
stem(m,y2(1:
N/M));
title('outputsequence');
xlabel('n');ylabel('fudu');
figure(4);
[h,w]=freqz(x);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheinputsequence');
xlabel('w');ylabel('fudu');
figure(5);
[h,w]=freqz(y1);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheoutputsequence');
xlabel('w');ylabel('fudu');
figure(6);
[h,w]=freqz(y2);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheoutputsequence');
xlabel('w');ylabel('fudu');
2).作L=3倍的插值,使每个周期变成48点。
程序:
clear,
closeall,
N=50;
L=3;
n=0:
N-1;
x=cos(2*pi*n*(1/16));
figure
(1);
stem(n,x(1:
N));
title('inputsequence');
xlabel('n');ylabel('fudu');
y1=zeros(1,N*3);
y1(1:
3:
N*3)=x;
figure
(2);
m=0:
N*3-1;
stem(m,y1(1:
N*3));
title('outputsequence');
xlabel('n');ylabel('fudu');
y2=interp(x,L);
figure(3);
m=0:
5:
N*L-1;
stem(m,y2(1:
5:
N*L));
title('outputsequence');
xlabel('n');ylabel('fudu');
figure(4);
[h,w]=freqz(x);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheinputsequence');
xlabel('w');ylabel('fudu');
figure(5);
[h,w]=freqz(y1);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheoutputsequence');
xlabel('w');ylabel('fudu');
figure(6);
[h,w]=freqz(y2);
plot(w(1:
64),abs(h(1:
64)));
title('frequencyspectrumoftheoutputsequence');
xlabel('w');ylabel('fudu');
(4).输入信号x(n)为归一化频率分别是f1=0.04,f2=0.3的正弦信号相加而成,N=50,内插因子为5,抽取因子为3,给出按有理因子5/3做采样率转换的输入输出波形。
程序:
clear,
closeall,
N=50;
M=3;
L=5;
f1=0.04;
f2=0.3;
n=0:
N-1;
x=sin(2*pi*f1*n)+sin(2*pi*f2*n);
y=resample(x,L,M);
figure
(1);
stem(n,x(1:
N));
title('inputsequence');
xlabel('n');ylabel('fudu');
figure
(2);
m=0:
N-1;
stem(m,y(1:
N));
title('outputsequence');
xlabel('n');ylabel('fudu');
figure(3);
[h,w]=freqz(x);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheinputsequence');
xlabel('w');ylabel('fudu');
figure(4);
[h,w]=freqz(y);
plot(w(1:
512),abs(h(1:
512)));
title('frequencyspectrumoftheoutputsequence');
xlabel('w');ylabel('fudu');
实验三快速Fourier变换(FFT)及其应用
?
一、实验目的
?
?
?
1.?
在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉FFT子程序。
?
?
?
2.?
熟悉应用FFT对典型信号进行频谱分析的方法。
?
?
?
3.?
了解应用FFT进行信号频谱分析过程中可能出现的问题以便在实际中正确应用FFT。
?
?
?
4.?
熟悉应用FFT实现两个序列的线性卷积的方法。
?
?
?
5.?
初步了解用周期图法作随机信号谱分析的方法。
?
二、实验原理与方法
?
在各种信号序列中,有限长序列信号处理占有很重要地位,对有限长序列,我们可以使
用离散Fouier变换(DFT)。
这一变换不但可以很好的反映序列的频谱特性,而且易于用快速算法在计算机上实现,当序列x(n)的长度为N时,它的DFT定义为:
反变换为:
?
?
?
有限长序列的DFT是其Z变换在单位圆上的等距采样,或者说是序列Fourier变换的等距采样,因此可以用于序列的谱分析。
?
?
?
FFT并不是与DFT不同的另一种变换,而是为了减少DFT运算次数的一种快速算法。
它是对变换式进行一次次分解,使其成为若干小点数的组合,从而减少运算量。
常用的FFT是以2为基数的,其长度
。
它的效率高,程序简单,使用非常方便,当要变换的序列长度不等于2的整数次方时,为了使用以2为基数的FFT,可以用末位补零的方法,使其长度延长至2的整数次方。
?
?
?
(一)、在运用DFT进行频谱分析的过程中可能产生三种误差:
?
?
?
(1)?
?
?
混叠
?
?
?
序列的频谱时被采样信号的周期延拓,当采样速率不满足Nyquist定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱。
避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解,在一般情况下,为了保证高于折叠频率的分量不会出现,在采样前,先用低通模拟滤波器对信号进行滤波。
?
?
?
(2)?
?
?
泄漏
?
?
?
实际中我们往往用截短的序列来近似很长的甚至是无限长的序列,这样可以使用较短的DFT来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。
泄漏不能与混叠完全分开,因为泄漏导致频谱的扩展,从而造成混叠。
为了减少泄漏的影响,可以选择适当的窗函数使频谱的扩散减至最小。
?
?
?
(3)?
?
?
栅栏效应
?
?
?
DFT是对单位圆上Z变换的均匀采样,所以它不可能将频谱视为一个连续函数,就一定意义上看,用DFT来观察频谱就好像通过一个栅栏来观看一个图景一样,只能在离散点上看到真实的频谱,这样就有可能发生一些频谱的峰点或谷点被“尖桩的栅栏”所拦住,不能别我们观察到。
?
?
?
减小栅栏效应的一个方法就是借助于在原序列的末端填补一些零值,从而变动DFT的点数,这一方法实际上是人为地改变了对真实频谱采样的点数和位置,相当于搬动了每一根“尖桩栅栏”的位置,从而使得频谱的峰点或谷点暴露出来。
?
?
?
(二)、用FFT计算线性卷积
?
?
?
用FFT可以实现两个序列的圆周卷积。
在一定的条件下,可以使圆周卷积等于线性卷积。
一般情况,设两个序列的长度分别为N1和N2,要使圆周卷积等于线性卷积的充要条件是FFT的长度
N≥N1+N2
对于长度不足N的两个序列,分别将他们补零延长到N。
?
?
?
当两个序列中有一个序列比较长的时候,我们可以采用分段卷积的方法。
有两种方法:
重叠相加法。
将长序列分成与短序列相仿的片段,分别用FFT对它们作线性卷积,再将分段卷积各段重叠的部分相加构成总的卷积输出。
?
重叠保留法。
这种方法在长序列分段时,段与段之间保留有互相重叠的部分,在构成总的卷积输出时只需将各段线性卷积部分直接连接起来,省掉了输出段的直接相加。
?
?
?
(三)、用周期图法(平滑周期图的平均法)对随机信号