实验2 常见数字信号的产生与显示
1.实验目的
复习MATLAB的使用方法和基本功能;熟悉单位冲激序列、单位阶跃序列、矩形序列和指数序列等常用序列的产生;掌握利用MATLAB画图函数显示信号波形的方法。
2.实例分析
2.1 常用离散序列的产生和图形显示
例1.1产生单位冲激序列
10 ()
00
n
n
n
δ
=
⎧
=⎨
≠
⎩
在MATLAB中,函数zeros(1,N)产生一个N个零的行向量,利用它可以实现在有限区间上的单位冲激序列。
按照之前学习过的MATLAB编程方法,将下列指令编辑到“exlimp.m”文件中。
% exe1imp.m 利用zeros(1,N)产生单位冲激序列
clear;%清除空间变量
clc;%清除屏幕
n=-49:49; %定义横坐标轴
x=zeros(1,99); %MATLAB中数组下标从1开始
x(50)=1;
close all;%关闭所有窗口
stem(n,x); %绘制离散序列数据
title('单位冲激序列');
运行“exe1imp.m”文件将产生如图1-1所示的序列。
例1.2产生单位阶跃序列
10 ()
00
n
u n
n
≥
⎧
=⎨
<
⎩
在MATLAB中,函数ones(1,N)产生一个N个1的行向量,利用它可以实现在有限区间上的单位阶跃序列。
同样,将下列指令编辑到“exe1step.m”文件中。
% exe1step.m 利用ones(1,N)产生单位阶跃序列
n=-49:49; %定义横坐标
x=ones(1,99); % MATLAB中数组下标从1开始
x(1:49)=0;
close all;
stem(n,x); %绘制离散序列数据
title('单位阶跃信号序列');
运行“exe1step.m”文件将产生如图1-2所示的序列。
图2-1 单位冲激序列
图2-2 单位阶跃序列
例1.3产生矩形序列
101 ()
N
n N
R n
else
≤≤-
⎧
=⎨
⎩
在MATLAB 中,符号函数sign(x)在x 大于0时其值为1;在x 等于0时其值为0;在x 小于0时其值为-1。
利用它可以实现窗长度为N 的矩形序列。
将下列指令编辑到 “exe1rectang.m ” 文件中。
% exe1rectang.m 利用sign(x)产生矩形序列
N=10;
n=0:30;%定义横坐标
x=sign(sign(N-1-n)+1); % MATLAB 中数组下标从1开始
n=-10:30;
x=[zeros(1,10),x];
close all ;
stem(n,x); %绘制离散序列数据
title('矩形序列');
运行“exe1rectang.m ” 文件将产生如图1-3所示的序列。
图2-3 矩形序列
例1.4 产生实指数序列 ()()
0n x n a u n n =≤<∞ 在MATLAB 中,可以用运算符 “.^”,即点乘方实现实指数序列。
将下列指令编辑到 “exe1relexp.m ” 文件中。
作出实指数序列在a 分别等于 -0.5 和 -1.5时候的信号波形图
% exe1realexp.m 利用运算符 “.^” 产生实指数序列
N=10;
n=0:N-1;
a=0.5; b=2;
x=a.^n;
y=b.^n;
close all ;
subplot(1,2,1);
stem(n,x);
subplot(1,2,2);
stem(n,y);
运行“exe1realexp.m ” 文件将产生如图1-4所示的序列。
图2-4 实指数序列
例1.5 产生正弦和余弦序列
()sin()x n A n n ω=-∞≤<∞, ()cos()y n A n n ω=-∞≤<∞
将下列指令编辑到 “exe1sincos.m ” 文件中。
N=50;
A=1;
f=50;
fs=1000;
n=0:N-1;
x=A*sin(2*pi*f*n/fs);
y=A*cos(2*pi*f*n/fs);
close all ;
subplot(1,2,1);
stem(n,x);
subplot(1,2,2);
stem(n,y);
运行“exe1sincos.m ” 文件将产生如图1-5所示的序列。
图2-5 正弦和余弦序列
例1.6 产生复指数序列
()cos()sin()j n x n e n j n ωωω==+
复指数序列也称为复正弦序列,由余弦序列做实部,正弦序列做虚部构成。
在MATLAB 中,函数exp(x)为指数函数,real(x)取x 的实部,imag(x)取x 的虚部,abs(x)求x 的模值,angel(x)求x 的幅角。
将下列指令编辑到 “exe1exp.m ” 文件中。
N=50;
n=0:N-1;
x=exp(j*pi*n/6);
x_real=real(x);
x_imag=imag(x);
x_magnitute=abs(x);
x_phase=angle(x)*180/pi;
subplot(2,2,1);
stem(n,x_real);
xlabel('x-real');
subplot(2,2,2);
stem(n,x_imag);
xlabel('x-imag');
subplot(2,2,3);
stem(n,x_magnitute);
xlabel('x-magnitute');
subplot(2,2,4);
stem(n,x_phase);
xlabel('x-phase');
运行“exe1exp.m ” 文件将产生如图1-6所示的序列。
图2-6 复指数序列
2.2 常用信号的产生和显示
例1.7产生均匀分布的白噪声信号
在MATLAB中,函数rand(x)产生均匀分布的随机数,利用它可以实现在有限区间上的白噪声信号。
将下列指令编辑到“exe1noise.m”文件中。
clear
N=500;
x=rand(1,N);
close all;
subplot(1,2,1);
plot(x);
grid on;
subplot(1,2,2);
hist(x);
grid on;
运行“exe1noise.m”文件将产生如图1-7所示的图形显示。
图2-7 白噪声信号
例1.8 产生信号处理中的sinc(t)函数。
已知()()sinc t sin t /t ππ=,将下列指令编辑到 “exe1sinc.m ” 文件中。
clear
N=200;
step=4*pi/N;
t=-2*pi:step:2*pi;
y=sinc(t);
close all ;
plot(t,y,'LineWidth',2);
axis([-8 8 -0.3 1.1])
grid on ;
运行“exe1sinc.m ” 文件将产生如图1-8所示的图形显示。
图2-8 sinc 函数曲线
3. 实验内容
3.1 分别给出模拟信号1()sin(10)2cos(20)x t t t ππ=+在采样周期T1=1/100s 和模拟信号42()sin(5000)2cos(10)x t t t ππ=+在采样周期T2=1/50 000s 下得到的离散时间信号,作出波形图。
3.2 作出实指数序列在a 分别等于 -0.5 和 -1.5时候的信号波形图。
3.3 某正弦信号的幅值为1,初始初始相位为0,频率为10Hz ,作出其在0.5s 内的波形图;若在正弦信号上叠加范围在0~ 0.2之间的均匀分布的白噪声,试作出0.5s 内的新的波形图。
3.4 试用另一种方法产生例1.3中的矩形信号。
4. 思考题
如何绘制()sin t/2/t ππ和()sin 2t /t ππ波形,试说明方法原理。