MATLAB 离散系统的时域分析

1、以下程序中分别使用conv和filter函数计算h和x的卷积y和y1,运行程序,并分析y和y1是否有差别,为什么要使用x[n]补零后的x1来产生y1;具体分析当h[n]有i个值,x[n]有j个值,使用filter完成卷积功能,需要如何补零?


h = [3 2 1 -2 1 0 -4 0 3]; %impulse response
x = [1 -2 3 -4 3 2 1]; %input sequence
y = conv(h,x);%conv函数执行两个向量的卷积
n = 0:14;
subplot(2,1,1);%分屏
stem(n,y);%绘制散点图
xlabel('Time index n'); 
ylabel('Amplitude');
title('Output Obtained by Convolution'); 
grid;%显示坐标的网格线
x1 = [x zeros(1,8)];%补8个零
y1 = filter(h,1,x1);%使用filter函数通过解差分方程的方式实现卷积结果
subplot(2,1,2);
stem(n,y1);
xlabel('Time index n'); 
ylabel('Amplitude');
title('Output Generated by Filtering');%图表标题
grid; 
 

2、编制程序求解下列两个系统的单位冲激响应和阶跃响应,并绘出其图形。要求分别用 filter、conv、impz三种函数完成

 冲激响应:

a=[1,0.75,0.125];
b=[1,-1];
n=0:20;
x1=[1,zeros(1,20)];
y1=filter(b,a,x1);% 用filter 函数
subplot(3,1,1);
stem(n,y1,'r');
title('用filter 函数');
xlabel('n');
ylabel('y');
 

y = filter(b,a,x) 使用由分子和分母系数 b 和 a 定义的有理传递函数 对输入数据 x 进行滤波。

x2=[1,zeros(1,10)];

[h]=impz(b,a,10);

y2=conv(h,x2);%用conv函数

n=0:19;

subplot(3,1,2);

stem(n,y2);

title('用conv函数');

xlabel('n');

ylabel('y');

a=[1,0.75,0.125];
b=[1,-1];
subplot(3,1,3);
impz(b,a,21);
title('用impz函数');
 

用y=impz(p,d,N)求系统的冲激响应

阶跃响应:

a=[1,0.75,0.125];
b=[1,-1];
n=0:20;
x1=ones(1,21); %本来x应该为无限长的,但此处先取一定的长度,
%单位阶跃响应也取一定的长度
y1=filter(b,a,x1);% 用filter 函数
subplot(3,1,1);

stem(n,y1,'r');

title('用filter 函数');
xlabel('n');

ylabel('y');

x2=ones(1,21); 
[h]=impz(b,a,20);
y2=conv(h,x2);

%用conv函数
y2=y2(1:21);%去掉y2后面重复的部分
n=0:20;
subplot(3,1,2);

stem(n,y2);

title('用conv函数');
xlabel('n');

ylabel('y');

b=1;%矩阵 b已经经过累加器
subplot(3,1,3);

impz(b,a,21);

title('用impz函数');
 

a=1;
b=[0.25 0.25 0.25 0.25];
n=0:20;
x1=[1,zeros(1,20)];
y1=filter(b,a,x1);% 用filter 函数
subplot(3,1,1);
stem(n,y1,'r');
title('用filter 函数');
xlabel('n');
ylabel('y');

x2=[1,zeros(1,10)];
[h]=impz(b,a,10);
y2=conv(h,x2);%用conv函数
n=0:19;
subplot(3,1,2);
stem(n,y2);
title('用conv函数');
xlabel('n');
ylabel('y');

subplot(3,1,3);
impz(b,a,21);
title('用impz函数');

a=1;

b=[0.25 0.25 0.25 0.25];

n=0:20;

x1=ones(1,21);

y1=filter(b,a,x1);% 用filter 函数

subplot(3,1,1);

stem(n,y1,'r');

title('用filter 函数');

xlabel('n');

ylabel('y');

x2=ones(1,21);

[h]=impz(b,a,20);

y2=conv(h,x2);%用conv函数

y2=y2(1:21);

n=0:20;

subplot(3,1,2);

stem(n,y2);

title('用conv函数');

xlabel('n');

ylabel('y');

b=[b(1) b(1)+b(2) b(1)+b(2)+b(3) b(1)+b(2)+b(3)+b(4) ones(1,17)];

%将矩阵b经过累加器(暂时用加法代替)

subplot(3,1,3);

impz(b,a,21);

title('用impz函数');

总结:

filter函数求系统响应的过程:

  • y = filter(b,a,x) 使用由分子和分母系数 b 和 a 定义的有理传递函数对输入数据 x 进行滤波
  • 如果 x 为向量,则 filter 将滤波后数据以大小与 x 相同的向量形式返回。如果 x 为矩阵,则 filter 沿着第一维度操作并返回每列的滤波后的数据。

  • 使用fifter函数求系统的响应(1)由差分方程组可得需要的系数a,b(2)由响应类型确定x,传入系数即可得结果

conv函数求系统响应的过程:

  • conv 计算 卷积和多项式乘法,w = conv(u,v) 返回向量 u 和 v 的卷积。如果 u 和 v 是多项式系数的向量,对其卷积与将这两个多项式相乘等效。
  • 使用conv求系统响应:(1)用filter求得系统的冲激响应(2)用冲激响应的结果与目标响应卷积,实际的结果就是使用filter函数间接实现了原信号与目标信号的卷积,得到结果

impz函数求系统响应的过程:

  • 求系统的冲激响应响应
  • [h,t] = impz(b,a)

    这里的b和a向量就是分子和分母系数的向量。

    得到的h就是该系统的脉冲响应,而 t 是脉冲响应值对应的位置。

  • 使用impz求系统响应时首先将系数b通过累加器,再进行运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vizio<

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>