我试图从给定的差分方程中找出因果关系,以及我已经做过的事情。
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,所以我将不胜感激。
感谢您的考虑。
答案 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)
您可能无法正确解释num
和den
的使用。
主要是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)
希望这有帮助。