实验目的

1.了解常用的时域离散信号及其特点。

2.掌握 MATLAB 产生常用时域离散信号的方法。

3.掌握离散时间序列时域的基本运算方法。

4.掌握 MATLAB 语言进行离散序列运算的常用函数,掌握离散序列运算程序的编写方法。

实验环境

Windows 11 , MATLAB2021a

示例程序

(1)单位抽样序列$\delta(n)$

%用MATLAB的关系运算式来产生单位抽样序列δ(n)

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

n1=-5;n2=5;n0=0;%新建变量及赋值

n=n1:n2;%创建范围由n1到n2且步长为1的行矩阵

x=[n==n0];%除了在n=n0=0处将x赋值为true(1),别处均将x赋值为false(0)

stem(n,x,'filled');%绘制离散序列数据图

axis([n1,n2,0,1.1*max(x)]);%图轴范围

title('单位脉冲序列');%图名

xlabel('时间(n)');ylabel('幅度 x(n)')%图横纵坐标名

image-20221104182513881

(2)单位阶跃序列$u(n)$

%用MATLAB的关系运算式来产生单位阶跃序列u(n)

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行


n1=-2;n2=8;n0=0;%新建变量及赋值

n=n1:n2;%创建范围由n1到n2且步长为1的行矩阵

x=[n>=n0];%在n>=n0=0处将x赋值为true(1),别处将x赋值为false(0)

stem(n,x,'filled');%绘制离散序列数据图

axis([n1,n2,0,1.1*max(x)]);%图轴范围

title('单位阶跃序列');%图名

xlabel('时间(n)');ylabel('幅度 x(n)')%图横纵坐标名

image-20221104182618405

(3)复指数信号及采样

编写产生$\sigma=-0.1, w=0.6$的复指数连续时间信号和离散序列的程序

%编写产生σ=-0.1、w=0.6复指数连续时间信号和离散序列的程序

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

 

n1=30;a=-0.1;w=0.6;%新建变量及赋值

n=0:n1;%创建范围由0到n1且步长为1的行矩阵

x=exp((a+j*w)*n);%复指数原信号

subplot(2,2,1);%绘制两行两列的一组图中的第一幅图

plot(n,real(x));%绘制“x实部-n”二维线图

title('复指数原信号的实部');%图名

subplot(2,2,2);%绘制两行两列的一组图中的第二幅图

stem(n,real(x),'filled');%绘制“x实部-n”离散序列数据图

title('复指数原信号的实部');%图名

subplot(2,2,3);%绘制两行两列的一组图中的第三幅图

plot(n,imag(x));%绘制“x虚部-n”二维线图

title('复指数原信号的虚部');%图名

subplot(2,2,4);%绘制两行两列的一组图中的第四幅图

stem(n,imag(x),'filled');%绘制“x虚部-n”离散序列数据图

title('复指数原信号的虚部');%图名

image-20221104182730485

(4)正弦信号及采样

已知一时域周期性正弦信号的频率为1Hz,振幅值幅度为1V。在窗口上显示2个周期的信号波形,并对信号幅度$x(n)$的一个周期进行32点采样获得离散信号。试显示原连续信号和其采样获得的离散信号波形。

% 已知一时域周期性正弦信号的频率为1Hz,振幅值幅度为1V。

% 在窗口上显示2个周期的信号波形,并对信号幅度x(n)的一个周期进行32点采样获得离散信号。

% 试显示原连续信号和其采样获得的离散信号波形。

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

 

f=1;Um=1;nt=2;%新建变量及赋值

N=32;T=1/f;;%新建变量及赋值

dt=T/N;%计算采样时间间隔

n=0:nt*N-1;%计算总采样点数,并形成行矩阵

tn=n*dt;%计算每个采样点对应的时域时刻,并形成行矩阵

x=Um*sin(2*f*pi*tn);%正弦信号

subplot(2,1,1);plot(tn,x);%绘制原信号图

axis([0 nt*T 1.1*min(x) 1.1*max(x)]);%图轴范围设置

ylabel('x(t)');%y轴名称

subplot(2,1,2);stem(tn,x);%绘制采样后信号图

axis([0 nt*T 1.1*min(x) 1.1*max(x)]);%图轴范围设置

ylabel('x(t)');%y轴名称

image-20221104182853763

(5)矩形波信号及采样

已知一连续的周期性矩形波信号的频率为5kHz,振幅值幅度为0~2V。脉冲宽度与周期的比例为1:4,且在窗口上显示2个周期的信号波形,并对信号的一个周期进行16点采样获得离散信号。

% 已知一连续的周期性矩形波信号的频率为5kHz,振幅值幅度为0~2V。

% 脉冲宽度与周期的比例为1:4,且在窗口上显示2个周期的信号波形,

% 并对信号的一个周期进行16点采样获得离散信号。

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行



f=5000;nt=2;%新建变量及赋值

N=16;T=1/f;%新建变量及赋值

dt=T/N;%计算采样时间间隔

n=0:nt*N-1;%计算总采样点数,并形成行矩阵

tn=n*dt;%计算每个采样点对应的时域时刻,并形成行矩阵

x=square(2*f*pi*tn,25)+1;%生成矩形波

subplot(2,1,1);plot(tn,x);%绘制原信号图

axis([0 nt*T 1.1*min(x) 1.1*max(x)]);%图轴范围设置

ylabel('x(t)');%y轴名称

subplot(2,1,2);stem(tn,x);%绘制采样后信号图

axis([0 nt*T 1.1*min(x) 1.1*max(x)]);%图轴范围设置

ylabel('x(n)')%y轴名称

image-20221104182932676

(6)序列的移位

已知$u(n)$为单位阶跃序列,$X_1(n)=u(n+6) (-10<n<10);X_2(n)=u(n-4)$$ (-10<n<10)$,对$u(n)$进行移位得到这些序列,并比较三个序列之间的关系。

% 已知u(n)为单位阶跃序列,X1(n)=u(n+6) (-10<n<10);X2(n)=u(n-4) (-10<n<10)

% 对u单位阶跃序列(n)进行移位,并比较三个序列之间的关系

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行



n1=-10;n2=10;%新建变量及赋值

k0=0;k1=-6;k2=4;%新建变量及赋值

n=n1:n2;%创建范围由n1到n2且步长为1的行矩阵

x0=[n>=k0];%在n>=k0处将x0赋值为true(1),别处将x0赋值为false(0)

x1=[(n-k1)>=0];%在(n-k1)>=0处将x1赋值为true(1),别处将x1赋值为false(0)

x2=[(n-k2)>=0];%在(n-k2)>=0处将x2赋值为true(1),别处将x2赋值为false(0)

subplot(3,1,1),stem(n,x0,'filled','k');%u(n)绘图

axis([n1,n2,1.1*min(x0),1.1*max(x0)]);

ylabel('u(n)');

subplot(3,1,2),stem(n,x1,'filled','k');%u(n+6)绘图

axis([n1,n2,1.1*min(x1),1.1*max(x1)]);

ylabel('u(n+6)');

subplot(3,1,3),stem(n,x2,'filled','k');%u(n-4)绘图

axis([n1,n2,1.1*min(x2),1.1*max(x2)]);

ylabel('u(n-4)');

image-20221104183032754

(7)相加运算

已知$u(n)$为单位阶跃序列,$x_1(n)=u(n+2)(-4<n<6) ;$$ x_2(n)=u(n-4)(-5<n<8)$,求$x(n)=x_1(n)+x_2(n)$的相加运算。

% 已知u(n)为单位阶跃序列,x1(n)=u(n+2)(-4<n<6) ; x2(n)=u(n-4) (-5<n<8)

% 求x(n)=x1(n)+x2(n)的相加运算

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

 

n1=-4:6;n01=-2;%新建变量及赋值

x1=[(n1-n01)>=0];%在(n1-n01)>=0处将x1赋值为true(1),别处将x1赋值为false(0)

n2=-5:8;n02=4;%新建变量及赋值

x2=[(n2-n02)>=0];%在(n2-n02)>=0处将x2赋值为true(1),别处将x2赋值为false(0)

n=min([n1,n2]):max([n1,n2]); %为 x 信号建立时间序列 n

N=length(n);%测时间序列n的长度

y1=zeros(1,N);y2=zeros(1,N);%创建长度为N的全零行矩阵

y1(find((n>=min(n1))&(n<=max(n1))))=x1;%把x1赋值进y1

y2(find((n>=min(n2))&(n<=max(n2))))=x2;%把x2赋值进y2

x=y1+y2;%相加

 

%% 绘图

subplot(3,1,1),stem(n1,x1,'filled','k');

%axis([n1,n2,1.1*min(x0),1.1*max(x0)]);

ylabel('x1(n)');

subplot(3,1,2),stem(n2,x2,'filled','k');

%axis([n1,n2,1.1*min(x1),1.1*max(x1)]);

ylabel('x2(n)');

subplot(3,1,3),stem(n,x,'filled');

axis([min(n),max(n),1.1*min(x),1.1*max(x)]);

ylabel('x(n)');

image-20221104183151866

(8)复指数序列

$ f(n)=e^{(0.1+j1.6π)n } (0<=n<=16)$

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

 

n1=16;a=0.1;w=1.6*pi;%新建变量及赋值

n=0:n1;%创建范围由0到n1且步长为1的行矩阵

x=exp((a+j*w)*n);%复指数原信号

subplot(2,2,1);%绘制两行两列的一组图中的第一幅图

plot(n,real(x));%绘制“x实部-n”二维线图

title('复指数原信号的实部');%图名

subplot(2,2,2);%绘制两行两列的一组图中的第二幅图

stem(n,real(x),'filled');%绘制“x实部-n”离散序列数据图

title('复指数原信号的实部');%图名

subplot(2,2,3);%绘制两行两列的一组图中的第三幅图

plot(n,imag(x));%绘制“x虚部-n”二维线图

title('复指数原信号的虚部');%图名

subplot(2,2,4);%绘制两行两列的一组图中的第四幅图

stem(n,imag(x),'filled');%绘制“x虚部-n”离散序列数据图

title('复指数原信号的虚部');%图名

image-20221104183300157

(9)正弦序列

$f(n)=3 \cos \frac{n \pi}{4}(0<=n<=20)$

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

w=pi/4;Um=3;%新建变量及赋值

n1=20;%新建变量及赋值

n=0:n1;%创建范围由0到n1且步长为1的行矩阵

x=Um*cos(w*n);%正弦信号

 

%% 绘图

subplot(1,2,1); 

plot(n,x);  

title('原信号');  

subplot(1,2,2);     

stem(n,x,'filled'); 

title('离散信号');

image-20221104183358035

(10)相加运算-2

$x(n)=u(n+2)+u(n-2)$,$(-5<=n<=5)$

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

 

n1=-5:5;n01=-2;%新建变量及赋值

x1=[(n1-n01)>=0];%在(n1-n01)>=0处将x1赋值为true(1),别处将x1赋值为false(0)

n2=-5:5;n02=2;%新建变量及赋值

x2=[(n2-n02)>=0];%在(n2-n02)>=0处将x2赋值为true(1),别处将x2赋值为false(0)

n=min([n1,n2]):max([n1,n2]); %为x信号建立时间序列n

N=length(n);%测时间序列n的长度

y1=zeros(1,N);y2=zeros(1,N);%创建长度为N的全零行矩阵

y1(find((n>=min(n1))&(n<=max(n1))))=x1;%把x1赋值进y1

y2(find((n>=min(n2))&(n<=max(n2))))=x2;%把x2赋值进y2

x=y1+y2;%相加

 

%% 绘图

subplot(3,1,1),stem(n1,x1,'filled','k');

%axis([n1,n2,1.1*min(x0),1.1*max(x0)]);

ylabel('x1(n)');

subplot(3,1,2),stem(n2,x2,'filled','k');

%axis([n1,n2,1.1*min(x1),1.1*max(x1)]);

ylabel('x2(n)');

subplot(3,1,3),stem(n,x,'filled');

axis([min(n),max(n),1.1*min(x),1.1*max(x)]);

ylabel('x(n)');

image-20221104183455291

(11)矩形波信号及采样-2

已知一连续周期性方波信号的频率为 200Hz,振幅值幅度为-1V到1V之间。在窗口上显示2个周期的信号波形,用Fs=4kHz的频率对连续信号进行采样。试显示原连续信号和其采样获得的离散信号波形。

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

 

f=200;nt=2;%新建变量及赋值

fs=4000;N=fs/f;T=1/f;%新建变量及赋值

dt=T/N;%计算采样时间间隔

n=0:nt*N-1;%计算总采样点数,并形成行矩阵

tn=n*dt;%计算每个采样点对应的时域时刻,并形成行矩阵

x=square(2*f*pi*tn,50);%生成方波

subplot(2,1,1);plot(tn,x);%绘制原信号图

axis([0 nt*T 1.1*min(x) 1.1*max(x)]);%图轴范围设置

ylabel('x(t)');%y轴名称

subplot(2,1,2);stem(tn,x);%绘制采样后信号图

axis([0 nt*T 1.1*min(x) 1.1*max(x)]);%图轴范围设置

ylabel('x(n)')%y轴名称

image-20221104183523276

(12)复合序列

$x(n)= \begin{cases}2 n+5 & (-4 \leq n \leq-1) \\ 6 & (0 \leq n \leq 4) \\ 0 & \text { 其它 }\end{cases}$

% 已知u(n)为单位阶跃序列,x1(n)=u(n+2)(-4<n<6) ; x2(n)=u(n-4) (-5<n<8)

% 求x(n)=x1(n)+x2(n)的相加运算

close all;clc;clear;%关闭所有之前的窗口,清除所有变量,清空命令行

 

n1=-4:-1;%新建变量及赋值

x1=2*n1+5;

n2=0:4;%新建变量及赋值

x2(find((n2>=min(n2))&(n2<=max(n2))))=6;%取值范围内全部取6

n=min([n1,n2]):max([n1,n2]); %为 x 信号建立时间序列 n

N=length(n);%测时间序列n的长度

y1=zeros(1,N);y2=zeros(1,N);%创建长度为N的全零行矩阵

y1(find((n>=min(n1))&(n<=max(n1))))=x1;%把x1赋值进y1

y2(find((n>=min(n2))&(n<=max(n2))))=x2;%把x2赋值进y2

x=y1+y2;%相加

 

%% 绘图

subplot(3,1,1),stem(n1,x1,'filled','k');

%axis([n1,n2,1.1*min(x0),1.1*max(x0)]);

ylabel('x1(n)');

subplot(3,1,2),stem(n2,x2,'filled','k');

%axis([n1,n2,1.1*min(x1),1.1*max(x1)]);

ylabel('x2(n)');

subplot(3,1,3),stem(n,x,'filled');

axis([min(n),max(n),1.1*min(x),1.1*max(x)]);

ylabel('x(n)');

image-20221104183601952

最后修改:2023 年 04 月 20 日
点赞有超好看的动画,不想看看吗😏