大连理工大学实验报告
学院(系): 专业: 班级:
姓 名: 学号: 组: ___ 实验时间: 实验室: 实验台:
指导教师签字: 成绩:
实验三 信号抽样
一、实验目的
1 学会运用MATLAB 完成信号抽样及对抽样信号的频谱进行分析; 2 学会运用MATLAB 改变抽样间隔,观察抽样后信号的频谱变化; 3 学会运用MATLAB 对抽样后的信号进行重建。
二、习题
1. 设有三个不同频率的正弦信号,频率分别为f 1=100Hz , f 2=200Hz , f 3=3800Hz 。
现在用抽样频率f 3=3800Hz 对这三个正弦信号进行抽样,用MA TLAB 命令画出各抽样信号的波形及频谱,并分析频率混叠现象。 解:分别写出三个频率正弦波的代码与图形: (f1=100HZ的正弦信号) 代码如下: Ts=1/3800; dt=0.0001;
t1= -0.008:dt:0.008;
ft=sin(2*pi*100*t1).*(uCT(t1+0.005)-uCT(t1-0.005)); subplot(221);
plot(t1,ft), grid on;
axis([-0.006 0.006 -1.1 1.1]); xlabel('Time(sec)'),ylabel('f(t)') title('正弦信号波形 ');
N=5000; k = -N:N;
W = 2*pi*k/((2*N+1)*dt); Fw= dt*ft*exp(-j*t1'*W); subplot(222); plot(W,abs(Fw)); grid on;
axis([-30000 30000 0 0.006]); xlabel('\omega'),ylabel('F(w)'); title('正弦信号的频谱'); t2=-0.008:Ts:0.008;
fst=sin(2*pi*100*t2).*(uCT(t2+0.005)-uCT(t2-0.005)); subplot(223);
plot(t1,ft,':'),hold on; stem(t2,fst),grid on;
axis([-0.005 0.005 -1.1 1.1]); xlabel('Time(sec)'),ylabel('fs(t)'); title('抽样后的信号'),hold off; Fsw= Ts*fst*exp(-j*t2'*W); subplot(224);
plot(W,abs(Fsw)), grid on; axis([-30000 30000 0 0.006]); xlabel('\omega'),ylabel('Fs(w)'); title('抽样信号的频谱');
matlab 波形如下:
100HZ 正弦信号波形
0.5-0.5
-1-6
-3
100HZ 正弦信号的频谱
F (w )
-3-4
-2
02Time(sec)
4x 10
6
-3
-3
f (t )
-2-1012x 10
3
4
ω
100HZ 抽样信号的频谱
100HZ 抽样后的信号
-5
F s (w )
0Time(sec)
5x 10
-3
f s (t )
-3
-2-1012x 10
3
4
ω
其中单个正弦信号(未经抽样)的频谱放大后如下:
(200HZ 的正弦信号) 代码如下:
Ts=1/3800; dt=0.0001;
t1= -0.003:dt:0.003;
ft=sin(2*pi*200*t1).*(uCT(t1+0.0025)-uCT(t1-0.0025)); subplot(221);
plot(t1,ft), grid on;
axis([-0.003 0.003 -1.1 1.1]); xlabel('Time(sec)'),ylabel('f(t)') title('200HZ正弦信号波形 '); N=5000; k = -N:N;
W = 2*pi*k/((2*N+1)*dt); Fw= dt*ft*exp(-j*t1'*W); subplot(222); plot(W,abs(Fw)); grid on;
axis([-30000 30000 0 0.003]); xlabel('\omega'),ylabel('F(w)'); title('200HZ正弦信号的频谱'); t2=-0.003:Ts:0.003;
fst=sin(2*pi*200*t2).*(uCT(t2+0.0025)-uCT(t2-0.0025)); subplot(223);
plot(t1,ft,':'),hold on; stem(t2,fst),grid on;
axis([-0.003 0.003 -1.1 1.1]); xlabel('Time(sec)'),ylabel('fs(t)');
title('200HZ抽样后的信号'),hold off;
Fsw= Ts*fst*exp(-j*t2'*W); subplot(224);
plot(W,abs(Fsw)), grid on; axis([-30000 30000 0 0.003]); xlabel('\omega'),ylabel('Fs(w)'); title('200HZ抽样信号的频谱');
matlab 波形如下:
200HZ 正弦信号波形
0.5-0.5
-1-3
-3
200HZ 正弦信号的频谱
F (w )
-3-2
-1
01Time(sec)
2x 10
3
-3
-3
f (t )
-2-1012x 10
3
4
ω
200HZ 抽样信号的频谱
200HZ 抽样后的信
号
-3
F s (w )
-2
-1
01Time(sec)
2x 10
3
-3
f s (t )
-3
-2-1012x 10
3
4
ω
(3800HZ 正弦信号) 代码如下: Ts=1/3800; dt=0.00001;
t1= -1/7600:dt:1/7600;
ft=sin(2*pi*3800*t1).*(uCT(t1+1/7600)-uCT(t1-1/7600)); subplot(221);
plot(t1,ft), grid on;
axis([-1/7600 1/7600 -1.1 1.1]); xlabel('Time(sec)'),ylabel('f(t)') title('3800HZ正弦信号波形 '); N=10000; k = -N:N;
W = 2*pi*k/((2*N+1)*dt); Fw= dt*ft*exp(-j*t1'*W); subplot(222); plot(W,abs(Fw)); grid on;
axis([-200000 200000 0 0.00015]); xlabel('\omega'),ylabel('F(w)'); title('3800HZ正弦信号的频谱'); t2=-1/7600:Ts:1/7600;
fst=sin(2*pi*3800*t2).*(uCT(t2+1/7600)-uCT(t2-1/7600)); subplot(223);
plot(t1,ft,':'),hold on; stem(t2,fst),grid on;
axis([-1/7600 1/7600 -1.1 1.1]); xlabel('Time(sec)'),ylabel('fs(t)');
title('3800HZ抽样后的信号'),hold off; Fsw= Ts*fst*exp(-j*t2'*W); subplot(224);
plot(W,abs(Fsw)), grid on;
axis([-200000 200000 0 0.00015]); xlabel('\omega'),ylabel('Fs(w)'); title('3800HZ抽样信号的频谱');
matlab 波形如下:
3800HZ 正弦信号波形
-1
0Time(sec)
3800HZ 抽样后的信号
-1
0Time(sec)
1x 10
-4
1.51
-4
3800HZ 正弦信号的频谱
F (w )
0.50
-2
-4
f (t )
1x 10
-1
-4
01
x 10
2
5
ω
1.513800HZ 抽样信号的频谱
F s (w )
f s (t )
0.50-2
-101
x 10
2
5
ω
可知f=3800Hz的频谱直接混叠在一起,出不了明显的频谱图
2. 结合抽样定理,用MATLAB 编程实现Sa (t ) 信号经冲激脉冲抽样后得到的抽样信号
f s (t ) 及其频谱,并利用f s (t ) 重构Sa (t ) 信号。
解:认为原Sa(t)的信号带宽为wm=2,取wc=1.2wm 代码如下:
wm=2;
wc=1.2*wm; Ts=1; dt=0.1;
t1= -10:dt:10;
ft=sinc(t1/pi).*(uCT(t1+10)-uCT(t1-10)); N=5000; k = -N:N;
W = 2*pi*k/((2*N+1)*dt); n=-100:100; nTs=n*Ts;
fst=sinc(nTs/pi).*(uCT(nTs+10)-uCT(nTs-10)); subplot(221);
plot(t1,ft,':'),hold on; stem(nTs,fst),grid on; axis([-10 10 -0.4 1.1]);
xlabel('Time(sec)'),ylabel('fs(t)'); title('Sa(t)抽样后的信号'),hold off; Fsw= Ts*fst*exp(-j*nTs'*W); subplot(222);
plot(W,abs(Fsw)), grid on; axis([-20 20 0 4]);
xlabel('\omega'),ylabel('Fs(w)'); title('Sa(t)抽样信号的频谱'); t=-10:dt:10;
f=fst*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t)))); subplot(223); plot(t,f),grid on;
axis([-10 10 -0.4 1.1]); xlabel('t'),ylabel('f(t)');
title('由f(nTs)信号重建得到Sa(t)信号'); error = abs(f-ft); subplot(224)
plot(t,error),grid on
xlabel('t'),ylabel('error(t)');
title('重建信号与原Sa(t)信号的绝对误差');
matlab 的波形如下:
Sa(t)抽样后的信
号
Sa(t)
抽样信号的频谱
F s (w )
-5
0Time(sec)
5
10
f s (t )
-10
-20
-1001020
ω
重建信号与原Sa(t)信号的绝对误差
由f(nTs) 信号重建得到Sa(t)信
号e r r o r (t )
-5
0t
5
10
-10
f (t )
-10
-5
0t
510
三、实验体会
本次实验遇到的问题: 第一题:用书上的例子的代码解题,但是发现抽样信号的频谱与未抽样信号的频谱除了周期延拓外并没有幅度减去应有的倍数(变为1/T),后来发现算未经抽样的频谱公式为:Fw= dt*ft*exp(-j*t1'*W);,而经过抽样后的频谱的公式:Fsw= Ts*fst*exp(-j*t2'*W);两者没有实质的差别,唯一的区别是两者时间的单元分别为:dt 和Ts ,这样并不能引起幅度的变化,虽然解释了图形幅度没变,但是不知道理论上图形幅度缩减一定的倍数(1/T)的原因。
第二题:解本题时本来也想先作出未经抽样时Sa(t)的频谱的,但是最终matlab 没有通过编译,提示错误Error using ==> mtimes Out of memory. Type HELP MEMORY for your options.好像是超出内存限制。所以只能直接作出抽样后信号的频谱。再利用书上的公式作出重建的Sa(t)信号再求绝对误差,但是出现了在t=10处绝对误差突然增大的现象,调整dt 与Ts 的值后t=10处的绝对误差依然很大,这一点暂时没有解决。
四、问题与思考
(1)由于抽样间隔改为2.5,对比例2可以发现w s 明显变小,容易产生频谱混叠,而且低通滤波器的截止频率不满足w m