首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从matlab中的差分方程中找到非因果向量?

如何从matlab中的差分方程中找到非因果向量?
EN

Stack Overflow用户
提问于 2018-02-11 13:54:37
回答 2查看 1.7K关注 0票数 1

我试图从一个给定的差分方程中找出因果关系,这是我已经做过的。

代码语言:javascript
复制
y[n] = x[n]-x[n-4]

我知道,我可以通过脉冲响应hn=0,n<0的必要条件找到因果关系。我已经知道如何使用Matlab中的filter和filtic操作来查找对任何输入的响应,因此,一种方法是在定义的时间间隔内使输入仅等于n=0的'1‘和其他任何地方的'0’,并找到响应。

我的问题是如何使分子和分母向量在滤波操作。这个特殊的例子有num = [1 0 0 0 -1]den = 1,我知道如何使值为n的向量向下对应于向量条目,但是这些向量在非因果系统中的值是什么,例如:

代码语言:javascript
复制
y[n]=x[n]+x[n+1]

我仍然在学习Matlab,所以我会感谢任何帮助。

谢谢你的关心。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-12 17:54:20

递归y[n] = x[n] + x[n+1]成为以下域:

在MATLAB中你可以做到

代码语言:javascript
复制
>> num = [1 1];
>> den = [0 1];
>> sys = filt([1 1], [0 1]) % Alternatively: sys = tf([1 1], [0 1], -1, 'variable', 'z^-1')

sys =

  1 + z^-1
  --------
    z^-1

Sample time: unspecified
Discrete-time transfer function.

无论如何,当您尝试使用stepplot()impz()时,您会得到以下错误:

代码语言:javascript
复制
>> stepplot(sys)
Error using DynamicSystem/stepplot (line 107)
Cannot simulate the time response of improper (non-causal) models.

>> impz([1 1], [0 1])
Error using filter
First denominator filter coefficient must be non-zero.

在尝试使用zplane()时也会发生同样的情况。

代码语言:javascript
复制
>> zplane([1 1], [0 1])
Error using tf2zp (line 41)
Denominator must have non-zero leading coefficient.

这是因为非因果滤波器不是物理上可实现的,因此MATLAB也不能模拟这种响应,也不能识别传递函数的零点和极点。

票数 2
EN

Stack Overflow用户

发布于 2018-02-11 21:54:01

有可能您正在错误地解释numden的使用。

num/den主要用于表示给定方程的传递函数。传递函数通常用于确定系统/eqn是否稳定/可行,并查找任何输入的输出。

一个传递函数(H)是,

H(s)=( Y(s)/X(s) )

Y(s)和X(s)是y(t)和x(t)的laplace变换。对于采样信号,xn的规则是相同的。

对于最初的问题,取laplace变换,两边都会给出-

y[n] = x[n]-x[n-4] Y(s)=X(s)-(s^4)*X(s) or, Y(s)/X(s)= (1-(s^4))

所以,num=[-1 0 0 0 1] and den=1

对于第二个方程,

y[n]=x[n]+x[n+1] Y(s)=X(s)-X(s)/s or, Y(s)/X(s)= (1-1/s)=(s-1)/s

所以,num=[1 -1] and den=[1 0]

转移fn将是tf(num/den)

希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48732239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档