数字信号处理上机实验报告
14020710021 张吉凯
第一次上机
实验一:
设给定模拟信号()1000t a x t e -=,t 的单位是ms 。
(1) 利用MATLAB 绘制出其时域波形和频谱图(傅里叶变换),估计其等效带宽(忽略谱分量降低到峰值的3%以下的频谱)。 (2) 用两个不同的采样频率对给定的()a x t 进行采样。 ○1()()15000s a f x t x n =以样本秒采样得到。
()()11j x n X e ω画出及其频谱。 ○2()()11000s a f x t x n =以样本秒采样得到。
()()
11j x n X e ω画出及其频谱。
比较两种采样率下的信号频谱,并解释。
(1)MATLAB 程序:
N=10; Fs=5; T s=1/Fs;
n=[-N:T s:N];
xn=exp(-abs(n)); w=-4*pi:0.01:4*pi; X=xn*exp(-j*(n'*w)); subplot(211) plot(n,xn);
title('x_a(t)时域波形');
xlabel('t/ms');ylabel('x_a(t)'); axis([-10, 10, 0, 1]); subplot(212);
plot(w/pi,abs(X)); title('x_a(t)频谱图');
xlabel('\omega/\pi');ylabel('X_a(e^(j\omega))');
ind = find(X >=0.03*max(X))*0.01; eband = (max(ind) -min(ind)); fprintf('等效带宽为%fKHZ\n',eband); 运行结果:
等效带宽为12.110000KHZ
(2)MATLAB程序:
N=10;
omega=-3*pi:0.01:3*pi;
%Fs=5000
Fs=5;
T s=1/Fs;
n=-N:T s:N;
xn=exp(-abs(n));
X=xn*exp(-j*(n'*omega));
subplot(2,2,1);stem(n,xn);grid on;axis([-10, 10, 0, 1.25]); title('时域波形(f_s=5000)');
xlabel('n');ylabel('x_1(n)');
subplot(2,2,2);plot(omega/pi,abs(X));
title('频谱图(f_s=5000)');
xlabel('\omega/\pi');ylabel('X_1(f)');
grid on;
%Fs=1000
Fs=1;
T s=1/Fs;
n=-N:T s:N;
xn=exp(-abs(n));
X=xn*exp(-j*(n'*omega));
subplot(2,2,3);stem(n,xn);grid on;axis([-10, 10, 0, 1.25]); title('时域波形(f_s=1000)');
xlabel('n');ylabel('x_2(n)');
grid on;
subplot(2,2,4);
plot(omega/pi,abs(X));
title('频谱图(f_s=1000)');
xlabel('\omega/\pi');
ylabel('X_2(f)');
grid on;
运行结果:
实验二:
给定一指数型衰减信号()()0cos 2at x t e f t π-=,采样率1
s f T
=,T 为采样周期。为方便起见,重写成复指数形式()02j f t at x t e e π-=。
采样后的信号为()02j f nT anT x nT e e π-=,加窗后长度为L 的形式为:
()(),0,1,,1L x nT x nT n L ==-L
这3个信号()x t ,()x nT ,()L x nT 的幅度谱平方分别为: 模拟信号:
()()()
2
2
2
01
2X f a f f π=
+-
采样信号:
()()()2
201
?12cos 2aT aT
X
f e f f T e π--=--+
加窗(取有限个采样点)信号:
()()()()()22
02012cos 2?12cos 2aTL aTL L
aT
aT
e f f TL e X f e
f f T e
ππ------+=--+
且满足如下关系: ()()()()???lim ,lim s L
L f X f X f TX f X f →∞
→∞
== 实验内容
100.2sec ,0.5Hz,1Hz 2Hz =10s s a f f f L -====取采样频率分别取和,。
(1) 在同一张图上画出:模型号幅度谱平方()2
X f ;
()()2
?1Hz 2Hz 0Hz 3Hz s s f f TX
f f ==≤≤和时,采样信号幅度谱平方
(2) 在同一张图上画出:模型号幅度谱平方()2
X f ;
()()2
?2Hz 0Hz 3Hz s f TX
f f =≤≤时,采样信号幅度谱平方;改变L 值,
结果又如何?
(1)MATLAB 程序:
f=0:0.01:3; alpha=0.2; f0=0.5; L=10; T1=1; T2=0.5;
Xa=1./(alpha^2+(2*pi*(f-f0)).^2);
Xs1=T1*(1-2*exp(-alpha*T1*L)*cos(2*pi*(f-f0)*T1*L)+exp(-2*alpha*T1*L))./(1-2*exp(-alpha*T1)*cos(2*pi*(f-f0)*T1)+exp(-2*alpha*T1));
Xs2=T2*(1-2*exp(-alpha*T2*L)*cos(2*pi*(f-f0)*T2*L)+exp(-2*alpha*T2*L))./(1-2*exp(-alpha*T2)*cos(2*pi*(f-f0)*T2)+exp(-2*alpha*T2)); plot(f,Xa,'b');hold on;plot(f,Xs1,'g');hold on;plot(f,Xs2,'r'); xlabel('f/Hz');ylabel('|X(f)|^2'); grid on;
legend('模拟信号幅度谱平方|X(f)|^2', 'f_s=1Hz 时,采样信号幅度谱平方|TX(f)|^2', 'f_s=2Hz 时,采样信号幅度谱平方|TX(f)|^2');
运行结果:
(2)MATLAB程序:
f=0:0.01:3;
alpha=0.2;
f0=0.5;
L1=5;
L2=10;
L3=20;
T1 = 0.5
Xa=1./(alpha^2+(2*pi*(f-f0)).^2);
Xs1=T1*(1-2*exp(-alpha*T1*L1)*cos(2*pi*(f-f0)*T1*L1)+exp(-2*alpha*T1*L1))./( 1-2*exp(-alpha*T1)*cos(2*pi*(f-f0)*T1)+exp(-2*alpha*T1));
Xs2=T1*(1-2*exp(-alpha*T1*L2)*cos(2*pi*(f-f0)*T1*L2)+exp(-2*alpha*T1*L2))./( 1-2*exp(-alpha*T1)*cos(2*pi*(f-f0)*T1)+exp(-2*alpha*T1));
Xs3=T1*(1-2*exp(-alpha*T1*L3)*cos(2*pi*(f-f0)*T1*L3)+exp(-2*alpha*T1*L3))./( 1-2*exp(-alpha*T1)*cos(2*pi*(f-f0)*T1)+exp(-2*alpha*T1));
plot(f,Xa,'b');hold on;plot(f,Xs1,'g');hold on;
plot(f,Xs2,'r');hold on;plot(f,Xs3,'y')
xlabel('f/Hz');ylabel('|X(f)|^2');
grid on;
legend('模拟信号幅度谱平方|X(f)|^2', 'f_s=2Hz 时,采样信号幅度谱平方|TX(f)|^2(L=5)','f_s=2Hz 时,采样信号幅度谱平方|TX(f)|^2(L=10)','f_s=2Hz 时,采样信号幅度谱平方|TX(f)|^2(L=20)');
运行结果:
实验三:
设(){}11,2,2x n =,(){}21,2,3,4x n =,编写MATLAB 程序,计算: (1) 5点圆周卷积()1y n ; (2) 6点圆周卷积()2y n ; (3) 线性卷积()3y n ;
(4) 画出的()1y n ,()2y n 和()3y n 时间轴对齐。
MATLAB 程序:
a = [1,2,2];
b = [1,2,3,4];
y1 = cconv(a,b,5);
y2 = cconv(a,b,6);
y3 = conv(a,b);
figure(1);
subplot(311)
stem(y1);
grid on
title('五点圆周卷积y1(n)');
xlabel('n'),ylabel('y1(n)');axis([0 6 0 15])
subplot(312)
stem(y2);
grid on
title('六点圆周卷积y2(n)');
xlabel('n'),ylabel('y2(n)');axis([0 6 0 15])
subplot(313)
stem(y3);
grid on
title('线性卷积y3(n)');
xlabel('n'),ylabel('y3(n)');axis([0 6 0 15]); 运行结果:
x1=[1,2,2];
x2=[1,2,3,4];
n1=0:4;
y1=cconv(x1,x2,5);
n2=0:5;
y2=cconv(x1,x2,6);
n3=0:length(x1)+length(x2)-2; y3=conv(x1,x2);
subplot(3,1,1);
stem(n1,y1);
grid on;
axis([-1,6,0,16]);
subplot(3,1,2);
stem(n2,y2);
grid on;
axis([-1,6,0,16]);
subplot(3,1,3);
stem(n3,y3);
grid on;
axis([-1,6,0,16]);
运行结果:
实验四:
给定因果系统:()()()0.91y n y n x n =-+ (1) 求系统函数()H z 并画出零极点示意图。 (2) 画出系统的幅频特性()
j H e ω和相频特性()?ω。 (3) 求脉冲响应()h n 并画序列图。
提示:在MATLAB中,zplane(b,a) 函数可画零极点图;Freqz(b,a,N)可给出[]0,π范围内均匀间隔的N 点频率响应的复振幅;Impz(b,a,N)可求()H z 的逆变换(即脉冲响应)。
MATLAB 程序:
a = [1,0]
b = [1,-0.9] figure(1) zplane(b,a);
title('零极点分布图') w=[-3*pi:0.01:3*pi]; [h,phi]=freqz(b,a,w); figure(2);
subplot(3,1,1); plot(w, abs(h)); grid on;
title('幅频特性');
xlabel('f/Hz'),ylabel('H(f)');
subplot(3,1,2); plot(w, phi); grid on;
title('相频特性');
xlabel('f/Hz'),ylabel('W(f)'); subplot(3,1,3); impz(b,a);
运行结果:
第二次上机
1. 给定模拟信号()()()2sin 45cos 8x t t t ππ=+,对其进行采样,用DFT (FFT )进行信号频谱分析。
(1) 确定最小采样频率和最小采样点数。
(2) 若以()0.010:1t n n N ==-秒进行采样,至少需要取多少采样点? (3) 用DFT 的点数50,100N =画出信号的N 点DFT 的幅度谱,讨论幅度谱结果。
(4) N 分别为64N =和60N =,能否分辨出信号的所有频率分量。 (5) 在(3)和(4)的条件下做补0 FFT ,分析结果。
(6) 在不满足最小采样点数的情况下做补0DFT ,观察是否可以分辨出两
个频率分量。
(1)最小采样频率:8 ;最小采样点数:4 (2) 最小采样点数:50 (3)(4)MATLAB 程序:
N1=50;N2=100;N3=64;N4=60;
n1=0:N1-1; n2=0:N2-1; n3=0:N3-1; n4=0:N4-1;
w1=4*pi;w2=8*pi;T=0.01;
x1=2*cos(w1*n1*T)+5*cos(w2*n1*T); x2=2*cos(w1*n2*T)+5*cos(w2*n2*T); x3=2*cos(w1*n3*T)+5*cos(w2*n3*T); x4=2*cos(w1*n4*T)+5*cos(w2*n4*T); X1=abs(fft(x1,N1)); X2=abs(fft(x2,N2)); X3=abs(fft(x3,N3)); X4=abs(fft(x4,N4)); figure(1)
subplot(2,2,1),stem(n1,X1,'.');grid on; title('N=50');xlabel('n1');ylabel('X1'); subplot(2,2,2),stem(n2,X2,'.');grid on; title('N=100');xlabel('n2');ylabel('X2'); subplot(2,2,3),stem(n3,X3,'.');grid on; title('N=64');xlabel('n3');ylabel('X3'); subplot(2,2,4),stem(n4,X4,'.');grid on;
title('N=60');xlabel('n4');ylabel('X4');
运行结果:
(5)MATLAB程序:
Nb=200;
nb=0:Nb-1;
X5=abs(fft(x1,Nb));
X6=abs(fft(x2,Nb));
X7=abs(fft(x3,Nb));
X8=abs(fft(x4,Nb));
figure(2)
subplot(2,2,1),stem(nb,X5,'.');grid on;
title('N=50补零到200后的幅度值');xlabel('nb');ylabel('X5'); subplot(2,2,2),stem(nb,X6,'.');grid on;
title('N=100补零到200后的幅度值');xlabel('nb');ylabel('X6'); subplot(2,2,3),stem(nb,X7,'.');grid on;
title('N=64补零到200后的幅度值');xlabel('nb');ylabel('X7'); subplot(2,2,4),stem(nb,X8,'.');grid on;
title('N=60补零到200后的幅度值');xlabel('nb');ylabel('X8');
运行结果:
(6)MATLAB程序:
N9=3;
n9=0:N9-1;
x9=2*cos(w1*n9*T)+5*cos(w2*n9*T);
X9=abs(fft(x9,Nb));
figure(3)
stem(nb,X9,'.');grid on;
title('N=3不满足最小采样点时补零到200后的幅度值');xlabel('nb');ylabel('X9'); 运行结果:
2. 设雷达发射线性调频信号()()2
exp 2h t j t πμ=,13510μ=?,采样率
9210s f =?,采
样点数20000N =。回波信号()()()1
2
s t h t h t ττ=-+-,6110τ-=,62 1.110τ-=?。 (1) 画出()h t 的频谱。
(2) 利用DFT 的时延性质产生()s t ,比较直接在时域产生和在频域产生(再
变换到时域)的结果是否相同。
(3) 匹配滤波的结果是()()()y t s t h t *
=*-,(“*”表示线性卷积)。分别用直
接线性卷积和DFT 的卷积定理求解()y t 。比较二者结果,并记录两种方法的运行时间(用tic ,toc 指令)。 (4) 画出()y t 的频谱。
(1)MATLAB 程序:
mu=5e13;
fs=2e9;
T s=1/fs;
mu=5e13;
fs=2e9;
T s=1/fs;
N=20000;
tao1=1e-6;
tao2=1.1e-6;
delay1=ceil(tao1/T s); delay2=ceil(tao2/T s); n=0:N-1;
t=n*Ts;
h=exp(j*2*pi*mu*t.^2); H=abs(fft(h,N)); figure(1);
stem(n,H,'.');
grid on;
运行结果:
Ns=N+max(delay1,delay2);
s1=zeros(1,Ns);
s2=zeros(1,Ns);
s1(delay1+1:delay1+N)=exp(2*j*pi*mu*t.^2); s2(delay2+1:delay2+N)=exp(2*j*pi*mu*t.^2); s=s1+s2;
f=(0:1/Ns:1-1/Ns)*fs;
x=zeros(1,Ns);
x(1:N)=h;
x1=fft(x).*exp(-j*2*pi*tao1*f);
x2=fft(x).*exp(-j*2*pi*tao2*f);
xsum=ifft(x1+x2);
figure(2)
plot(abs(s));grid on;
hold on;
plot(abs(xsum),'r');grid on;
运行结果:
hh=zeros(1,N);
hh(1)=h(1);
hh(2:end)=fliplr(h(2:end));
hh=conj(hh);
tic;
y=conv(s,hh);
toc;
taob=(0:length(y)-1)*Ts-N*T s; figure(3);
plot(taob,abs(y));grid on;
hold on;
Ny=N+Ns-1;
tic;
hhf=conj(fft(h,Ny)); hf=fft(s,Ny); yf=(ifft(hf.*hhf));
toc;
stem(taob,circshift(abs(yf.'),N),'r'); grid on;
xlabel('10');ylabel('a');
运行结果:
Elapsed time is 3.462685 seconds. Elapsed time is 0.133051 seconds.
figure(4);
plot(abs(fft(yf))); grid on;
实验结果:
第三次上机
1.IIR滤波器设计
(1)用matlab确定一个数字IIR低通滤波器所有四种类型的最低阶数。指标如下:40kHz的采样率,4kHz的通带边界频率,8kHz的阻带边界频率,0.5dB 的通带波纹,40dB的最小阻带衰减。并在同一张图中画出每种滤波器的频率响应。
(1)MATLAB程序:
fc=40;fp=4;fs=8;rp=0.5;rs=40;
wp=2*pi*fp/fc;
ws=2*pi*fs/fc;
disp('buttord');
[n,wc]=buttord(wp,ws,rp,rs,'s');
[b,a]=butter(n,wc,'low','s');
w=0:0.002:5;
[h,w]=freqs(b,a,w);
h=20*log10(abs(h));
plot(w,h,'b-');
disp('cheb1ord');
[n,wpo]=cheb1ord(wp,ws,rp,rs,'s')
[b,a]=cheby1(n,rp,wpo,'low','s');
[h,w]=freqs(b,a,w);
h=20*log10(abs(h));
hold on;
plot(w,h,'r-');
disp('cheb2ord');
[n,wso]=cheb2ord(wp,ws,rp,rs,'s');
[b,a]=cheby2(n,rs,wso,'low','s');
[h,w]=freqs(b,a,w);
h=20*log10(abs(h));
hold on;
plot(w,h,'k-');
disp('ellipord');
[n,wc]=ellipord(wp,ws,rp,rs,'s');
[b,a]=ellip(n,rp,rs,wc,'low','s');
[h,w]=freqs(b,a,w);
h=20*log10(abs(h));
hold on;
plot(w,h,'g-');
legend('butter','cheby1','cheby2','ellip')
grid on;
xlabel('w');
ylabel('h');