使用 Kronecker Delta 的符号 Z 变换

Symbolic Z Transform with Kronecker Delta

我正在尝试绘制使用以下代码生成的 kroneckerDelta 的函数。我尝试了很多方法来绘制增量,但没有任何效果。我尝试 fplot 并在绘图前将 S 变量转换为双精度变量。但实际上没有任何效果。

close all;clear all;clc; %#ok<*CLSCR>
syms y(n) x(n) H(Z) z
H(Z) = 5*x + 2*x*z^-2 + 3*x*z^-1;
h(n) = iztrans(H(Z), z, n)
S = subs(h(n), {x}, {1})

输出为:

h(n) = 5*x(n)*kroneckerDelta(n, 0) + 3*x(n)*kroneckerDelta(n - 1, 0) + 2*x(n)*kroneckerDelta(n - 2, 0)


S = 3*kroneckerDelta(n - 1, 0) + 2*kroneckerDelta(n - 2, 0) + 5*kroneckerDelta(n, 0)

你没有展示你是如何尝试绘制的,所以不可能说出你做错了什么。但是,由于您的绘图的 Kronecker delta, you should probably use the stem 函数具有离散性。无需显式转换为浮点数,但您需要将值替换为 n:

syms n;
S = 3*kroneckerDelta(n - 1, 0) + 2*kroneckerDelta(n - 2, 0) + 5*kroneckerDelta(n, 0);
N = -5:5;
S2 = subs(S,n,N);
stem(N,S2);

另一种选择是使用matlabFunction将符号表达式转换为数值函数:

syms n;
S = 3*kroneckerDelta(n - 1, 0) + 2*kroneckerDelta(n - 2, 0) + 5*kroneckerDelta(n, 0);
S2 = matlabFunction(S);
N = -5:5;
stem(n,S2(N));

这两个选项都会生成如下图: