如何从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,因此我将不胜感激任何帮助。
感谢您的考虑。
您可能错误地解释了 num
和 den
的用法。
主要是,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 无法模拟此类响应或识别传递函数的零点和两极都不是。
我正在尝试从给定的差分方程中找出因果关系,这是我已经完成的工作。
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,因此我将不胜感激任何帮助。
感谢您的考虑。
您可能错误地解释了 num
和 den
的用法。
主要是,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 无法模拟此类响应或识别传递函数的零点和两极都不是。