我有以下功能和一组值:
z(t): {R → [-2,3] | z(t) = sin(0.5×π×t) + cos(2×π×t) + 1
t = [-1 : 0.001 : 1]
我需要确定z(n×Ts) = z(n)
,使用采样周期Ts=0.01
,因此离散化函数。
我尝试使用 d2d,但据我所知,只能应用于 zpk 函数。
还有其他方法吗?
我有以下功能和一组值:
z(t): {R → [-2,3] | z(t) = sin(0.5×π×t) + cos(2×π×t) + 1
t = [-1 : 0.001 : 1]
我需要确定z(n×Ts) = z(n)
,使用采样周期Ts=0.01
,因此离散化函数。
我尝试使用 d2d,但据我所知,只能应用于 zpk 函数。
还有其他方法吗?
如果您想要信号的零阶保持近似值,可以通过以下代码完成:
Ts = 0.01;
t = -1:0.001:1;
n = t./Ts;
nSampled = nan(size(t));
nSampled(1:10:end) = n(1:10:end);
zCont = @(t)(sin(pi*t/2)+cos(2*pi*t)+1);
zZOH = @(n,Ts)(zCont(floor(n).*Ts));
zDisc = @(n,Ts)(zCont(n.*Ts));
figure;
plot(t,zCont(t),'b','DisplayName','Continuous'); hold on;
plot(t,zZOH(n,Ts),'r','DisplayName','ZOH');
stem(t,zDisc(nSampled,Ts),'k','DisplayName','Discrete');
legend('show');
这将为您提供如图所示的输出。
您可以尝试使用 ceil() 或 round() 而不是 floor() 来获得稍微不同的行为。如果您只需要 n 整数值的样本,那完全不同,并且在一般情况下实现的完全不同(由于浮点数的舍入误差)。但是:对于您的情况,它只需像在 nSampled 中那样对索引进行二次采样,因为二次采样因子为 10。对于非整数二次采样因子,这将无法正常工作。