# Problem seen in discrete transfer function with varable z^-1, when calc ztrans of x(n)=n*u(n)

2 views (last 30 days)

Show older comments

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 Comment

Walter Roberson
on 29 Sep 2022

### Accepted Answer

Paul
on 29 Sep 2022

Edited: Paul
on 30 Sep 2022

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 Comments

Paul
on 30 Sep 2022

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.

### More Answers (0)

### See Also

### Categories

### Products

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!