数字信号处理课后习题Matlab作业.docx
《数字信号处理课后习题Matlab作业.docx》由会员分享,可在线阅读,更多相关《数字信号处理课后习题Matlab作业.docx(22页珍藏版)》请在冰豆网上搜索。
![数字信号处理课后习题Matlab作业.docx](https://file1.bdocx.com/fileroot1/2023-4/2/1d6ebefe-5fdb-4983-a915-995f52218865/1d6ebefe-5fdb-4983-a915-995f522188651.gif)
数字信号处理课后习题Matlab作业
数字信号处理MATLAB习题
数字信号处理MATLAB习题
M1-1已知
,
,
,以抽样频率
对上述三个信号进行抽样。
在同一张图上画出
,
和
及抽样点,对所得结果进行讨论。
解:
从以上两幅图中均可看出,三个余弦函数的周期虽然不同,但它们抽样后相应抽样点所对应的值都相同。
那么这样还原回原先的函数就变成相同的,实际上是不一样的。
这是抽样频率太小的原因,我们应该增大抽样频率才能真实还原。
如下图:
f=50Hz
程序代码
f=10;
t=-0.2:
0.001:
0.2;
g1=cos(6.*pi.*t);
g2=cos(14.*pi.*t);
g3=cos(26.*pi.*t);
k=-0.2:
1/f:
0.2;
h1=cos(6.*pi.*k);
h2=cos(14.*pi.*k);
h3=cos(26.*pi.*k);
%subplot(3,1,1);
%plot(k,h1,'r.',t,g1,'r');
%xlabel('t');
%ylabel('g1(t)');
%subplot(3,1,2);
%plot(k,h2,'g.',t,g2,'g');
%xlabel('t');
%ylabel('g2(t)');
%subplot(3,1,3);
%plot(k,h3,'b.',t,g3,'b');
%xlabel('t');
%ylabel('g3(t)');
plot(t,g1,'r',t,g2,'g',t,g3,'b',k,h1,'r.',k,h2,'g.',k,h3,'b.')
xlabel('t');
ylabel('g(t)');
legend('g1(t)','g2(t)','g3(t)');
M2-1利用DFT的性质,编写一MATLAB程序,计算下列序列的循环卷积。
(1)g[k]={1,-3,4,2,0,-2,},h[k]={3,0,1,-1,2,1};
(2)x[k]=cos(
k/2),y[k]=3k,k=0,1,2,3,4,5。
解:
(1)
循环卷积结果
6.0000-3.000017.0000-2.00007.0000-13.0000
程序代码
g=[1-3420-2];
h=[301-121];
l=length(g);
L=2*l-1;
GE=fft(g,L);
HE=fft(h,L);
y1=ifft(GE.*HE);
forn=1:
l
ifn+l<=L
y2(n)=y1(n)+y1(n+l);
else
y2(n)=y1(n);
end
end
y2
stem(0:
l-1,y2)
xlabel('k')
ylabel('y(k)')
title('循环卷积')
(2)
循环卷积结果
-71.0000-213.000089.0000267.000073.0000219.0000
程序代码
k=0:
5;
x=cos(pi.*k./2);
y=3.^k;
l=length(x);
L=2*l-1;
GE=fft(x,L);
HE=fft(y,L);
y1=ifft(GE.*HE);
forn=1:
l
ifn+l<=L
y2(n)=y1(n)+y1(n+l);
else
y2(n)=y1(n);
end
end
y2
stem(0:
l-1,y2)
xlabel('k')
ylabel('y’(k)')
title('循环卷积')
M2-2已知序列
(1)计算序列DTFT的表达式
并画出N=10时,
的曲线。
(2)编写一MATLAB程序,利用fft函数,计算N=10时,序列x[k]的DTFT在
的抽样值。
利用hold函数,将抽样点画在
的曲线上。
解:
(1)
程序代码
N=10;
k=-N:
N;
x=cos(k.*pi./(2*N));
W=linspace(-pi,pi,512);
X=zeros(1,length(W));
fork=-N:
N
X1=x(k+N+1).*exp(-j.*W.*k);
X=X+X1;
end
plot(W,abs(X))
xlabel('W');
ylabel('abs(X)');
(2)
程序代码
N=10;
k=-N:
N;
x=cos(k.*pi./(2*N));
X_21=fft(x,21);
L=-10:
10;
W=linspace(-pi,pi,1024);
X=zeros(1,length(W));
fork=-N:
N
X1=x(k+N+1).*exp(-j.*W.*k);
X=X+X1;
end
plot(W,abs(X));holdon;
plot(2*pi*L/21,fftshift(abs(X_21)),'o');
xlabel('W');
ylabel('abs(X)');
M2-3已知一离散序列为
。
用长度N=64的Hamming窗对信号截短后近似计算其频谱。
试用不同的A和B的取值,确定用Hamming窗能分辨的最小的谱峰间隔
中c的值。
解:
f1=100Hz
f2=120Hz时
f2=140Hz时
f2=160Hz时
由以上三幅图可见
f2=140Hz时,各谱峰可分辨。
则
又
且
所以c=3.2(近似值)
程序代码
N=64;
L=1024;
f1=100;f2=160;;
fs=800;
A=1;B1=1;B2=0.5;B3=0.25;B4=0.05;
T=1/fs;
ws=2*pi*fs;
k=0:
N-1;
x1=A*cos(2*pi*f1*T*k)+B1*cos(2*pi*f2*T*k);
x2=A*cos(2*pi*f1*T*k)+B2*cos(2*pi*f2*T*k);
x3=A*cos(2*pi*f1*T*k)+B3*cos(2*pi*f2*T*k);
x4=A*cos(2*pi*f1*T*k)+B4*cos(2*pi*f2*T*k);
hf=(hamming(N))';
x1=x1.*hf;
x2=x2.*hf;
x3=x3.*hf;
x4=x4.*hf;
X1=fftshift(fft(x1,L));
X2=fftshift(fft(x2,L));
X3=fftshift(fft(x3,L));
X4=fftshift(fft(x4,L));
W=T*(-ws/2+(0:
L-1)*ws/L)/(2*pi);
subplot(2,2,1);
plot(W,abs(X1));
title('A=1,B=1');
xlabel('W');
ylabel('X1');
subplot(2,2,2);
plot(W,abs(X2));
title('A=1,B=0.5');
xlabel('W');
ylabel('X2');
subplot(2,2,3);
plot(W,abs(X3));
title('A=1,B=0.25');
xlabel('W');
ylabel('X3');
subplot(2,2,4);
plot(W,abs(X4));
title('A=1,B=0.05');
xlabel('W');
ylabel('X4');
M2-4已知一离散序列为
0k63。
其中,
,
。
(1)对x[k]做64点FFT,画出此时信号的谱。
(2)如果
(1)中显示的谱不能分辨两个谱峰,是否可对
(1)中的64点信号补0而分辨出两个谱峰。
通过编程进行证实,并解释其原因。
解:
(1)
程序代码
W0=2*pi/15;
W1=2.3*pi/15;
N=64;
k=0:
N-1;
x=cos(W0*k)+0.75*cos(W1*k);
X=fft(x);
plot(k/N,abs(X));
gridon;
title('64点FFT');
(2)
由以上三幅图看出:
不能对
(1)中的64点信号补零而分辨出两个谱峰,这样的方法只能改变屏幕分辨率,但可以通过加hamming窗来实现对谱峰的分辨。
程序代码
W0=2*pi/15;
W1=2.3*pi/15;
N=64;
L=1024;
k=0:
N-1;
x=cos(W0*k)+0.75*cos(W1*k);
X=fft(x,L);
plot((0:
L-1)/N,abs(X));
gridon;
title('1024点FFT');
M2-5已知一连续信号为x(t)=exp(-3t)u(t),试利用DFT近似分析其频谱。
若要求频率分辨率为1Hz,试确定抽样频率fsam、抽样点数N以及持续时间Tp。
解:
本题使用矩形窗,则
,
由以上三幅图可以看出当fsam越来越大时,近似值越来越接近于实际值。
即fsam越大拟合效果越好,造成的混叠也是在可以允许的范围内。
程序代码
fs=100;
ws=2*pi*fs;
Ts=1/fs;
N=fs;
x=exp(-3*Ts*(0:
N-1));
y=fft(x,N);
l=length(y);
k=linspace(-ws/2,ws/2,l);
plot(k,Ts*fftshift(abs(y)),'b:
');
holdon;
w=linspace(-ws/2,ws/2,1024);
y1=sqrt(1./(9+w.^2));
plot(w,y1,'r')
title('fs=100Hz时的频谱')
legend('近似值','实际值);
M2-6试用DFT近似计算高斯信号
的频谱抽样值。
通过和频谱的理论值
比较,讨论如何根据时域的信号来恰当地选取截短长度和抽样频率使计算误差能满足精度要求。
解:
由以上三幅图可以看出:
当时域截取长度相同时,抽样间隔越小时误差越小,当抽样间隔一定时,时域截取长度越长,误差越小。
当取抽样间隔为1S,时域截取长度为2S时,误差较大,绝对误差在0.5左右;当抽样间隔为0,5S,时域截取长度为2S时,误差比间隔为1S时小,绝对误差不大于0.2;当抽样间隔为0.5S时域截取长度为4S时,误差更小,绝对误差不大于0.04。
因为时域截取长度越长,保留下来的原信号中的信息越多,抽样间隔越小,频谱越不容易发生混叠,所以所得频谱与理论值相比,误差更小。
程序代码
Ts=0.5;
N=4;
N0=64;
k=(-N/2:
(N/2))*Ts;
x=exp(-pi*(k).^2);
X=Ts*fftshift(fft(x,N0));
w=-pi/Ts:
2*pi/N0/Ts:
(pi-2*pi/N0)/Ts;
XT=(pi/pi)^0.5*exp(-w.^2/4/pi);
subplot(2,1,1)
plot(w/pi,abs(X),'-o',w/pi,XT);
xlabel('\omega/\pi');
ylabel('X(j\omega)');
legend('试验值','理论值');
title(['Ts=',num2str(Ts)'''N=',num2str(N)]);
subplot(2,1,2)
plot(w/pi,abs(X)-XT)
ylabel('实验误差')
xlabel('\omega/\pi');