概述
点击上方蓝字关注“公众号”
MATLAB离散信号与系统的时域分析
当初学信号与系统,天书睡过去啊,一到考试心中mmp。理论的枯燥,有了MATLAB就生动形象啦。
本节旨在掌握:
1.学会用MATLAB表示常用离散信号的方法;
2.学会用MATLAB实现离散信号卷积的方法;
3. 学会用MATLAB求解离散系统的单位响应;
4. 学会用MATLAB求解离散系统的零状态响应;
壹
离散信号的MATLAB表示
表示离散时间信号f(k)需要两个行向量,一个是表示序号k=[ ],一个是表示相应函数值f=[ ],画图命令是stem。
01
正弦序列信号 正弦序列信号可直接调用MATLAB函数cos,例
当
是整数或分数时,才是周期信号。
k=0:40;
subplot(2,1,1)
stem(k,cos(k*pi/8),'filled')
title('cos(k*pi/8)')
subplot(2,1,2)
stem(k,cos(2*k),'filled')
title('cos(2*k)')
02
单位序列信号
本题先建立一个画单位序列
的M函数文件,画图时调用。
M文件建立方法:file / new / m-file 在文件编辑窗输入程序,保存文件名用函数名。
function dwxulie(k1,k2,k0)
% k1 , k2 是画图时间范围,k0是脉冲位置
k=k1:k2;
n=length(k);
f=zeros(1,n);
f(1,-k0-k1+1)=1;
stem(k,f,'filled')
axis([k1,k2,0,1.5])
title('单位序列δ(k)')
保存文件名dwxulie.m
画图时在命令窗口调用,例:dwxulie(-5,5,0)
03
单位阶跃序列信号
本题也可先建立一个画单位阶跃序列
的M函数文件,画图时调用。
function jyxulie(k1,k2,k0)
k=k1:-k0-1;
kk=-k0:k2;
n=length(k);
nn=length(kk)
u=zeros(1,n);
uu=ones(1,nn);
stem(kk,uu,'filled')
hold on
stem(k,u,'filled')
hold off
title('单位阶跃序列')
axis([k1 k2 0 1.5])
保存文件名jyxulie.m
画图时在命令窗口调用,例:jyxulie(-3,8,0)
04
实指数序列信号
c、 a是实数。
建立一个画实指数序列的M函数文件,画图时调用。
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
调用该函数画信号:
dszsu(1,5/4,0,40)
dszsu(1,-3/4,0,40)
贰
离散信号的卷积和
两个有限长序列f1,f2卷积可调用MATLAB函数conv,调用格式是f=conv(f1,f2), f是卷积结果,但不显示时间序号,可自编一个函数dconv给出f和k,并画图。
01
function [f,k]=dconv(f1,f2,k1,k2)
%The function of compute f=f1*f2
% f: 卷积和序列f(k)对应的非零样值向量
% k: 序列f(k)的对应序号向量
% f1: 序列f1(k)非零样值向量
% f2: 序列f2(k)的非零样值向量
% k1: 序列f1(k)的对应序号向量
% k2: 序列f2(k)的对应序号向量
f=conv(f1,f2) %计算序列f1与f2的卷积和f
k0=k1(1)+k2(1);%计算序列f非零样值的起点位置
k3=length(f1)+length(f2)-2;%计算卷积和f的非零样值的宽度
k=k0:k0+k3 %确定卷积和f非零样值的序号向量
subplot(2,2,1)
stem(k1,f1)%在子图1绘序列f1(k)时域波形图
title('f1(k)')
xlabel('k')
ylabel('f1(k)')
subplot(2,2,2)
stem(k2,f2)%在图2绘序列f2(k)时波形图
title('f1(k)')
xlabel('k')
ylabel('f2(k)')
subplot(2,2,3)
stem(k,f);%在子图3绘序列f(k)的波形图
title('f(k)f1(k)与f2(k)的卷积和f(k)')
xlabel('k')
ylabel('f(k)')
h=get(gca,'position');
h(3)=2.5*h(3);
set(gca,'position',h)%将第三个子图的横坐标范围扩为原来的2.5倍
02
求卷积和,
f1=[1 2 1];
k1=[-1 0 1];
f2=ones(1,5);
k2=-2:2;
[f, k]=dconv(f1,f2,k1,k2)
由运行结果知,f的长度等于f1和f2长度之和减一, f的起点是f1和f2的起点之和,f的终点是f1和f2的终点之和。
03
离散系统的单位响应
MATLAB提供画系统单位响应函数impz,调用格式是
impz(b,a) 式中b和a是表示离散系统的行向量;
impz(b,a,n) 式中b和a是表示离散系统的行向量,时间范围是0~n;
impz(b,a,n1,n2) 时间范围是n1~n2 ;y=impz(b,a,n1,n2) 由y给出数值序列;
a=[1,-1,0.9];
b=[1];
impz(b,a)
impz(b,a,60)
impz(b,a,-10:40)
04
离散系统的零状态响应
MATLAB提供求离散系统零状态响应数值解函数filter,调用格式为filter(b,a,x),式中b和a是表示离散系统的向量,x是输入序列非零样值点行向量,输出向量序号同x一样。
求零状态响应, 范围0~20。
a=[1 -0.25 0.5];
b=[1 1];
t=0:20;
x=(1/2).^t;
y=filter(b,a,x)
subplot(2,1,1)
stem(t,x)
title('输入序列')
subplot(2,1,2)
stem(t,y)
title('响应序列')
MATLAB各种版本,关注公众号回复相应版本即可。
未完待续扫码关注
不迷路
最后
以上就是喜悦短靴为你收集整理的matlab系统响应函数_MATLAB信号与系统——离散信号与系统的时域分析的全部内容,希望文章能够帮你解决matlab系统响应函数_MATLAB信号与系统——离散信号与系统的时域分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复