Problem seen in discrete transfer function with varable z^-1, when calc ztrans of x(n)=n*u(n)
2 次查看(过去 30 天)
显示 更早的评论
Hi dears,
Who knows why X1 and X2 are not the same?
X2 should be (z^-1)/(1-z^-1)^2 or (z^-1)/(1 - 2 z^-1 + z^-2)
Thanks
sympref('HeavisideAtOrigin', 1); % by default u(0)=0.5 so we set U(0)=1
u = @(n) heaviside(n) ; % change function name
u0=u(0)
syms n
x(n)=n*u(n)
X1=ztrans(x)
[num, den] = numden(X1);
X2 = tf(sym2poly(num), sym2poly(den),-1, 'variable', 'z^-1')
X2_var=X2.variable
1 个评论
Walter Roberson
2022-9-29
My tests show it is related to specifying the variable. If you let the variable default to 'z' then you get a z in the numerator
采纳的回答
Paul
2022-9-29
编辑:Paul
2022-9-30
Code works exactly as advertised
u = @(n) heaviside(n) ; % change function name
syms n
x(n)=n*u(n)
X1=ztrans(x)
[num, den] = numden(X1)
As documented in sym2poly, it returns the polynomial in descending powers of the variable, in this case z
sym2poly(num)
[1 0] is the poly representation of z.
sym2poly(den)
Here, we are telling tf that sym2poly(num) is the poly representation with variable z^-1. But wrt to z^-1, [1 0] = 1 + 0*z^-1 = 1, which is exactly what we get.
X2 = tf(sym2poly(num), sym2poly(den),-1, 'variable', 'z^-1')
So we need two steps
X2 = tf(sym2poly(num),sym2poly(den),-1)
X2.Variable = 'z^-1'
9 个评论
Paul
2022-9-30
They only need to be the same size if that's what the problem requires. For an example of when it's not required
H(z) = (1 + z^-1) / (1 + 2*z^-1 + 3*z^-2)
H = tf([1 1],[1 2 3],-1,'Variable','z^-1')
You can, of course, zero-pad the numerator if you wish (zero-pad to the right for z^-1)
H = tf([1 1 0],[1 2 3],-1,'Variable','z^-1')
but you're not obligated to do so. The only reuqirement is that num and den represent the system for the Variable that's being used.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Assumptions 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!