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

时间:2018-02-11 13:54:38

标签: algorithm matlab signals signal-processing matlab-deployment

我试图从给定的差分方程中找出因果关系,以及我已经做过的事情。

y[n] = x[n]-x[n-4]

我知道我可以通过脉冲响应h [n] = 0,n <0的必要条件找到因果关系。 我已经知道如何使用Matlab中的滤镜和滤镜操作找到任何输入的响应,因此,一种方法是使输入仅等于&#39; 1&#39;在n = 0和&#39; 0&#39;在定义的时间间隔的其他地方并找到响应。

我的问题是在滤波器操作中制作分子和分母矢量。这个特殊情况有num = [1 0 0 0 -1]den = 1,我知道如何使[n值向下进行的那些对应于向量条目]但是这些向量在非因果系统中的价值是多少例如:

y[n]=x[n]+x[n+1]

我还在学习Matlab,所以我将不胜感激。

感谢您的考虑。

2 个答案:

答案 0 :(得分:2)

域中,重复y[n] = x[n] + x[n+1]变为:

在MATLAB中你可以做到

>> 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()时,您会收到以下错误:

>> 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()时会发生同样的情况:

>> zplane([1 1], [0 1])
Error using tf2zp (line 41)
Denominator must have non-zero leading coefficient.

这是因为非因果过滤器无法实现,因此MATLAB无法模拟此类响应或识别传输函数。 s零和极点。

答案 1 :(得分:1)

您可能无法正确解释numden的使用。

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

传递函数(H(s))是,

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

和Y(s)和X(s)是y(t)和x(t)的拉普拉斯变换。 对于采样信号,x [n]的规则相同。

  

对于原始问题,任何一方的 laplace transform 都会给出 -

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)

希望这有帮助。