信号与系统MATLAB仿真——信号及其运算

1. 知识回顾

(1)信号的分类:

  • 确定信号与随机信号;
  • 周期信号与非周期信号;
    • 周期信号在时间上必须是无始无终的
    • $f(t) = f(t + T)$
    • $f[k] = f[k + N]$
  • 连续时间信号和离散时间信号;
    • 连续信号是指在信号的定义域内,除若干个第一类间断点外,对于任意时刻都由确定的函数值的信号
    • 离散信号是指在信号的定义域内,只在某些不连续规定的时刻给出函数值,而在其他时刻没有给出函数的信号
  • 能量信号、功率信号与非功率非能量信号;
  • 时限与频限信号;
  • 物理可实现信号。

(2)信号能量:\[E = \mathop {\lim }\limits_{T \to \infty } \int_{ - T}^T {{f^2}(t{\rm{)dt}}} \]

\[P = \mathop {\lim }\limits_{T \to \infty } \frac{1}{{2T}}\int_{ - T}^T {{f^2}(t{\rm{)dt}}} \]

\[E = \mathop {\lim }\limits_{N \to \infty } \sum\limits_{k =  - N}^N {{{\left| {f[k]} \right|}^2}} \]

\[P = \mathop {\lim }\limits_{N \to \infty } \frac{1}{{2N + 1}}\sum\limits_{k =  - N}^N {{{\left| {f[k]} \right|}^2}} \]

  • 能量信号:$0 < E < \infty $,$P = 0$;
  • 功率信号:$0 < P < \infty $,$E = \infty $。

(3)冲激函数的性质

  • 加权特性(筛选特性):\[f(t)\delta (t - {t_0}) = f({t_0})\delta (t - {t_0})\]
  • 取样特性:\[\int_{ - \infty }^{ + \infty } {f(t)\delta (t - {t_0})}  = f({t_0})\]
  • 偶函数:\[f(t) = f( - t)\]
  • 展缩特性:\[\delta (at) = \frac{1}{{\left| a \right|}}\delta (t)\]\[\delta (at - {t_0}) = \frac{1}{{\left| a \right|}}\delta (t - \frac{{{t_0}}}{a})\]
  • 导数及其特性。

(4)正弦

  • 两个频率相同的正弦信号相加,即使其振幅和相位各不相同,但相加后结果仍是原频率的正弦信号;
  • 若一个正弦信号的频率是另一个正弦信号频率的整数倍时,则合成信号是一个非正弦周期信号,其周期等于基波的周期。

正弦型序列:\[f[k] = A\sin ({\Omega _0}k + \varphi )\]

  • $2\pi /{\Omega _0}$是正整数:周期序列,周期为$N$;
  • $2\pi /{\Omega _0}$为有理数,$2\pi /{\Omega _0} = N/m$:周期序列,周期$N = m(2\pi /{\Omega _0})$;
  • $2\pi /{\Omega _0}$为无理数:非周期序列,但包络仍为正弦函数。

(5)抽样信号\[Sa(t) = \frac{{\sin t}}{t}\]

  • 偶函数;
  • $Sa(0) = 1$;
  • $t = k\pi $为其零点;
  • $\int_{ - \infty }^{ + \infty } {Sa(t){\rm{dt}} = \pi } $;
  • $\mathop {\lim }\limits_{t \to  \pm \infty } Sa(t) = 0$。

(6)信号的分解

  • 分解为直流分量与交流分量;
  • 奇偶分解;
  • 分解为实部和虚部;
  • 分解为基本信号的有限项之和;
  • 因子分解;
  • 连续信号分解为矩形脉冲序列;
  • 正交分解。

(7)系统

  • 线性系统与非线性系统:线性包含齐次性和叠加性两个概念;
  • 时不变系统与时变系统:时不变系统的参数与时间无关而为一个常数,它的输入与输出的特性不随时间的起点而变化;
  • 因果系统与非因果系统:因果系统是指响应不出现于激励之前的系统;
  • 稳定系统与不稳定系统:若输入有界,则输出有界的系统称为稳定系统(BIBO准则);
  • 记忆系统与无记忆系统:记忆系统的输出不仅决定于当前时刻的输入,而且与它过去的状态(历史)有关。

2. 连续时间信号的MATLAB实现

2.1 正弦信号

A=1;
w0=2*pi;
phi=pi/6;
t=0:0.001:4;
ft=A*sin(w0*t+phi);
plot(t,ft);

2.2 指数信号

%实指数信号
A=1;
a=-0.4;
t=0:0.001:10;
ft=A*exp(a*t);
plot(t,ft);
title('实指数信号');

function xzsu(w,n1,n2,a)
%n1:绘制波形的起始时间
%n2:绘制波形的终止时间
%w:虚指数信号的角频率
%a:虚指数信号的幅度
t=n1:0.01:n2;
X=a*exp(1i*w*t);
Xr=real(X);
Xi=imag(X);
Xa=abs(X);
Xn=angle(X);
subplot(2,2,1);plot(t,Xr);axis([n1,n2,-(max(Xa)+0.5),max(Xa)+0.5]);title('实部');
subplot(2,2,3);plot(t,Xi);axis([n1,n2,-(max(Xa)+0.5),max(Xa)+0.5]);title('虚部');
subplot(2,2,2);plot(t,Xa);axis([n1,n2,0,max(Xa)+1]);title('模');
subplot(2,2,4);plot(t,Xn);axis([n1,n2,-(max(Xn)+1),max(Xn)+1]);title('相角');
end
%虚指数信号
xzsu(pi/4,0,15,2)

%复指数信号
t=0:0.01:3;
a=-1;b=10;
z=exp((a+1i*b)*t);
subplot(2,2,1);plot(t,real(z));title('实部');
subplot(2,2,3);plot(t,imag(z));title('虚部');
subplot(2,2,2);plot(t,abs(z));title('模');
subplot(2,2,4);plot(t,angle(z));title('相角');

2.3 单位冲激信号

close all
t1=-1;
t2=5;
t0=0;
dt=0.01;
t=t1:dt:t2;
n=length(t);
x=zeros(1,n);
x(1,(-t0-t1)/dt+1)=1/dt;
stairs(t,x);
axis([t1,t2,0,1.2/dt]);
title('单位冲激信号');

2.4 单位阶跃信号

function f=heaviside(t)
f=(t>0);
end
t=-1:0.001:3;
y=heaviside(t);
plot(t,y);
axis([-1,3,-0.1,1.2]);
title('单位阶跃信号');

2.5 符号函数

t=-5:0.01:5;
y=sign(t);
plot(t,y);
axis([-5,5,-1.1,1.1]);
title('符号函数');

2.6 抽样函数

t=-3*pi:pi/1000:3*pi;
ft=sinc(t/pi);
plot(t,ft);
title('抽样信号');

2.7 矩形脉冲信号

  • ft=rectpuls(t, width)用以产生一个幅值为1,宽度为width,相对于t=0点左右对称的脉冲信号。
t=0:0.001:4;
T=1;
ft=rectpuls(t-2*T,2*T);
plot(t,ft);
grid on;
axis([0,4,-0.5,1.5]);
title('矩形脉冲信号');

2.8 三角波脉冲信号

  • y=tripuls(t, width, skew)用以产生一个最大幅值为1,宽度为width,斜度为skew的三角波信号;
  • 斜度skew是一个介于-1到1之间的数,表示最大值所对应的横坐标位置,最大值出现在t=(width/2)×skew的位置。
t=-3:0.001:3;
ft=tripuls(t,4,0.5);
plot(t,ft);
title('三角波脉冲信号');

2.9 周期性矩形脉冲和三角波脉冲信号

  • y=square(t, DUTY)用以产生一个周期为2π,幅值为±1的周期性方波信号,DUTY表示占空比;
  • y=sawtooth(t, WIDTH)用以产生一个周期为2π,幅值为±1的周期性三角波信号,WIDTH在0到1之间,表示最大值出现的位置。
t=-0.0625:0.0001:0.0625;
y=square(2*pi*30*t,75);
plot(t,y);axis([-0.0625,0.0625,-1.5,1.5]);
grid on;

t=-5*pi:pi/100:5*pi;
ft=sawtooth(t,0.5);
plot(t,ft);
axis([-16,16,-1.5,1.5]);
grid on;

3. 离散时间信号的MATLAB实现

离散信号与连续信号的标示方法类似,只不过使用stem函数而不是plot函数来画出序列的波形。

3.1 正弦序列

k=0:39;
fk=sin(pi/6*k);
stem(k,fk);
title('正弦序列');

3.2 指数序列

function dszsu(c,a,k1,k2)
%c:指数序列的幅度
%a:指数序列的底数
%k1:绘制序列的起始序号
%k2:绘制序列的终止序号
k=k1:k2;
x=c*(a.^k);
stem(k,x,'filled');
hold on;
plot([k1,k2],[0,0]);
hold off;
end
subplot(2,2,1);dszsu(1,5/4,0,20);xlabel('k');title('f1[k]');
subplot(2,2,2);dszsu(1,3/4,0,20);xlabel('k');title('f2[k]');
subplot(2,2,3);dszsu(1,-5/4,0,20);xlabel('k');title('f3[k]');
subplot(2,2,4);dszsu(1,-3/4,0,20);xlabel('k');title('f4[k]');

function dxzsu(n1,n2,w)
%n1:绘制波形的起始时间序号
%n2:绘制波形的终止时间序号
%w:虚指数序列的角频率
k=n1:n2;
f=exp(1i*w*k);
Xr=real(f);
Xi=imag(f);
Xa=abs(f);
Xn=angle(f);
subplot(2,2,1);stem(k,Xr,'filled');title('实部');
subplot(2,2,3);stem(k,Xi,'filled');title('虚部');
subplot(2,2,2);stem(k,Xa,'filled');title('模');
subplot(2,2,4);stem(k,Xn,'filled');title('相角');
end
dxzsu(0,20,pi/4);

dxzsu(0,20,2);

只有当虚指数序列的角频率满足上文1(4)提到的条件时,信号的实部、虚部和相角都为周期序列,否则为非周期序列。

function dfzsu(n1,n2,r,w)
%n1:绘制波形的起始时间序号
%n2:绘制波形的终止时间序号
%w:复指数序列的角频率
%r:指数序列的底数
k=n1:n2;
f=(r*exp(1i*w)).^k;
Xr=real(f);
Xi=imag(f);
Xa=abs(f);
Xn=angle(f);
subplot(2,2,1);stem(k,Xr,'filled');title('实部');
subplot(2,2,3);stem(k,Xi,'filled');title('虚部');
subplot(2,2,2);stem(k,Xa,'filled');title('模');
subplot(2,2,4);stem(k,Xn,'filled');title('相角');
end
dfzsu(0,20,1.2,pi/4);

dfzsu(0,20,0.8,pi/4);

3.3 单位冲激序列

k=-30:30;
delta=[zeros(1,30),1,zeros(1,30)];
stem(k,delta);
title('单位冲激序列');

3.4 单位阶跃序列

k=-30:30;
uk=[zeros(1,30),ones(1,31)];
stem(k,uk);
title('单位阶跃序列');

4. 连续时间信号的基本运算与波形变换

相加

  • s=symadd(f1,f2)
  • ezplot(s)

相乘

  • w=symmul(f1,f2)
  • ezplot(w)

微分与积分

  • h=0.001;
  • x=0:h:pi;
  • y=diff(sin(x.^2))/h;
  • Quad('function_name',a,b);

时移、反折、尺度变换

  • y=subs(f,t,t-t0);%时移
  • y=subs(f,t,-t);%反折
  • y=subs(f,t,a*t);%尺度变换
  • y=-f;%倒相变换

4.1 平移、尺度变换

clear;
t=-15:0.01:20;
f=-2*(stepfun(t,-3)-stepfun(t,0))+ ...
    2*t.*(stepfun(t,0)-stepfun(t,2))+ ...
    (-2*t+8).*(stepfun(t,2)-stepfun(t,4));
subplot(2,2,1);plot(t,f);axis([-6,6,-3,5]);grid on;text(-2,3,'f(t)');
subplot(2,2,2);plot(t+1,f);axis([-6,6,-3,5]);grid on;text(-2,3,'f(t-1)');
subplot(2,2,3);plot(0.5*t-2,f);axis([-6,6,-3,5]);grid on;text(1,3,'f(2t+4)');
subplot(2,2,4);plot(2-t,f);axis([-6,6,-3,5]);grid on;text(-3,3,'f(2-t)');

4.2 积分与微分

h=0.001;
t=-3:h:3;
ft=tripuls(t,4,0.5);
y1=diff(ft)/h;
figure(1);
for x=1:length(t)
    y2(x)=sum(ft(1:x))/1000;
end
subplot(2,2,1);plot(t,ft);
title('f(t)');
subplot(2,2,2);plot(t(1:length(t)-1),y1);
title('df(t)/dt');
subplot(2,2,3);plot(t,y2);
axis([-3,3,0,2.5]);
title('integral of f(t)');

4.3 信号的算数运算

syms t;
f1=str2sym('(-t+4)*(heaviside(t)-heaviside(t-4))');
subplot(3,2,1);ezplot(f1);title('f1(t)');
f2=str2sym('sin(2*pi*t)');
subplot(3,2,2);ezplot(f2);title('f2(t)');
y1=subs(f1,t,-t);
f3=f1+y1;
subplot(3,2,3);ezplot(f3);title('f3(t)=f1(t)+f1(-t)');
f4=-f3;
subplot(3,2,4);ezplot(f4);title('f4(t)=-f3(t)');
f5=f2*f3;
subplot(3,2,5);ezplot(f5);title('f5(t)=f2(t)*f3(t)');
f6=f1*f2;
subplot(3,2,6);ezplot(f6);title('f6(t)=f1(t)*f2(t)');

5. 离散序列的基本运算与波形变换

5.1 相加

function [f,k]=lsxj(f1,f2,k1,k2)
%离散信号的相加,f(k)=f1(k)+f2(k)
%f1、f2、k1、k2分别是参加运算的两离散序列及其对应的时间向量
%f和k返回的是求和得到的离散序列及时间向量
k=min(min(k1),min(k2)):max(max(k1),max(k2));
s1=zeros(1,length(k));
s2=s1;
s1(find((k>=min(k1))&(k<=max(k1))==1))=f1;
s2(find((k>=min(k2))&(k<=max(k2))==1))=f2;
f=s1+s2;
stem(k,f,'filled');
axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)]);
end
f1=-2:2;
k1=-2:2;
f2=[1,1,1];
k2=-1:1;
subplot(2,2,1);stem(k1,f1);axis([-3,3,-2.5,2.5]);title('f1[k]');
subplot(2,2,2);stem(k2,f2);axis([-3,3,-2.5,2.5]);title('f2[k]');
subplot(2,2,3);[f,k]=lsxj(f1,f2,k1,k2);
title('f[k]=f1[k]+f2[k]')

5.2 相乘

function [f,k]=lsxc(f1,f2,k1,k2)
%离散信号的相乘,f(k)=f1(k)*f2(k)
%f1、f2、k1、k2分别是参加运算的两离散序列及其对应的时间向量
%f和k返回的是求积得到的离散序列及时间向量
k=min(min(k1),min(k2)):max(max(k1),max(k2));
s1=zeros(1,length(k));
s2=s1;
s1(find((k>=min(k1))&(k<=max(k1))==1))=f1;
s2(find((k>=min(k2))&(k<=max(k2))==1))=f2;
f=s1.*s2;
stem(k,f,'filled');
axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)]);
end
f1=-2:2;
k1=-2:2;
f2=[1,1,1];
k2=-1:1;
subplot(2,2,1);stem(k1,f1);axis([-3,3,-2.5,2.5]);title('f1[k]');
subplot(2,2,2);stem(k2,f2);axis([-3,3,-2.5,2.5]);title('f2[k]');
subplot(2,2,3);[f,k]=lsxc(f1,f2,k1,k2);
title('f[k]=f1[k]*f2[k]')

5.3 差分和求和

  • y=diff(f);

  • y=sum(f(k1:k2));

5.4 时移、反折、尺度变换

clear;
k=-12:12;
k1=2.*k+4;
f=-[stepfun(k,-3)-stepfun(k,-1)]+ ...
    4.*[stepfun(k,-1)-stepfun(k,0)]+ ...
    0.5*k.*[stepfun(k,0)-stepfun(k,11)];
f1=-[stepfun(k1,-3)-stepfun(k1,-1)]+ ...
    4.*[stepfun(k1,-1)-stepfun(k1,0)]+ ...
    0.5*k1.*[stepfun(k1,0)-stepfun(k1,11)];
subplot(2,2,1);stem(k,f);axis([-12,12,-1,6]);
grid on;
text(-8,3,'f[k]');
subplot(2,2,2);stem(k+1,f);axis([-12,12,-1,6]);
grid on;
text(-9.5,3,'f[k-1]');
subplot(2,2,3);stem(k,f1);axis([-12,12,-1,6]);
grid on;
text(-8,3,'f[2k+4]');
subplot(2,2,4);stem(2-k,f);axis([-12,12,-1,6]);
grid on;
text(5.5,3,'f[2-k]');

6. 信号的分解

6.1 连续时间信号的奇偶分解

t=-2.5:0.01:2.5;
subplot(2,2,1);
y=real((1-(t-1).^2).^0.5);
plot(t,y,'k');
axis equal;
grid on;
text(-0.75,0.75,'x(t)');
subplot(2,2,3);
ye=real(0.5*((1-(1-t).^2).^0.5+ ...
    (1-(-t-1).^2).^0.5));
plot(t,ye,'k');
axis equal;
grid on;
text(-0.75,0.75,'xe(t)');
subplot(2,2,4);
yo=real(0.5*((1-(1-t).^2).^0.5- ...
    (1-(-t-1).^2).^0.5));
plot(t,yo,'k');
axis equal;
grid on;
text(-0.75,0.75,'xo(t)');

6.2 离散序列的奇偶分解

function [xeven,xodd,m]=sigevenodd(x,n)
m1=max(abs(n));
m=-m1:m1;
x1=zeros(1,length(m));
for i=1:length(m)
    x1(find((m==n(i))==1))=x(i);
end
for i=1:length(m)
    xeven(i)=(x1(find((m==n(i))==1))+x1(find((m==-n(i))==1)))/2;
    xodd(i)=(x1(find((m==n(i))==1))-x1(find((m==-n(i))==1)))/2;
end
end
n0=0;
n1=-10;
n2=10;
n=n1:n2;
x=[(n-n0)>=0];
subplot(2,2,1);
stem(n,x);
xlabel('n');ylabel('x(n)');title('Step Sequence');
grid on;
[xeven,xodd,m]=sigevenodd(x,n);
subplot(2,2,3);
stem(m,xeven);
xlabel('m');ylabel('x even(n)');title('Even Part');
grid on;
subplot(2,2,4);
stem(m,xodd);
xlabel('m');ylabel('x odd(n)');title('Odd Part');
grid on;

posted @ 2020-05-18 16:17  叮叮当当sunny  阅读(5114)  评论(0编辑  收藏  举报