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

how to find the non-causal vectors from a difference equation in matlab?

我正在尝试从给定的差分方程中找出因果关系,这是我已经完成的工作。

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

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

我的问题是关于在过滤运算中生成分子和分母向量。这个特殊情况有 num = [1 0 0 0 -1]den = 1 并且我知道如何使那些具有 [n 向下进展的值对应于向量条目] 但是这些向量在非因果系统中的值是多少示例:

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

我仍在学习 Matlab,因此我将不胜感激任何帮助。

感谢您的考虑。

您可能错误地解释了 numden 的用法。

主要是,num/den用于表示给定方程的传递函数。 传递函数通常用于查找 system/eqn 是否为 stable/feasible 并查找任何输入的输出。

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

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

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

相同

For original question, take laplace transform on either side will give-

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

For the second equation,

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]

And the transfer fn will be tf(num/den)

希望对您有所帮助。

域中,重复 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() or 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 无法模拟此类响应或识别传递函数的零点和两极都不是。